Swift frameworks do not work with build configurations named other than 'Debug' or 'Release': No such module

IosBuildSwiftFrameworksXcode6

Ios Problem Overview


Whenever I try to use a build configuration named other than 'Debug' or 'Release', Xcode suddenly cannot find my Swift frameworks. The configurations are the exact same other than their name (in fact, the new configuration was duplicated from the working 'Debug' configuration).

Build configurations screenshot

Xcode reports 'No such module'

Xcode error

This seems like a really strange bug. Surely someone has come across this before? My Google search yielded no results. Does anyone have any idea what may be causing this issue? I'm pretty sure I added the framework correctly.

I've created a short screencast to show you exactly what I'm doing: http://www.screencast.com/t/zpgZ5ZYgvH

Bottom line:

  1. Make sure project currently builds using third-party Swift frameworks
  2. Select the project in the project/file navigator
  3. Select the project above Targets in the editor left sidebar and make sure you are on the Info tab
  4. Duplicate the current configuration (likely 'Debug') by clicking the + button below the list of configurations and selecting 'Duplicate XXX Configuration'
  5. Modify your scheme to use the new configuration by going to Product (menu) > Scheme > Edit Scheme...
  6. Select Run in the left sidebar
  7. Select your new configuration under Build Configuration
  8. Attempt to build again

You can also download the sample project: http://s000.tinyupload.com/?file_id=48797763216274271820

I'm running Xcode 6.0.1 (6A317) and Yosemite 10.10 (14A361c).

Ios Solutions


Solution 1 - Ios

Add the following Framework Search Path in the Build Settings of your target: $(SYMROOT)/Release$(EFFECTIVE_PLATFORM_NAME) and make it non-recursive

In my case this was for Alamofire, which was added to my project as a git submodule.

The framework was being built correctly which can be seen in the build logs, but I assume the default framework search path is derived from the scheme name. The Alamofire framework & dSYM file are in Release-iphoneos/ Release-iphonesimulator.

This should work work with any Swift framework as long as it's scheme names are default. If not, check the build logs and adjust the framework search path accordingly.

Solution 2 - Ios

I had this issue as well and fixed it by adding the same configuration names to the included Alamofire project.

My build schemes in my main project: main project configs

And the build schemes inside the Alamofire project: screenshot of schemes

Note: Also, make sure your iOS deployment target is the same in both projects.

Solution 3 - Ios

If you are using CocoaPods, try pod install this will generate some .xcconfig files with your configuration name. Clean your build folder and build again.

Solution 4 - Ios

If you have a modular structure (e.g. the App uses frameworks to decouple UI, Services or Business Logic from the application's main module) then add the new Build Configuration to each subproject that builds these frameworks.

In this case if the author had, let's say, Services Framework in his workspace then he had to add a Debug Original configuration to it too. And then run pod install, of course.

This is how I fixed my issue.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDJ TarazonaView Question on Stackoverflow
Solution 1 - IosJames ZaghiniView Answer on Stackoverflow
Solution 2 - IosAntoineView Answer on Stackoverflow
Solution 3 - IosDoug AmosView Answer on Stackoverflow
Solution 4 - IosAnton OgarkovView Answer on Stackoverflow