Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Missing required module 'XYZ'" on Unit Tests when using Swift Package Manager

Tags:

xcode

ios

swift

I'm using Swift Package Manager on an iOS app on Xcode 11 following the instructions from https://developer.apple.com/videos/play/wwdc2019/408/

Everything looks great, except Unit Tests won't work now.

Navigator panel Project setup Error

like image 485
betzerra Avatar asked Sep 26 '19 22:09

betzerra


2 Answers

This occurs because at the moment (Xcode 11.1, October 2019) SPM decencies are not automatically linked to test targets.

We can manually link it by:

  1. Clicking on your Xcode project file (e.g. Headlines)
  2. Select test target from the sidebar (e.g. HeadlinesTests)
  3. Navigating to Build Phases in the top bar.
  4. In the Link Binary With Libraries phase, add the required library from the SPM dependency (this looks like a white building within the SPM package 📦).
  5. You may also need to add the library to the Dependencies phase.
like image 132
Bradley Mackey Avatar answered Sep 28 '22 01:09

Bradley Mackey


After researching a bit, I got this fixed by adding -Xcc -fmodule-map-file=$(PROJECT_TEMP_ROOT)/GeneratedModuleMaps/macosx/<missing module name>.modulemap to OTHER_SWIFT_FLAGS in the test target.

Source:

  • https://github.com/apple/swift-nio/issues/1128#issuecomment-527566361
  • https://github.com/ReactiveX/RxSwift/issues/2057#issuecomment-538371425
  • https://github.com/swift-aws/aws-sdk-swift/issues/167#issuecomment-527650662

PS: Use -Xcc -fmodule-map-file=$(PROJECT_TEMP_ROOT)/GeneratedModuleMaps/iphonesimulator/<module name>.modulemap if your platform is iOS.

UPDATE: Also, it seems that this is fixed on Xcode 11.2 beta2

like image 26
betzerra Avatar answered Sep 28 '22 00:09

betzerra