developer tip

CocoaPods를 사용할 때 '해당 모듈 없음'

copycodes 2020. 11. 23. 08:18
반응형

CocoaPods를 사용할 때 '해당 모듈 없음'


그래서 여기 내 절차가 있습니다. 나는 새를 만드는 Podfile프로젝트 디렉토리에, 나는 다음과 같은 추가

platform :ios, '9.0'
use_frameworks!

target 'CPod' do
pod 'AFNetworking', '~> 2.5'
pod 'ORStackView', '~> 2.0'
pod 'SwiftyJSON', '~> 2.1'
end 

나는 발사 pod install하고 모든 것이 잘되고 xcworkspace. 그때에 가서 ViewController.swift내가 얻을 포드를 가져 오려고 할 경우 No such module 'SwiftyJSON'내가 할 것 인 경우에, import SwiftyJSON. 어떤 아이디어?

편집 : SwiftyJSON은 Obj-C가 아닌 Swift 기반 모듈입니다.


Pods빌드 체계에 프레임 워크를 추가하고 프레임 워크를 빌드 해보세요 . 빌드 한 후 프로젝트를 빌드 / 실행하십시오.

단계 :

  1. 구성 메뉴> 구성 관리> 확인 Pods> 닫기꾸리다

    여기에 이미지 설명 입력

  2. Pods구성표 메뉴에서 선택 합니다.
  3. 빌드 Pods.
  4. 동일한 메뉴에서 프로젝트를 선택한 다음 빌드 / 실행하십시오.

podfile을 설치 한 후 프로젝트 .xcworkspace 파일 (.xcodeproj 아님)을 다시 열어야합니다.

  1. CocoaPods로 저장소 복제
  2. YourWorkspace / YourApplication.xcworkspace를 엽니 다.
  3. 실행할 앱을 선택하고 해당 프로젝트에 대한 포함 된 바이너리에 SwiftyJSON.framework 추가 Hit Run

해피 코딩 :)


다음을 사용하여 포드를 다시 설치할 수도 있습니다.

pod deintegrate

그리고

pod install

이것은 나를 위해이 문제를 해결했습니다.


를 눌러 명령 + 옵션 + Shift + K 다음을 실행 하여 응용 프로그램을, 당신은 마술을 볼 수 있습니다.

또는 메뉴-> 제품에서 키보드의 Option을 누르면 Clean Build Folder가 표시됩니다.

Xcode가 어떻게 우리와 함께 그런 일을 할 수 있었는지 재미있어 보이지만 Pod를 사용하여 Swift 라이브러리를 사용했을 때 나에게도 똑같은 일이 일어 났고 너무 많은 노력을 기울인 후 Clean Build Folder로 끝났습니다.


이것이 다른 사람들에게 여전히 도움이 될지 확실하지 않습니다. 그러나 제 경우에는 .podspec 파일에서 종속성을 참조하지 않는 어리석은 실수가되었습니다.

우리는 여러 내부 라이브러리가있는 애플리케이션을 가지고 있으며, 이러한 라이브러리도 서로 종속성을 가지고 있습니다. 우리는 Podfile에서 설명했지만 podspec에서는 설명하지 않았습니다.

따라서 Podfile이 다음과 같더라도 :

애플리케이션 / 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'

.podspec에서 호출해야합니다.

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'

ConsumingLibrary를 빌드하고 테스트를 실행할 수있는 이유를 알아 내려고 약 2 시간을 낭비했다고 생각하지만 앱을 빌드하자마자 세 라이브러리를 모두 소비했습니다.

해당 모듈 'DependentLibrary1'이 없습니다.


No such module 문제를 해결하는 pod install 명령 후 pod update를 사용해보십시오 . 나는 방금 시도했고 잘 작동합니다.

감사합니다, Ratneshwar


@ jakub-truhlář가 쓴 것처럼, 근본 문제는 Swift와 Objective-C 라이브러리를 혼합하는 동시성 문제로 인해 누락 된 module.modulemap 파일이지만 수동으로 파일을 생성하는 대신 파생 데이터를 여러 번 정리하는 것이 좋습니다. 프로젝트를 구축하십시오. 프로젝트가 성공적으로 빌드되면 module.modulemap 파일을 저장소에 커밋하여 해당 파일이 손실되지 않도록합니다 (예 : 현재 분기 변경).


당신이있을 때 가끔 발생 OBJ-C의 내 포드 스위프트 (당신이 사용하는 경우에도 프로젝트를 use_frameworks!에서 .podfile).

당신은 확실히 경우 포드가 설치되어 있고 여전히 점점되지 않음 등의 모듈을 ,이 시도 :

  • Xcode에서 포드 프로젝트로 이동
  • 포드
  • 영향을받는 포드를 마우스 오른쪽 버튼으로 클릭합니다.
  • 파인더에 표시

.framework 접미사 가있는 패키지 파일이 있어야합니다 . 안에 Modules 폴더를 만듭니다 . 이 폴더에서 다음 코드를 사용하여 module.modulemap 이라는 파일을 만듭니다 .

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"
}

다시 빌드 하면 괜찮을 것입니다.


내가 개발 한 신속한 프레임 워크에서 동일한 문제에 직면했습니다. 프레임 워크에는 git 프로젝트의 종속성이 있었고 프레임 워크 자체는 내 주 프로젝트에 포드로 추가되었습니다. 따라서 이상적으로 종속성은 podspec 파일과 Podfile에도 지정되었습니다.

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

I usually remove Pods folder and .xcworkspace file, then I run pod installagain and it helps in almost 100% cases.


My setup

  • macOS 10.14 Mojave
  • Xcode 10.3
  • cocoapods 1.7.5

None of the answers work for me, although some gave partial clues. In my case, the root cause was that I customized my build product paths after running pod install.

If you run cocoapods right after creating an Xcode project, then it usually works if you open the generated Xcode .xcworkspace instead of the .xcodeproj.

Funny things happen if you start tweaking your build product paths after generating the workspace. Because the generated Pods project and its target all refer to your old Xcode project settings.

In my case, my trouble came from:

  • I prefer all my build products sitting under the project folder $(SRCROOT)/build/$(CONFIGURATION)/$(EFFECTIVE_PLATORM_NAME). So I went ahead and changed my Pre-configuration Build Products Path to it .... AFTER doing pod install.

Now, the generated Pods project, including all its Framework target, still points to the old location, so both the header import and linking of your own project will fail (you'd see Command PhaseScriptExecution failed with a nonzero exit code when No such module is fixed).

The fix:

  • Delete all Pods stuff including the workspace.
  • Regenerate Pods project and workspace with pod install. However, cocoapods hardcodes the build product path to ${SRCROOT}/../build and Pre-configuration Build Products to $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) in my case, which usually points to a temporary ~/Library/Developer subfolder . Still not quite right. Then ....
  • Make sure the Framework Search Path and Header Search Path of my own project cover the above paths.
  • Tweak Pods project setting and all dependency Framework's Pre-configuration Build Products Path to use my preferred paths.

The moral lesson: Always regenerate Pods and verify the key result paths whenever you touch paths in Xcode project settings.

UPDATE

Xcode 11을 통해 Apple은 마침내 혼란스러운 "사전 구성 빌드 제품 경로"를 제거했습니다. 빌드 제품 경로를 사용자 지정하려면 Locations전역 상대 경로가 미리 적용된 Xcode 환경 설정에서 사용하십시오 .


Objective-C에서 Swift를 사용하려면 컴파일 타임에 Xcode가 자동으로 생성하는 헤더 파일 (NameOfModule + Swift.h)을 가져와야합니다. 이 경우 다음과 같이 헤더 파일에서 SwifityJSON 가져 오기를 시도해야합니다.

#import "SwiftyJSON-Swift.h" 

참고 URL : https://stackoverflow.com/questions/31065447/no-such-module-when-i-use-cocoapods

반응형