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

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

  • 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를 사용하여 장치의 프레임 워크를 배포 할 수 없다고 생각합니다. 누구든지 이것에 빛을 비출 수 있습니까?



답변

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

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


답변

iOS가 8 이상인 경우

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

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

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

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

iOS 8 미만

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

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

정적 프레임 워크

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


답변

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

a

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

답변

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

이 스크린 샷을보십시오 :

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


답변

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

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

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


답변

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

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

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

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


답변

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

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


댓글 달기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다