'No such module' when I use CocoaPods

社会主义新天地 提交于 2019-11-28 16:47:53
Micah Benn

Try adding the Pods framework to your build scheme and building the framework. After you've built it, build/run your project.

Steps:

  1. Scheme menu > Manage Schemes > check Pods > Close

  2. Select Pods from the scheme menu.
  3. Build Pods.
  4. Select your project from the same menu, then build/run it.

You must reopen project .xcworkspace file(not .xcodeproj) after install your podfile.

  1. Clone the repo with CocoaPods
  2. Open YourWorkspace/YourApplication.xcworkspace
  3. Select the app u want to run Add SwiftyJSON.framework in embedded binaries for that project Hit Run

Happy Coding :)

You may also try re-installing pods using:

pod deintegrate

and then

pod install

This fixed this issue for me

Press Command+Option+Shift+K and then Run your app, you will see a magic.

Or from the menu -> Product, press Option on your keyboard and you'll see Clean Build Folder.

It's looking funny that how could Xcode do those things with us but same thing happened to me when I used a Swift library using Pod and after too much struggle I ended up with Clean Build Folder.

Not sure if this would still be helpful for others. But, in my case, it ended up being a silly mistake of not referencing dependencies from the .podspec file.

We have an application with multiple internal libraries, and those libraries also have dependencies on each other - which we accounted for the in the Podfiles... but NOT in the podspecs.

So, even though our Podfiles had:

Application / Podfile

# Development Pods
pod 'ConsumingLibrary ', :path => '../ios-consuming-lib'
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

ConsumingLibrary / Podfile

# Development Pods
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'

Needed to also call it out in the .podspec's:

ConsumingLibrary / ConsumingLibrary.podspec

  # TODO
  # Add here any resources to be exported.

  s.dependency 'DependentLibrary1', '~> 0.1.0-RC'

DependentLibrary1 / DependentLibrary1.podspec

  # TODO
  # Add here any resources to be exported.

  s.dependency 'CommonCoreLibrary', '~> 0.1.0-RC'

I think I wasted about 2 hours trying to figure out why I could build ConsumingLibrary & run tests, but as soon as I built the app, that consumed all three libraries - I kept getting:

No such module 'DependentLibrary1'

Try using pod update after pod install command which will solve problem of No such module. I just tried and it working fine.

Thanks, Ratneshwar

As @jakub-truhlář wrote, the root issue is the missing module.modulemap file due to some concurrency issue mixing Swift and Objective-C libraries, but instead of creating those files manually, would be better to try multiple times cleaning the Derived Data and build your project. When the project is successfully built then commit module.modulemap files to your repository to avoid to lose those files for example changing the current branch.

Sometimes happens when you have an obj-c pod within a swift project (even when you use the use_frameworks! in the .podfile).

If you're sure the pod is installed and you are still getting No such module, try this:

  • Go to Pods project in Xcode
  • Pods
  • Right click on the affected pod
  • Show in finder

There should be a package file with .framework suffix. Create a folder Modules in it. In this folder create a file called module.modulemap with code:

framework module MODULE_NAME_HERE {
  umbrella header "MODULE_NAME_HERE.h"

  export *
  module * { export * }

  link framework LINKED_FRAMEWORKS_AND_LIBRARIES_THE_POD_NEEDS_HERE
  link framework "AdSupport"
  link "c++"
  link "z"
}

Rebuild and you should be ok.

I faced the same problem in a swift framework I developed. The framework had a dependency of git project and the framework itself added as a pod to my main project. So, ideally the dependency has been specified in podspec file and Podfile as well.

I didn't faced the problem when accessing through the my main project but when I open the framework standalone it was throwing "No such module" error.

The root cause is, the base configurations is set with the path which points towards my main project instead of the framework itself because I ran podinstall first in my main project and then in the framework project.

Eg: in the project file it was like 0091AB0C861D71C94ADD7240 /* Pods-myframework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-myframework.release.xcconfig"; path = "../../Apps/MyMainProject/Pods/Target Support Files/Pods-myframework/Pods-myframework.release.xcconfig"; sourceTree = ""; };

After doing the below mentioned fix, 4444F5B1B35F066E57F96782 /* Pods-myframework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-myframework.release.xcconfig"; path = "Pods/Target Support Files/Pods-myframework/Pods-myframework.release.xcconfig"; sourceTree = ""; };

To fix the error,

  1. Project file -> Configurations -> Set all the configurations set to none.
  2. Remove Pods folder and Podfile.lock.
  3. Run 'pod install' first in the framework project direcory and then do pod install in main project directory.

I just updated particular dependencies in terminal

Go to project folder then run below command

pod update your pod name

For me I need to do

pod update ReachabilitySwift

Adding link "c++" in the framework module.modulemap file worked for me

I had this problem when I opened XCode and then selected the workspace of my project via file->open recent.

I found that I had two .xcworkspace files on my filesystem for the same workspace/project.

Opening XCode by double clicking on the correct .xcworkspace file did the trick. The correct one is the one that works.

I later deleted the wrong one.

Had this issue while adding CocoaPods into an old project, which already had manually included libs from before. It happened because Xcode was not resolving to the Framework Search Path generated by CocoaPods because of values previously set in target's settings.

Solution that helped me:

  1. copy the old path

  2. hit delete to completely clear the Framework Search Path settings in the target's column - the path, generated by CocoaPods would appear there

  3. add the old search path back under the generated one (only needed if you still have some manually added frameworks to work with)

  4. Clean project, wipe Derived Data, build.

The result would look like this (1st line added by Xcode, 2nd added by CocoaPods, and 3rd is manual):

In case of multiple targets. For eg. Target1, Target2

use_frameworks!

target 'Target1' do
 pod 'Fabric'
 pod 'Crashlytics'

   target 'Target2' do
   end

end

Then run pod install.

I tried all of these suggestions but nothing worked for me. Instead what'd worked for me was deintegrating pods. Afterwards deleting the pods folder from xcode hierarchy and doing pod install. Suddenly it worked. Don't ask me why because anyways most of these suggestions are hit or miss anyways but I'll be happy if it works for someone else too :)

Make sure to import correct framework name that is defined in .podspec of the pod.

  • clean project
  • close xcode
  • open xcode
  • enjoy

For using Swift in Objective-C, you should import a header file that Xcode generates automatically in compile time (NameOfModule+Swift.h). In this case, you should try import SwifityJSON in you header file like this:

#import "SwiftyJSON-Swift.h" 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!