기기에서 프레임 워크가 충돌하는 iOS 앱, dyld : 라이브러리가로드되지 않음, Xcode 6 베타


573

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

  • Cocoa Touch Framework 프로젝트 생성
  • 신속한 파일과 클래스 Dog 추가
  • 장치를위한 프레임 워크 구축
  • Swift에서 싱글 뷰 애플리케이션 생성
  • 앱 프로젝트로 프레임 워크 가져 오기
  • 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를 사용하여 장치의 프레임 워크를 배포 할 수 없다고 생각합니다. 누구든지 이것에 빛을 비출 수 있습니까?


1
내가 이해하지 못하는 것은 다른 모든 타사 프레임 워크가 즉시 작동하고 쉽게 드래그 앤 드롭 할 수 있고 Link Binary with LibrariesXcode가 앱 번들에 복사하는 방법을 알고 있지만 사용자 정의 프레임 워크의 경우에는 발생하지 않는 것입니다.
fatuhoku

sazzad hissain 칸의 답변은 여기에 stackoverflow.com/questions/26024100/… 가장 좋은 답변입니다 ..
Ankit Kumar

1
stackoverflow.com/a/52129141/2020034를 확인하십시오 . 작동
Vinayak Parmar

당신은 지방 라이브러리를 만들 수 있습니다, 당신은이 링크를 볼 수 있습니다 : stackoverflow.com/a/54977145/3992606
mohsen

Xcode 버전이 일치하지 않아 stackoverflow.com/a/55738882/5443510으로 해결되었습니다 .
Jimmy Yin

답변:


975

대상의 General 탭에는 Embedded Binaries 필드가 있습니다. 프레임 워크를 추가하면 충돌이 해결됩니다.

Apple 개발자 포럼에서 참조 하십시오 .


73
Embedded Binaries에 프레임 워크가 있고 Copy Phase도 "Frameworks"로 설정했습니다. 어쨌든 충돌합니다.
loretoparisi

11
이것은 디버깅 모드에서만 해결되었습니다. 프로젝트를 아카이브하거나 빌드 할 때 오류가 다시 발생합니다
Saad Ur Rehman

13
'Runpath Search Path'에 @ executable_path / Frameworks를 추가하면이 문제가 해결되었습니다. 즉 'Embedded Binaries'에 프레임 워크를 추가하는 것 외에도
ArdenDev

14
누구나 POD에서 Embedded Binary에 프레임 워크를 추가하는 방법을 도울 수 있습니까?
Bonnke

3
같게. 나는 주어진 엑스 코드 6.4에서 찾을 수없는 "일반> 임베디드 진을"없다, 포드에서 추가하는 방법을 알고 싶습니다 또한 거라고 PODS 사용
공격 한

259

iOS가 8 이상인 경우

대상의 General 탭 아래 Embedded Binaries 섹션에 프레임 워크를 추가하십시오. 이것은 런타임에 링크 될 수 있도록 프레임 워크를 컴파일 된 것으로 복사합니다.

여기에 이미지 설명을 입력하십시오

왜 이런 일이 발생합니까? : 연결하는 프레임 워크가 동적으로 링크 된 프레임 워크로 컴파일되어 런타임에 링크되기 때문입니다.

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

iOS 8 미만

이 프레임 워크에 영향을 미치면 (소스 코드 / 빌드 프로세스에 액세스 할 수 있음)이 프레임 워크가 동적으로 링크되지 않고 정적으로 링크되도록 변경할 수 있습니다. 이로 인해 코드가 런타임에 링크되지 않고 컴파일 된 앱에 포함되므로 프레임 워크를 포함하지 않아도됩니다.

** 방법 : ** 프레임 워크의 빌드 설정 탭에있는 연결 섹션에서 Mach-O 유형 을 정적 라이브러리로 변경하십시오 . 이제 임베디드 바이너리 아래에 프레임 워크를 포함시킬 필요가 없습니다.

정적 프레임 워크

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


1
프레임 워크가 포드에있는 경우 임베디드 바이너리에 프레임 워크를 추가하려면 어떻게해야합니까?
TomazStoiljkovic

"프레임 워크가 포드에 있습니다"는 무슨 뜻입니까? CocoaPods를 통해 사용자 지정 프레임 워크가 배포 되었습니까?
Dawson

2
"8 이상"이어야합니다. iOS 8 에서도이 작업을 수행해야했습니다.
Cruinh

오류Swift is not supported for static libraries
jose920405

@TomazStoiljkovic 당신은 이것을 알아 냈습니까? 나는 같은 문제가 있는데 바이너리로 만들고 싶은 프레임 워크가 있지만 코코아 포드를 통한 다른 프레임 워크에 의존합니다.
MegaManX

125

프레임 워크를 프로젝트로 드래그하는 것만으로는 충분하지 않습니다. 같은 야구장에 있지만 아이를 찾을 수없는 것과 같습니다. 이 단계를 따르세요:

1) 프레임 워크 만들기

  • 프레임 워크를 개발하십시오.
  • 개발이 완료되면 COMMAND+ B프레임 워크를 구축하고 "Build Succeeded"를 받도록하십시오.

여기에 이미지 설명을 입력하십시오

2) 프레임 워크에 액세스

  • 프레임 워크 프로젝트가 성공적으로 빌드되면 프로젝트의 Products폴더에서 액세스 할 수 있습니다 .

여기에 이미지 설명을 입력하십시오

  • 당신을 마우스 오른쪽 버튼으로 클릭 .framework하고 "파인더에 표시"를 선택하십시오.

여기에 이미지 설명을 입력하십시오

3) 프로젝트에 프레임 워크 배치

  • .frameworkFinder 윈도우에서 앱 프로젝트의 "Framework"폴더로 드래그 앤 드롭 합니다.

여기에 이미지 설명을 입력하십시오

4) 프레임 워크를위한 앱 프로젝트 구성

  • 프로젝트에서 최상위 레벨을 선택하십시오

여기에 이미지 설명을 입력하십시오

  • 목표를 선택하십시오

여기에 이미지 설명을 입력하십시오

  • "빌드 단계"로 이동 한 다음 "이진을 라이브러리와 링크"로 이동하여 프레임 워크가 선택 항목 으로 포함되어 있는지 확인하십시오 .

여기에 이미지 설명을 입력하십시오

  • 여전히 "빌드 단계"에서 왼쪽 상단으로 이동하여 +버튼을 선택하십시오 . 드롭 다운에서 "New Copy Files Phase"를 선택하십시오.

여기에 이미지 설명을 입력하십시오

  • 새로운 "파일 복사"섹션으로 스크롤 Destination하여 "프레임 워크"로 설정했는지 확인하십시오 . 서브 패스를 비워 두십시오. 그런 다음 +왼쪽 하단에 있는 버튼을 클릭하십시오 .

여기에 이미지 설명을 입력하십시오

  • 프로젝트 계층 구조가 제공됩니다. 3 단계에서 프레임 워크를 추가 한 "Frameworks"폴더로 스크롤하거나 맨 위에있는 검색 표시 줄에서 검색하십시오. 프레임 워크를 선택하고 "추가"를 클릭하십시오.

여기에 이미지 설명을 입력하십시오

  • "Code Sign On Copy"가 선택된 상태로 프레임 워크가 포함되어 있는지 확인하십시오.

여기에 이미지 설명을 입력하십시오

5) 청소 후 프로젝트를 실행하십시오.

  • COMMAND+ SHIFT+K
  • COMMAND+R

5
좋은 지적. 그것은 거의 나를 위해 작동합니다. 나는 Alamofire를 포함하는 프레임 워크 A를 만들었습니다. 내 호스트 앱 (내장 프레임 워크 A)은 시뮬레이터에서 작동합니다. 그러나 실제 iPhone에서 실행하려고하면 오류가 발생합니다. Alamofire : dyld : 라이브러리가로드되지 않았습니다 : @ rpath / Alamofire.framework / Alamofire 이유 : 적합한 이미지를 찾을 수 없습니다. 발견 : xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire : mach-o, 그러나 잘못된 아키텍처
DàChún

1
@Brandon 프레임 워크를 선택적으로 만들면 문제가 해결되었습니다. 그러나 프레임 워크를 선택적으로 만드는 동작이 무엇인지 설명해 주시겠습니까?
Mitesh Dobareeya

2
감사합니다! 5 단계에서 "설치할 때만 복사"가 선택되었고 이것이 내 문제입니다.
Andi

48

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

이 스크린 샷을보십시오 :

여기에 이미지 설명을 입력하십시오


3
이것은 지금 나를 위해 일했다. 이 문제에 대한 해결책은 BuildPhases-> 파일 복사-> 대상에서 프레임 워크를 선택하고 프레임 워크를 추가하는 것입니다. 도서관이 여기에 없을 수도 있습니다.
Harish

@Harish, 당신이 제안하는 솔루션은 이미 여러 사람들에 의해 제안되었으며 분명히 첫 번째 지점에서 처리합니다. 필자의 경우 프레임 워크가 추가되었지만 여전히 동일한 문제가 나타납니다. 그런 다음 혼자서 발굴합니다. 이 솔루션을 다운 투표했다면 왜 내 경우에는 작동하지 않을 때 자신의 길에 대해 확신하는지 모르겠습니다 : S
NeverHopeless

@Harish 감사합니다. 귀하의 답변이 저에게 훨씬 더 많은 도움이되었으며 물론 NeverHopeless도 마찬가지였습니다. 감사합니다.
Mohsin Khubaib Ahmed

이것이 나를 위해 일한 유일한 것입니다. 그러나 나는 이미 목표 Embedded Binaries섹션에 프레임 워크를 "내장"하고 있습니다. 왜 이것이 작동합니까?
guptron

빠른 라이브러리 또는 포드를 사용하여 객관적인 C 프로젝트에 포함시키는 경우이 기능이 훌륭합니다. Objective C 프로젝트는 종종이 플래그를 No에 표시합니다.
Swaroop S

47

먼저 Command + Option + Shift + K 후에 빌드하십시오. 여전히 실패하면 아래 단계를 수행하십시오.

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

여기에 이미지 설명을 입력하십시오


3
이것은 런타임 프레임 워크에서 클래스를 인식하지 않는 것
테슬라

@azimov가 정확합니다. 나는 현재이 딜레마에 직면하고있다. 필수는 "이미지를 찾을 수 없음"오류를 발생 시키며 선택적으로 설정하려고하면 런타임에 "인식 할 수없는 선택기"와 함께 충돌합니다
Adam Mendoza

1
내 프레임 워크가 이미 Link Binaries and Embed에 있었지만 여전히 복사 단계를 추가해야했습니다. dyld : 라이브러리가로드되지 않음 : @ rpath / AFNetworking.framework / AFNetworking 참조 : / Users / {User} / Library / Developer / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp 이유 : 이미지를 찾을 수 없음 (lldb) 솔루션 : 프로젝트-> 대상-> 빌드 단계-> + 맨 위에 새 사본 파일 추가 단계 대상 = 프레임 워크 프레임 워크 선택 복사해야합니다
Adam Mendoza

@AdamMendoza 나는 그렇게했기 때문에 내 앱을 거부했습니다.
jbouaziz

@jbouaziz, 그렇습니다. 오류가 발생할 수있는 오류는 .framework가 뚱뚱하기 때문입니다. 즉, 필요한 armv7 arm64 외에 i386 x86_64와 같이 iOS에서 지원되지 않는 아키텍처가 있음을 의미합니다. 상점에서 오류가 발생하지만 Xcode에 오류가 표시되지 않을 수 있습니다. Xcode-> 개발자 도구 열기-> Application Loader에서 로더를 사용하십시오. SolutionL 얇게 확인-> ikennd.ac/blog/2015/02/…
Adam Mendoza

28

iOS 9.x 버전에서 동일한 종류의 문제가 발생했습니다.

문제 : 아래 오류로 앱을 열 자마자 앱이 다운됩니다.

dyld : 라이브러리가로드되지 않았습니다. /System/Library/Frameworks/UserNotifications.framework/UserNotifications 참조 : /var/containers/Bundle/Application/######/TestApp.app/TestApp 이유 : 이미지를 찾을 수 없습니다

나는 변경하여이 문제를 해결 한 RequiredOptionalLinked Frameworks and Libraries대한 UserNotifications.framework프레임 워크.


작동합니다. 아무도 이유를 알고 있습니까? Cuz 일부 장치에는 다른 장치에는이 설정이 필요하지 않습니다.
NEO

"경고 : 프로세스에서 Objective-C 클래스 데이터를 읽기 위해 지원 코드를 실행할 수 없습니다. 사용 가능한 유형 정보의 품질이 떨어질 수 있습니다." 내 라이브러리를 옵션으로 표시 할 때
BergP

그것은 아마도 이유가 작동하는 이유는 일부 프레임 워크가 시뮬레이터에서 실행되지 않았기 때문입니다.
Gowtham Sooryaraj

@ redent84이 답변은 귀하의 의견과 함께 제 정신을 얻지 못했습니다. iOS 12가 필요한 AuthenticationServices.framework에서이 문제에
부딪치게되었습니다

26

Build Settings 탭의 Runpath Search Paths 에 다음 줄을 추가해야했습니다 (여기에서 언급 한 것 위에) .
@executable_path/Frameworks

여기에 이미지 설명을 입력하십시오


이것은 나를 위해 문제를 해결했습니다. iOS 9 앱에 앱 확장을 추가 한 후 문제가 발생했습니다. 확장을 추가하기 전에 내 프레임 워크가 정상적으로 발견되었습니다. 파일 복사 빌드 단계를 추가해도 도움이되지 않았으며 이미 프레임 워크를 포함하고있었습니다.
그렉

이것이 기본적으로 포함되어 있지 않은 것은 매우 이상합니다. 압축을 풀고 IPA를 살펴보면 Payloads / appname.app / Frameworks /에서 프레임 워크를 찾아야합니다. 그러나 런타임 중에 앱이이 폴더를 찾으려면이 검색 경로를 추가해야합니다. 기묘한.
mattv123

25

런타임에 프레임 워크가 애플리케이션 번들에 복사되도록하려면 새 파일 복사 빌드 단계에 프레임 워크를 추가해야합니다.

자세한 내용은 대상'파일 복사 빌드 단계'를 추가하는 방법을 참조하십시오 .

공식 Apple 문서 : https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html


많은 것을 시도한 후에 이것이 나를 위해 해결했습니다. 이미 Link Binary 및 Embed Framework에 프레임 워크가 있습니다. 나는 또한 복사 단계를 추가해야한다고 생각하지 않았지만 이것이 수정되었습니다.
Adam Mendoza

14

Xcode 11 이상을 사용하는 경우 :

  1. 대상 설정으로 이동하여 일반을 선택하십시오 .

대상 설정 / 일반

  1. 프레임 워크, 라이브러리 및 임베디드 컨텐츠 로 스크롤하십시오 .

  2. 있는지 확인 삽입 및 로그인 또는 로그인하지 않고 삽입을 를 선택한 값을 삽입의 필요에 따라 옵션을 선택합니다.

프레임 워크, 라이브러리 및 임베디드 컨텐츠 섹션


13

임베디드 바이너리에 프레임 워크 추가 여기에 이미지 설명을 입력하십시오

그런 다음 청소하고 빌드하십시오.


11

놀랍게도, 최소한 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의 단순화 된 대본에서 명확합니다.]

나는 왜 Xcode가 왜 그 값을 잘못 설정했는지 전혀 모른다 DYLIB_INSTALL_NAME_BASE.


1
감사합니다. 이것은 Xcode 11에서 내 문제로 판명되었습니다. 이전에 작동했지만 "dyld : Library not loaded"오류가 발생하기 시작한 자체 프레임 워크 중 하나를 가져오고있었습니다. 명확하게하기 위해, 가져 오려는 프로젝트가 아닌 가져 오려는 프레임 워크의 프로젝트에서 빌드 설정 "Dynamic Library Install Name Base"를 "@rpath"로 설정하려고합니다 . 어떻게 든 "/ Library / Frameworks"로 설정되었습니다.
Ben Stahl

3 년 후 도움이되었다 니 다행입니다. 이에 따라 편집되었습니다.
BaseZen

9

필자의 경우 해결책은 컴파일 된 프레임 워크를 Embedded Binaries에서 제거하는 것이 었습니다 .Embedded Binaries는 작업 영역의 독립 실행 형 프로젝트였으며 정리하고 다시 빌드 한 다음 Embedded Binaries에 다시 추가했습니다.


8

내 환경 : Cocos2d 2.0, Box2d, 목표 C

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

일반 링크 된 프레임 워크 및 라이브러리를 대상으로합니다.


8

타사 프레임 워크를 사용하고 Cocoapod를 종속성 관리자로 사용하는 경우 pod install포드를 새로 고치 려고 합니다.

이 충돌은 내가 사용하고있는 타사 라이브러리에서 발생했기 때문에 위의 솔루션이 나를 위해 일한 것을 기쁘게 생각합니다.


1
큰! 내 문제를 해결했다. 그러나 호스트 앱에 포드 종속성을 설치하지 않는 방법이 있습니까?
DàChún

8

여기에 이미지 설명을 입력하십시오

빌드 단계-> 내장 프레임 워크에서 "설치된 경우에만 복사"를 선택 취소하여 해결했습니다.


1
시스템이 "디버그 설치"가 "설치"가 아니라고 생각하지 않는 경우이 확인란의 요점을 아는 것이 좋습니다. 그럼에도 불구하고, 경고와 함께 앱 실행을 금지하는 대신 하드웨어에서 앱 충돌을
일으킨다면

8

다음으로 인한 런타임 오류입니다 Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

오류 는 바이너리를 찾을 수 없음 Library not loaded@rpath나타냅니다 Dynamic Linker.

  1. 동적 프레임 워크가 추가되었는지 확인 General -> Embedded Binaries

  2. @rpath소비자 (응용 프로그램)와 생산자 (동적 프레임 워크) 간의 설정을 확인하십시오 .

    • 동적 프레임 워크 :
      • Build Settings -> Dynamic Library Install Name
    • 신청:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

동적 링커

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)에 의해 사용되는 loadable bundle( Dynamic framework여기서 파생로)을 dyld놀이로 온
Dynamic Library Install Name이진 파일의 경로를 (하지 .framework) -. 네, 같은 이름을 가지고 있지만, MyFramework.frameworkA는 packaged bundleMyFramework내부 이진 파일과 자원.
디렉토리에이 경로는 절대 또는 상대 할 수있다 (예를 들면 @executable_path, @loader_path, @rpath). 상대 경로는 번들을 단일 디렉토리로 분배 할 때 유용한 앵커와 함께 변경되므로 더 선호됩니다.

절대 경로 - Framework1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@ executable_path

@executable_path - 엔트리에 대해 이진 - Framework2
유스 케이스는 다음을 포함 Dynamic framework하는 응용 프로그램에

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path - 바이너리의 소유자 인 광속에 대해
사용 케이스 임베디드 워크와 워크 - Framework3_1 Framework3_2를 가진 내부

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath-런 패스 검색 경로

Framework2

이전에는 dyld와 함께 작동하도록 Framework를 설정해야했습니다. 동일한 프레임 워크를 다른 구성으로 사용할 수 없으므로 편리하지 않습니다.

@rpath 외부 (응용 프로그램) 및 중첩 (동적 프레임 워크) 부분에 의존하는 복합 개념입니다.

  • 신청:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)-로 대체되는 템플릿 목록을 정의합니다 @rpath.
       @executable_path/../Frameworks
    • Build Phases -> Embed Frameworks -> Destination, Subpath정확히 임베드 프레임 워크가있는 곳으로 검토
  • 동적 프레임 워크 :

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- @rpath바이너리에 대한 로컬 번들 경로와 함께 사용되는 포인트
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

* ../-현재 디렉토리의 부모로 이동

otool -객체 파일 표시 도구

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool 다음을 사용하여 동적 공유 라이브러리 설치 이름 변경 -rpath

CocoaPodsuse_frameworks![정보] 를 사용 하여Dynamic Linker

[어휘]


6

최근 구형 iPhone (예 : iPhone 6) 및 Xcode (11.3.1)에서 CoreNFC를 가져올 때이 문제가 발생했습니다. 나는 그것을 작동시킬 수있었습니다.

  1. 당신의에서 프로젝트 대상을 선택합니다.
  2. 고토 일반 상단에 탭을 선택합니다.
  3. ' 프레임 워크, 라이브러리 및 임베디드 컨텐츠 '섹션에서 프레임 워크를 추가하십시오 (저는 CoreNFC였습니다). 다른 대상에 대해서도 반복하십시오.
  4. 상단의 빌드 단계 를 클릭 하고 ' 바이너리와 라이브러리 연결 '을 펼치십시오 .
  5. 귀찮은 프레임 워크를 선택적으로 만드십시오 (필요한 경우).

이를 통해 코드를 변경하지 않고도 구형 / 신형 iPhone을 컴파일 할 수있었습니다. 이것이 다른 도움이되기를 바랍니다.


1
감사합니다. 그것을 선택적으로 만드는 것은 빠진 링크였다.
fl034

작동하지 않고 앱이 충돌하고 일부 어셈블리 코드에서 중단 점 대신 충돌 유형을 나타내는 메시지가 없습니다.
Newsonic

왜 이것을 선택적으로 만들어야합니까?
rohitwtbs

5

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


클린 빌드 폴더도 가능합니다. (CMD + Shift + Alt + K)
Grifas

4

필자의 경우 프로젝트는 objective-c로 작성되었으며 라이브러리에는 Swift 파일이 있습니다. 그래서 프로젝트의 Build Settings 탭 에서 "Always Embed Swift Standard Libraries"Yes로 변경 했는데 완전히 괜찮 았습니다.


4

포드를 사용하는 Xcode의 프로젝트 또는 프레임 워크 프로젝트의 경우 동적 라이브러리 (dylb)가로드되지 않도록하는 쉬운 방법은 포드 파일을 정적 모드에서 잉크로 설정하는 것입니다. 이렇게하려면 포드 파일에 다음 줄을 쓰지 마십시오.

use_frameworks!

저장 한 파일에서 행이 삭제되면 콘솔에서 간단히 실행하십시오.

$ pod update

2

개발 포드가있는 경우 포드에서 시뮬레이터 설치에서 앱을 삭제-> 정리-> 다시 실행하십시오 ...


2

새로운 구성 및 빌드 구성표를 만들 때도 마찬가지입니다 .

그래서 나를위한 해결책은 실행하는 것이 었습니다

pod install

새로 생성 된 구성에 대해


1

인터넷에서 사용할 수있는 모든 방법과 내 자신의 시행 착오를 100 번 시도한 후. 마침내 나는 그것을 해결할 수있었습니다. – Apeksha Sahu 6 분 전
Mac에서 iTunes로 이동-> 계정->이 컴퓨터 인증 – Apeksha Sahu 5 분 전
두 번째 단계 ... iPad 및 iPhone의 설정에서 개발자로 이동하여 식별자를 사용하여 색인을 다시 만들고 트러스트 컴퓨터의 모든 것을 지 웁니다. Mac OS seirra 베타 최신 버전에서 Mac OSHigh seria 10.13.15 버전을 다시 설치 한 후 모든 인증서를 업데이트 한 후 Xcode 최신 버전을 다시 설치했습니다. 내가 생각할 수있는 많은 방법 등. –여기에 이미지 설명을 입력하십시오


1

빌드 설정에서 플래그 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(이전 xcode 버전 :) Embedded Content Contains Swift Code를 NO에서 YES로 변경하십시오.


1

Xcode 11

  1. 대상 설정으로 이동하여 일반을 선택하십시오.
  2. "프레임 워크, 라이브러리 및 임베디드 컨텐츠"를 찾으십시오.
  3. "포함하지 않음"을 유지하고 모든 대상 (하나 이상이있는 경우)이 다른 대상이 아닌 자체 프레임 워크 만 설정했는지 확인하십시오.

1

에서 엑스 코드 (11)

나는 같은 문제에 직면했다

일반 탭 > "프레임 워크, 라이브러리 및 내장 컨텐츠" 에서 "포함하지 않음"을 변경해 도 여전히 같은 오류가 발생했습니다.

나를 위해 해결 한 것은 빌드 단계 탭 > 프레임 워크 섹션에 프레임 워크 를 추가하는 것이 었습니다.

-업데이트 ---

Xcode 11에서 실행될 때 이전 버전의 Xcode Embed Frameworks Section 에서 빌드 된 프로젝트에서 사용할 수 없다는 것을 관찰했습니다 . 솔루션을 달성하려면 아래 단계를 찾으십시오.

1 : 추가 할 첫 번째 필요 새로운 파일 복사 단계를 아래에 빌드 페이즈의 탭을 선택합니다.

여기에 이미지 설명을 입력하십시오

2 : 추가 된 단계의 이름을 Embed Frameworks로 변경합니다. 여기에 이미지 설명을 입력하십시오

3 : 대상을 프레임 워크로 변경하십시오 .

여기에 이미지 설명을 입력하십시오

4 : 오류가 발생한 프레임 워크를 추가하십시오.

여기에 이미지 설명을 입력하십시오


1

모든 사람이 Embedded Binaries 아래에 프레임 워크를 포함 시키려고하지만 여전히 작동하지 않습니다. 여기서 중요한 단계가 하나도 없기 때문입니다.

Embedded Binaries 탭에 바이너리를 추가하는 올바른 두 단계는 다음과 같습니다.

  1. 일반 탭의 "링크 된 프레임 워크 및 라이브러리"에서 오류를 발생시키는 프레임 워크를 제거하십시오.

  2. 이제 Embedded Binaries 탭 아래에만 제거 된 프레임 워크를 추가하면됩니다.

장치에서 실행하고 그 미소를 유지하십시오.)


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

위의 단계로 인해 내 문제가 해결되었습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.