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

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


This occurs because at the moment (Xcode 11.1, October 2019) SPM dependencies 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.

Tags:

Ios

Xcode

Swift