프레임 워크가있는 iOS 앱이 기기에서 충돌 함, dyld : 라이브러리가로드되지 않음, Xcode 6 베타
이 충돌은 차단 문제였습니다. 문제를 재현하기 위해 다음 단계를 사용했습니다.
- Cocoa Touch Framework 프로젝트 만들기
- 신속한 파일과 Dog 클래스 추가
- 장치 용 프레임 워크 구축
- Swift에서 Single View 애플리케이션 만들기
- 앱 프로젝트로 프레임 워크 가져 오기
- ViewController의 프레임 워크에서 신속한 클래스 인스턴스화
- 장치에서 앱 빌드 및 실행
앱 시작시 즉시 충돌이 발생했습니다. 콘솔 로그는 다음과 같습니다.
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 장치에서 빌드하려고 시도했지만 둘 다 동일한 충돌이 발생합니다. 그러나 앱을 빌드하고 시뮬레이터에서 잘 실행할 수 있습니다. 또한 Link Binary With Libraries 에서 Required to Optional 형태로 프레임 워크를 변경할 수 있다는 것을 알고 있지만 문제가 완전히 해결되지 않았고 Dog 인스턴스를 만들 때 앱이 충돌했습니다 . 장치와 시뮬레이터에서 동작이 다르기 때문에 베타 버전의 Xcode를 사용하여 장치 용 프레임 워크를 배포 할 수없는 것 같습니다. 누구든지 이것에 대해 밝힐 수 있습니까?
대상의 일반 탭에 포함 된 바이너리 필드가 있습니다. 프레임 워크를 추가하면 충돌이 해결됩니다.
Apple 개발자 포럼에 대한 참조가 있습니다 .
8 이상의 iOS의 경우
대상의 일반 탭 아래에있는 임베디드 바이너리 섹션에서 프레임 워크를 추가하십시오. 그러면 런타임에 링크 될 수 있도록 프레임 워크가 컴파일 된 파일로 복사됩니다.
왜 이런 일이 발생합니까? : 링크하는 프레임 워크가 동적으로 링크 된 프레임 워크로 컴파일되어 런타임에 링크되기 때문입니다.
참고 : 사용자 정의 프레임 워크 임베드는 iOS> 8에서만 지원되므로 이전 버전의 iOS에서 작동하는 대체 솔루션은 다음과 같습니다.
iOS 8 미만
이 프레임 워크에 영향을 미치는 경우 (소스 코드 / 빌드 프로세스에 대한 액세스 권한이 있음) 동적 링크가 아닌 정적으로 링크되도록이 프레임 워크를 변경할 수 있습니다. 이렇게하면 코드가 런타임에 연결되지 않고 컴파일 된 앱에 포함되므로 프레임 워크를 포함 할 필요가 없습니다.
방법 : 프레임 워크의 빌드 설정 탭에있는 연결 섹션에서 Mach-O 유형 을 정적 라이브러리로 변경합니다 . 이제 임베디드 바이너리 아래에 프레임 워크를 포함 할 필요가 없습니다.
자산 포함 : 이미지, 오디오 또는 xib / nib 파일과 같은 것을 포함하려면 번들 (기본적으로 디렉터리, 자세한 정보는 여기에 bit.ly/ios_bundle)을 생성 한 다음 NSBundle을 사용하여 번들에서 자산을로드하는 것이 좋습니다.
프레임 워크를 프로젝트로 드래그하는 것만으로는 충분하지 않습니다. 그것은 같은 야구장에 있지만 자녀를 찾을 수없는 것과 같습니다. 다음과 같이하세요:
1) 프레임 워크 만들기
- 프레임 워크를 개발하십시오.
- 개발이 완료되면
COMMAND
+B
프레임 워크를 빌드하고 "빌드 성공"을 받으십시오.
2) 프레임 워크에 액세스
- 프레임 워크 프로젝트가 성공적으로 빌드되면 프로젝트의
Products
폴더에 액세스 할 수 있습니다 .
- 를 마우스 오른쪽 버튼으로 클릭
.framework
하고 "Finder에 표시"를 선택합니다.
3) 프로젝트에 프레임 워크 배치
.framework
Finder 창에서 앱 프로젝트의 "Framework"폴더로를 끌어다 놓습니다 .
4) 프레임 워크 용 앱 프로젝트 구성
- 프로젝트에서 최상위 레벨을 선택하십시오.
- 목표를 선택하세요
- "Build Phases", "Link Binary with Libraries"로 이동하여 프레임 워크가 선택 사항에 포함되어 있는지 확인합니다 .
- 여전히 "Build Phases"에서 왼쪽 상단으로 이동하여
+
버튼을 선택 합니다. 드롭 다운에서 "New Copy Files Phase"를 선택합니다.
- 새로운 "파일 복사"섹션까지 아래로 스크롤
Destination
하여 "프레임 워크"로 설정했는지 확인합니다 . 하위 경로는 비워 둡니다. 그런 다음+
왼쪽 하단 의 버튼을 클릭합니다 .
- 프로젝트 계층 구조가 표시됩니다. 3 단계에서 프레임 워크를 추가 한 "Frameworks"폴더까지 아래로 스크롤하거나 상단의 검색 창에서 검색합니다. 프레임 워크를 선택하고 "추가"를 클릭하십시오.
- 프레임 워크가 "Code Sign On Copy"가 선택된 상태로 포함되어 있는지 확인하십시오.
5) 정리 후 프로젝트 실행
COMMAND
+SHIFT
+K
COMMAND
+R
먼저 Command + Option + Shift + K 이후 빌드를 시도하십시오. 그래도 실패하면 아래 단계를 수행하십시오.
Xcode 8에서이 오류가 발생 하면 대상의 일반 탭에서 프레임 워크 상태를 필수 대신 선택으로 변경하십시오 .
Swift3 / Xcode 8.1을 사용하여 프레임 워크를 만들고 Objective-C / Xcode 8.1 프로젝트에서 사용했습니다. 이 문제를 해결하려면에서 Always Embed Swift Standard Libraries
옵션 을 활성화해야했습니다 Build Options
.
이 스크린 샷을보십시오 :
iOS 9.x 버전에서 같은 종류의 문제가 발생했습니다.
문제는 다음 과 같은 오류로 앱을 열 자마자 앱이 충돌합니다.
dyld : 라이브러리가로드되지 않음 : /System/Library/Frameworks/UserNotifications.framework/UserNotifications 참조 위치 : /var/containers/Bundle/Application/######/TestApp.app/TestApp 이유 : 이미지를 찾을 수 없습니다.
나는 변경하여이 문제를 해결 한 Required
에 Optional
에 Linked Frameworks and Libraries
대한 UserNotifications.framework
프레임 워크.
프레임 워크가 런타임에 애플리케이션 번들에 복사되도록하려면 새 파일 복사 빌드 단계에 프레임 워크를 추가해야합니다.
자세한 내용은 내 대상 에 '파일 복사 빌드 단계'를 추가하는 방법을 참조하십시오 .
공식 Apple 문서 : https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html
(여기에서 언급 한 것 위에) Build Settings 탭 아래의 Runpath Search Paths 에 다음 줄을 추가해야했습니다 .
@executable_path/Frameworks
그런 다음 정리하고 빌드하십시오.
필자의 경우 솔루션은 작업 공간의 독립 실행 형 프로젝트 인 Embedded Binaries에서 컴파일 된 프레임 워크를 제거하고이를 정리하고 다시 빌드 한 다음 마지막으로 Embedded Binaries에 다시 추가하는 것이 었습니다.
타사 프레임 워크를 사용하고 Cocoapods를 종속성 관리자로 사용하는 경우 a pod install
를 수행 하여 pod를 새로 고 칩니다 .
이 충돌은 내가 사용중인 타사 라이브러리에서 발생했기 때문에 위의 솔루션이 저에게 효과가있어 기쁩니다. 효과가 있기를 바랍니다.
놀랍게도 최소한 Xcode 8의 경우 필요한 부분이 모두 여기에 문서화되어 있지는 않습니다.
내 사례는 동일한 작업 공간의 일부로 맞춤형 프레임 워크였습니다. 잘못 제작 된 것으로 밝혀졌습니다. 이 글타래에 대한 jeremyhu의 마지막 응답을 기반으로합니다.
https://forums.developer.apple.com/thread/4687
프레임 워크 아래 에 Dynamic Library Install Name Base
( DYLIB_INSTALL_NAME_BASE
) 를 설정 한 다음 다시 빌드해야했습니다. 로 잘못 설정되어 로 변경해야했습니다 .Build Settings
$(LOCAL_LIBRARY_DIR)
@rpath
따라서 링크 처리 단계에서 호스트 앱에 경로-앱이/Library/Frameworks/fw.Framework/fw
아닌 런타임시 파일 시스템의 루트 에서 동적으로로드하도록 지시했습니다./Frameworks/fw.Framework/fw
이 모든 다른 설정에 대해서는 않는 3 곳에서해야 Build Phases
하지만, 이러한 방금에 추가 할 때 한 번에 모든 세트이다 Embedded Binaries
의 설정 General
호스팅 응용 프로그램의 탭을 선택합니다.
나는 않았다 하지 추가 설정해야 Copy Files
어쨌든 매입 단계에 대한 직관적으로 중복 보인다 단계. 빌드 성적표의 끝 부분을 확인하여 필요하지 않음을 확인할 수 있습니다.
PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework
[많은 장황한 줄이 제거되었지만 Xcode UI의 단순화 된 대본에서 분명합니다.]
난 아직 없습니다 더 엑스 코드가 설정 한 이유는 아이디어 DYLIB_INSTALL_NAME_BASE
나 잘못 값입니다.
내 환경 : Cocos2d 2.0, Box2d, Objective C
위의 다른 답변을 수행하는 것 외에도 마침내 일반 탭으로 이동하여 WatchKit을 선택 사항으로 만들었습니다.
빌드 단계-> 프레임 워크 포함에서 "설치된 경우에만 복사"를 선택 취소하여 해결되었습니다.
나는 같은 문제가 있었다. 이전에 사용한 적이없는 iPhone으로 프로젝트를 구축하려고했지만 새 프레임 워크를 추가하지 않았습니다. 나를 위해 정리가 잘 작동했습니다 ( Shift + Command + K ). Xcode 7의 베타 5와 iOS 9 베타가 설치된 iPhone 6을 사용했기 때문일 수 있지만 작동했습니다.
제 경우에는 프로젝트가 objective-c로 작성되었으며 라이브러리에는 Swift 파일이 있습니다. 그래서 내 프로젝트의 Build Settings 탭 에서 "Always Embed Swift Standard Libraries" 를 Yes로 변경 했고 완전히 괜찮아졌습니다.
개발 포드가있는 경우 시뮬레이터에서 앱 삭제 포드에서 설치-> 정리-> 다시 실행 ...
새로운 구성 및 빌드 체계를 만들었을 때도 마찬가지입니다 .
그래서 나를위한 해결책은
pod install
이 새로 생성 된 구성에 대해.
인터넷에서 사용 가능한 모든 방법을 시도하고 내 자신의 시행 착오 트릭을 100 번 시도한 후. 마침내 나는 그것을 해결할 수 있었다. – Apeksha Sahu 6 분 전
Mac에서 iTunes로 이동-> 계정->이 컴퓨터 인증 – Apeksha Sahu 5 분 전
2 단계 .... iPad 및 iPhone의 설정에서 개발자로 이동하고 식별자로 다시 색인을 생성하고 컴퓨터 모든 것을 신뢰합니다. 그것은 나를 위해 일했습니다 ........ ....... Mac OS seirra 베타 최신 버전에서 Mac OSHigh seria 10.13.15 버전을 다시 설치 한 후 모든 인증서를 업데이트 한 후 Xcode 최신 버전을 다시 설치하십시오. etc 등등 등등… 내가 생각할 수있는 많은 방법. –
Try with changing flag ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
(in earlier xcode versions: Embedded Content Contains Swift Code
) in the Build Settings from NO to YES.
If you're using Xcode 11 or newer:
- Navigate to the settings of your target and select General.
Scroll down to Frameworks, Libraries and Embedded Content.
Make sure the Embed & Sign or Embed Without Signing value is selected for the Embed option if necessary.
- Go to file in xcode -> Workspace settings
- Click the arrow next to which appears /Users/apple/Library/Developer/Xcode/DerivedData
- Select the Derived data and move it to Trash.
- Quite the xcode and reopen it.
- Clean the project and run again.
Above steps resolved my issuses.
It is a runtime error that is caused by Dynamic Linker
dyld: Library not loaded: @rpath/...
...
Reason: image not found
The error Library not loaded
with @rpath
[About] indicates that Dynamic Linker
cannot find the framework.
Check if the framework was added to
General -> Embedded Binaries
Check if the
@rpath
-Build Settings -> Runpath Search Paths
contains a path with the same destination/subpath as was setup inBuild Phases -> Embed Frameworks -> Destination, Subpath
Read more here
In case anyone is still experiencing this issue, despite following all the steps outlined in the many other answers, you may need to revoke and recreate your code signing certificate, as per the following:
https://developer.apple.com/library/ios/qa/qa1886/_index.html
'program tip' 카테고리의 다른 글
최신 'pip'가 "dist-info에 대해 setuptools> = 0.8 필요"와 함께 실패합니다. (0) | 2020.10.05 |
---|---|
Javascript에서 객체의 첫 번째 속성에 액세스하는 방법은 무엇입니까? (0) | 2020.10.04 |
Git 푸시 결과 "인증 실패"가 발생합니다. (0) | 2020.10.04 |
정보 손실없이 계수를 정수 \ 숫자로 변환하는 방법은 무엇입니까? (0) | 2020.10.04 |
CSS '>'선택기; (0) | 2020.10.04 |