ios - import objc framework into swift




장치에서 프레임 워크가 작동하지 않는 iOS 응용 프로그램, dyld:라이브러리가로드되지 않음, Xcode 6 Beta (14)

iOS 8 이상

대상의 일반 탭에서 Embedded Binary 섹션에 프레임 워크를 추가하십시오. 이렇게하면 런타임에 링크 될 수 있도록 프레임 워크가 컴파일 된 상태로 복사됩니다.

왜 이런 일이 일어나는 걸까요? : 링크하는 프레임 워크가 동적으로 링크 된 프레임 워크로 컴파일되어 런타임시 링크되기 때문입니다.

참고 : 사용자 정의 프레임 워크 포함은 iOS> 8에서만 지원되므로 이전 버전의 iOS에서 작동하는 대체 솔루션이 뒤 따릅니다.

iOS가 8 미만인 경우

이 프레임 워크 (소스 코드 / 빌드 프로세스에 대한 액세스 권한)에 영향을 주면이 프레임 워크가 동적으로 링크되기보다는 정적으로 링크되도록 변경할 수 있습니다. 이렇게하면 런타임에 링크되지 않고 컴파일 된 앱에 코드가 포함되어 프레임 워크를 임베드 할 필요가 없습니다.

방법 : 프레임 워크의 Build Setting 탭 아래 Linking 섹션에서 Mach-O Type 을 Static Library로 변경합니다. 이제 임베디드 바이너리 아래에 프레임 워크를 포함 할 필요가 없습니다.

자산 포함 : 이미지, 오디오 또는 xib / nib 파일을 포함하려면 번들 (기본적으로 디렉토리, 자세한 정보는 bit.ly/ios_bundle)을 만든 다음 NSBundle을 사용하여 번들에서 에셋을로드하는 것이 좋습니다.

이 충돌은 차단 문제였습니다. 기본적으로 다음 단계를 사용하여 문제를 재현했습니다.

  • Cocoa Touch Framework 프로젝트 만들기
  • 신속한 파일과 클래스 추가 Dog
  • 기기 용 프레임 워크 구축
  • Swift에서 단일보기 응용 프로그램 만들기
  • 프레임 워크를 앱 프로젝트로 가져 오기
  • ViewController에서 프레임 워크의 swift 클래스를 인스턴스화합니다.
  • 기기에서 앱 빌드 및 실행

앱 실행이 시작되면 즉시 충돌합니다. 여기 콘솔 로그가 있습니다.

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

나는 iOS 7.1 및 8.0 장치를 구축하려고 시도했지만 둘 다 똑같습니다. 그러나 나는 애플 리케이션을 빌드하고 잘 시뮬레이터에서 실행할 수 있습니다. 또한 프레임 워크를 Required 에서 Optional with Libraries with Libraries로 변경할 수 있지만, Dog 의 인스턴스를 만들 때 응용 프로그램이 다운되어 문제가 완전히 해결되지 않았다는 것을 알고 있습니다. 동작은 디바이스와 시뮬레이터에 따라 다르다. 나는 Xcode의 베타 버전을 사용하여 디바이스 용 프레임 워크를 배포 할 수 없다고 생각한다. 누구든지 이것에 대해 비추어 줄 수 있습니까?


  1. xcode의 파일로 이동 -> 작업 영역 설정
  2. 옆에있는 화살표 / Users / apple / Library / Developer / Xcode / DerivedData를 클릭하십시오.
  3. 파생 데이터를 선택하고 휴지통으로 이동하십시오.
  4. 꽤 xcode하고 다시 엽니 다.
  5. 프로젝트를 정리하고 다시 실행하십시오.

위의 단계는 내 issuses을 해결했다.


Embedded Binaries에 프레임 워크 추가

그런 다음 정리하고 빌드하십시오.


Swift3 / Xcode 8.1을 사용하여 프레임 워크를 만들고 Objective-C / Xcode 8.1 프로젝트에서이 프레임 워크를 사용했습니다. 이 문제를 해결하려면 Build Options 에서 Always Embed Swift Standard Libraries 옵션을 사용하도록 설정해야했습니다.

이 스크린 샷을 살펴보십시오.

희망이 도움이됩니다!


개발 포드가있는 경우 시뮬레이터에서 포드 -> 클린 -> 다시 실행하여 설치 프로그램을 삭제하십시오 ...


나는 같은 문제가 있었다. 이전에는 전혀 사용하지 않은 iPhone으로 프로젝트를 구축하려고 시도했지만 새로운 프레임 워크를 추가하지 않았습니다. 나를 위해 정리 작업이 잘 진행되었습니다 ( Shift + Command + K ). Xcode 7의 베타 5와 iOS 9 베타가있는 iPhone 6을 사용했기 때문일 수도 있지만 작동했습니다.


내 환경 : Cocos2d 2.0, Box2d, Objective C

위의 다른 답변을 수행하는 것 외에도 마침내 일반 탭으로 이동하여 WatchKit을 선택적으로 만들었습니다.


놀랍게도, 적어도 Xcode 8에서는 여기에 필요한 모든 조각이 문서화되어있는 것은 아닙니다.

내 사례는 동일한 작업 공간의 일부로 맞춤 제작 프레임 워크였습니다. 그것은 잘못 제작 된 것으로 밝혀졌습니다. 이 스레드에 대한 jeremyhu의 마지막 응답을 기반으로 :

https://forums.developer.apple.com/thread/4687

FrameworkBuild Settings 에서 Dynamic Library Install Name Base ( DYLIB_INSTALL_NAME_BASE )를 Build Settings 하고 다시 빌드해야했습니다. 그것은 $(LOCAL_LIBRARY_DIR) 로 잘못 설정되었고 @rpath 로 변경해야했습니다.

따라서 링크 처리 단계에서 호스트 응용 프로그램에 경로 /Frameworks/fw.Framework/fw 응용 프로그램 /Frameworks/fw.Framework/fw 파일 경로가 아닌 런타임에서 /Library/Frameworks/fw.Framework/fw (파일 시스템의 루트와 마찬가지로)를 동적으로로드하도록 지시하고있었습니다. /Frameworks/fw.Framework/fw

다른 모든 설정에 대해서는 Build Phases 3 개 장소에 있어야하지만 호스팅 앱의 General 탭에있는 Embedded Binaries 설정에 추가하면이 모든 설정이 한 번에 완료됩니다.

어쨌든 임베딩 단계와 관련하여 직관적으로 중복되는 Copy Files 단계를 추가로 설정할 필요가 없었습니다. 빌드 스크립트의 끝 부분을 확인함으로써 필요 없다고 확신 할 수 있습니다.

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[많은 자세한 줄이 제거되었지만 Xcode UI의 간략한 요약본에서 분명합니다.]

나는 아직도 Xcode가 DYLIB_INSTALL_NAME_BASE 값을 잘못 설정 한 이유를 모른다.



먼저 Command + Option + Shift + K를 수행 한 다음 빌드를 시도하십시오. 여전히 실패하면 다음 단계를 수행하십시오.

Xcode 8에서이 오류가 발생하면 대상의 일반 탭에서 프레임 워크 상태를 필수 항목 대신 옵션으로 변경하십시오.



수정 프로그램이 작동하지 않는 경우 OS를 요세미티로 업데이트 해보세요. 그것은 나를 위해 일했다!


타사 프레임 워크를 사용하고 Cocoapods를 종속성 관리자로 사용하는 경우 pod install 를 수행하여 pod install 을 새로 고치십시오.

이 충돌은 내가 사용하고 있던 제 3 자 라이브러리에서 발생했기 때문에 위의 솔루션이 저에게 효과적 이었기 때문에 그것이 효과가 있기를 바랍니다!


필자의 경우 해결책은 컴파일 된 프레임 워크를 임베디드 바이너리 (Embedded Binaries)에서 제거하는 것이 었습니다. 임베디드 바이너리는 작업 공간의 독립 실행 형 프로젝트였으며 깨끗하게 정리 한 다음 다시 임베디드 바이너리에 다시 추가합니다.





xcode6