programing

코코아 포드를 사용할 때 '해당 모듈 없음'이 표시됨

codeshow 2023. 8. 5. 11:05
반응형

코코아 포드를 사용할 때 '해당 모듈 없음'이 표시됨

제 절차는 이렇습니다.새 항목을 만듭니다.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. 메뉴 > Scheme > Scheme 확인 > Manage Scheme > 인Pods> 닫기

    enter image description here

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

포드 파일을 설치한 후 프로젝트 .xcodeproj가 아닌 .xcworkspace 파일을 다시 열어야 합니다.

  1. 코코아 포드로 레포 복제
  2. 작업영역/응용프로그램을 엽니다.xc워크스페이스
  3. 해당 프로젝트에 대해 내장된 바이너리에서 Add SwiftyJSON.framework를 실행할 앱을 선택합니다. Hit Run

해피 코딩 :)

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

pod deintegrate

그리고 나서.

pod install

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

명령 + 옵션 + 를 누릅니다.Shift+K를 누른 다음 을 실행하면 마법이 나타납니다.

또는 메뉴 -> 제품에서 키보드의 옵션을 누르면 빌드 폴더 정리가 표시됩니다.

Xcode가 어떻게 우리와 함께 그런 일들을 할 수 있었는지 우습지만, 제가 Pod를 사용하는 Swift 라이브러리를 사용했을 때 똑같은 일이 일어났고, 너무 많은 어려움 끝에 Clean Build Folder를 갖게 되었습니다.

이것이 여전히 다른 사람들에게 도움이 될지 모르겠습니다.하지만 제 경우에는 .Podspec 파일의 종속성을 참조하지 않은 어리석은 실수로 끝났습니다.

여러 개의 내부 라이브러리가 있는 애플리케이션이 있으며, 이러한 라이브러리는 서로 종속되어 있습니다. 이는 포드 파일에서 설명한 것과 같습니다.하지만 포드 스펙에는 없습니다.

Pod 파일에는 다음과 같은 기능이 있습니다.

응용 프로그램 / 포드 파일

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

라이브러리/포드 파일 사용

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

.podspec에서도 이를 호출해야 합니다.

Library.podspec 사용 / Library.podspec 사용

  # TODO
  # Add here any resources to be exported.

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

종속 라이브러리1 / 종속 라이브러리1.podspec

  # TODO
  # Add here any resources to be exported.

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

제가 Consumering Library를 구축하고 테스트를 실행할 수 있는 이유를 찾느라 약 2시간을 허비한 것 같습니다. 하지만 앱을 구축하자마자 세 개의 라이브러리를 모두 사용했습니다.

이러한 모듈 'Dependent Library1'이(가) 없습니다.

제 경우에는 제가 열었기 때문입니다.xcodeproj 정한대에 xcworkspace.

이 문제도 있었습니다.는 폴발습다니했견를더에 했습니다.Pods/broken_framework_name오류가 발생한 프레임워크의 경우 포드 설치 또는 포드 업데이트 후에도 비어 있습니다.따라서 이러한 단계는 다음과 같은 도움이 되었습니다.

  1. 밀접한 관계가 XCode
  2. 거한제를 합니다.DerivedData
  3. 거한제를 합니다.Podfile.lock을 수행하기 되어 있고 않는 코드 업데이트가 하지 않는지 하십시오. 작 업 수 을 버 로 업 코 트 가 이 확 다 니 합 인 않 지 지 는 하 생 이 발 데 드 않 는 원 지 하 있 설 고행 하 정 되기전특전어정으에드 포 가 ▁before 다 니 합 확 인 ▁updates ▁make ▁doing , ▁are ▁versions ▁it ▁sure ▁your 이 ▁it
  4. 려달을 pod deintegrate
  5. 거한제를 합니다..xcworkspace
  6. 아마도 선택적 단계:나는 일반적인 전화를 받았습니다.use_frameworks!, 되어 있습니다.
  7. 려달을 pod install

모든 단계를 거친 후에 누락된 프레임워크 파일이 마침내 다시 나타나 빌드가 다시 작동하고 있음을 알게 되었습니다.

해당 모듈 없음 문제를 해결하는 포드 설치 명령 후 포드 업데이트를 사용해 보십시오.그냥 시도해 봤는데 잘 됐어요.

고마워, 라트네슈와르

여러 대상으로 작업하는 분들은 포드에 이 행을 추가하는 것을 잊지 마십시오.

def shared_pods
    pod 'SSKeychain', '~> 0.1.4'
    pod 'INAppStoreWindow', :head
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
    pod 'KSADNTwitterFormatter', '~> 0.1.0'
    pod 'MASShortcut', '~> 1.1'
    pod 'MagicalRecord', '2.1'
    pod 'MASPreferences', '~> 1.0'
end

target 'Target_Name' do
    shared_pods
end

target 'Target_Name_Two' do
    shared_pods
end

때때로 빠른 프로젝트 내에 obj-c 포드가 있을 때 발생합니다.use_frameworks!에 시대에.podfile).

포드가 설치되어 있고 해당 모듈이 없는 것으로 확인되면 다음을 시도하십시오.

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

.framework 접미사가 있는 패키지 파일이 있어야 합니다.폴더 모듈을 만듭니다.이 폴더에서 코드를 사용하여 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"
}

다시 만들면 괜찮을 겁니다.

@jakub-truhlái가 썼듯이 근본 문제는 Swift와 Objective-C 라이브러리를 혼합하는 일부 동시성 문제로 인해 module.modulemap 파일이 누락된 것입니다. 그러나 이러한 파일을 수동으로 만드는 대신 파생 데이터를 여러 번 정리하고 프로젝트를 빌드하는 것이 좋습니다.프로젝트가 성공적으로 구축되면 module.modulemap 파일을 저장소에 커밋하여 현재 분기 변경과 같은 파일이 손실되지 않도록 합니다.

저는 제가 개발한 빠른 프레임워크에서 동일한 문제에 직면했습니다.프레임워크는 git 프로젝트의 종속성을 가지고 있었고 프레임워크 자체는 제 메인 프로젝트에 포드로 추가되었습니다.따라서 podspec 파일과 podfile에도 의존성이 지정되는 것이 이상적입니다.

메인 프로젝트를 통해 액세스할 때는 문제가 발생하지 않았지만 프레임워크를 독립적으로 열었을 때 "No such module(해당 모듈 없음)" 오류가 발생했습니다.

근본 원인은 기본 프로젝트에서 podinstall을 먼저 실행한 다음 프레임워크 프로젝트에서 실행했기 때문에 기본 구성이 프레임워크 자체가 아닌 기본 프로젝트를 가리키는 경로로 설정되어 있기 때문입니다.

예: 프로젝트 파일에서 0091과 같았습니다.AB0C861D71C94ADD7240 /* Pods-myframework.release.xcconfig */ = {isa = PBXFileReference; includeIn인덱스 = 1, lastKnownFileType = text.xccconfig, name = "Pods-myframework.release.xccconfig", 경로 = "..../../Apps/MyMainProject/Pods/타깃 지원 파일/Pods-myframework/Pods-myframework.release.xcconfig"; sourceTree = "; };

아래 언급된 수정 작업을 수행한 후 444F5B1B35F066E57F96782 /* Pods-myframework.release.xcconfig */ = {isa = PBXFileReference; includeIn인덱스 = 1, lastKnownFileType = text.xccconfig, name = "Pods-myframework.release.xccconfig"; 경로 = "Pods/타깃 지원 파일/Pods-myframework/Pods-myframework.release"입니다.xcconfig"; sourceTree = "; };

오류를 수정하려면,

  1. 프로젝트 파일 -> 구성 -> 모든 구성을 없음으로 설정합니다.
  2. Pods 폴더와 Podfile.lock을 제거합니다.
  3. 먼저 프레임워크 프로젝트 디렉토리에서 'pod install'을 실행한 후 메인 프로젝트 디렉토리에서 pod install을 실행합니다.

'... 이 설시다같경표시됩니다고가은포 '라는 됩니다. 대상이 대상보다 우선합니다.FRAMEWORK_SEARCH_PATHS에서 입니다.

고치고 즐기세요.

참조: 대상은 FREATE_SEARCH_PATHs 빌드 설정을 재정의합니다.

다른 플랫폼(예: iOS 및 watch)을 가진 여러 대상이 있는 경우 이 문제가 나타날 수 있습니다.OS) 포드 파일이 각 대상에 대해 올바른 플랫폼을 지정하는지 확인해야 합니다.그렇지 않으면 Cocoapods가 올바른 포드를 구축하고 있지만 잘못된 플랫폼을 위해 "No this module" 오류가 발생할 수 있습니다.

예를 들어 올바른 플랫폼을 지정하는 것만으로 문제를 해결할 수 있습니다.

# global platform
platform :ios, '11.0'

target 'My Framework' do
  use_frameworks!

  pod 'RxSwift', '~> 5.1'
end

target 'My Framework (watchOS)' do
  # override global platform for this target
  platform :watchos, '4.0'

  use_frameworks!

  pod 'RxSwift', '~> 5.1'
end

"암묵적 종속성 찾기"를 선택하여 true로 수정했습니다.Edit Scheme -> Build Tab -> Find Implicit Dependencies = true로 이동합니다.

다시 빌드합니다.

enter image description here

프레임워크 module.modulemap 파일에 "c++" 링크를 추가하는 것이 나를 위해 작동했습니다.

XCode를 열고 file->open recent를 통해 프로젝트의 작업영역을 선택했을 때 이 문제가 발생했습니다.

파일 시스템에 동일한 작업 공간/프로젝트를 위한 두 개의 .xcworkspace 파일이 있습니다.

올바른 .xcworkspace 파일을 두 번 클릭하여 XCode를 여는 것이 효과적이었습니다.정확한 것은 작동하는 것입니다.

저는 나중에 잘못된 것을 삭제했습니다.

터미널의 특정 종속성을 방금 업데이트했습니다.

프로젝트 폴더로 이동한 다음 아래 명령을 실행합니다.

포드 이름 업데이트

나를 위해 나는 해야 합니다.

포드 업데이트 도달 가능성Swift

이전 프로젝트에 이미 수동으로 립을 포함한 이전 프로젝트에 코코아 포드를 추가하는 동안 이 문제가 발생했습니다.가 Xcode로 했습니다.Framework Search Path이전에 대상 설정에 설정된 값으로 인해 코코아 포드에서 생성됩니다.

도움이 된 솔루션:

  1. 옛길을 그대로 베끼다

  2. delete를 .Framework Search Path - 가 거기에 . - 열 설 - 코 포 생 경 가 표 로 시 됩 니 한 다 대 성 가 드 코 아 정 의 니 ▁settings 됩 ▁there 다 표 대 시 ▁appear

  3. 생성된 경로 아래에 이전 검색 경로를 다시 추가합니다(작업할 프레임워크가 수동으로 추가된 경우에만 필요).

  4. 프로젝트 정리, 파생 데이터 삭제, 빌드.

결과는 다음과 같습니다(Xcode에 의해 추가된 첫 번째 줄, CocoPod에 의해 추가된 두 번째 줄, 그리고 세 번째 줄은 수동).

대상이 여러 개인 경우.예를 들면.대상 1, 대상 2

use_frameworks!

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

   target 'Target2' do
   end

end

그런 다음 포드 설치를 실행합니다.

저는 이 모든 제안들을 시도해 보았지만 아무 것도 저에게 효과가 없었습니다.대신에 제게 효과가 있었던 것은 포드를 분해하는 것이었습니다.그런 다음 xcode 계층에서 포드 폴더를 삭제하고 포드 설치를 수행합니다.갑자기 작동했습니다.어쨌든 이 제안들의 대부분이 적중하거나 누락되었기 때문에 이유를 묻지 마십시오. 하지만 다른 사람에게도 효과가 있다면 기쁠 것입니다 :)

에 정의된 올바른 을 가져와야 ..podspec

저는보제다니합거통다▁remove를 제거합니다.Pods 및 폴및더.xcworkspace파일, 그리고 나서 실행합니다.pod install거의 100%의 경우에 도움이 됩니다.

내 설정

  • macOS 10.14 모하비
  • Xcode 10.3
  • 코코팟 1.7.5

일부는 부분적인 단서를 제공했지만, 어떤 답도 저에게 효과가 없습니다.저의 경우, 근본 원인은 실행 후 빌드 제품 경로를 사용자 지정했기 때문입니다.

Xcode 프로젝트를 만든 후 바로 cocoapod를 실행하면 생성된 Xcode를 열면 일반적으로 작동합니다..xcworkspace대신에.xcodeproj.

워크스페이스를 생성한 후 빌드 제품 경로를 조정하기 시작하면 재미있는 일이 발생합니다.생성된 Pods 프로젝트와 대상은 모두 이전 Xcode 프로젝트 설정을 참조하기 때문입니다.

제 경우, 제 문제는 다음과 같습니다.

  • 프로젝트 폴더 아래에 있는 모든 빌드 제품을 선호합니다.$(SRCROOT)/build/$(CONFIGURATION)/$(EFFECTIVE_PLATORM_NAME)그래서 나는 계속해서 나의 것을 바꿨습니다.Pre-configuration Build Products Path그것까지...한 후에

이제 생성된 데이터는Pods모든 프레임워크 대상을 포함한 프로젝트는 여전히 이전 위치를 가리키기 때문에 자신의 프로젝트의 헤더 가져오기와 링크가 모두 실패합니다.Command PhaseScriptExecution failed with a nonzero exit code 때에No such module고정됨).

해결 방법:

  • 작업영역을 포함한 모든 포드 항목을 삭제합니다.
  • Pods 및 (「 」 포함)pod install그러나 cocoa pods는 빌드 제품 경로를 하드 코딩합니다.${SRCROOT}/../build그리고.Pre-configuration Build Products$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)내 경우에는, 보통 일시적인 것을 가리킵니다.~/Library/Developer하위 폴더입니다. 여전히 정확하지 않습니다.그럼..
  • 다음을 확인합니다.Framework Search Path그리고.Header Search Path위의 경로를 커버하는 내 프로젝트의.
  • 위크트Pods 및 프레임워크의 설정Pre-configuration Build Products Path내가 선호하는 경로를 사용합니다.

도덕적 교훈:Xcode 프로젝트 설정에서 경로를 터치할 때마다 항상 포드를 재생성하고 주요 결과 경로를 확인합니다.

갱신하다

Xcode 11을 사용하여 Apple은 혼란스러운 "사전 구성 빌드 제품 경로"를 마침내 제거했습니다.빌드 제품 경로를 사용자 지정하려면 다음을 사용합니다.Locations글로벌 상대 경로가 사전에 구워진 Xcode 기본 설정입니다.

이 경고가 표시되는 경우:

[!] The `Joint [Debug]` target overrides the `FRAMEWORK_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-Joint/Pods-Joint.debug.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The `Joint [Release]` target overrides the `FRAMEWORK_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-Joint/Pods-Joint.release.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

피하도록 지시에 따릅니다.Module not found 발행.

나의 경우, 나의 것에서 다음을 제거하는 것.podFile수정:

      installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
  • 깨끗한 프로젝트
  • close xcode
  • open xcode
  • 즐거운 시간 되세요.

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

#import "SwiftyJSON-Swift.h" 

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

반응형