다음으로 인한 런타임 오류입니다 Dynamic Linker
dyld: Library not loaded: @rpath/...
...
Reason: image not found
오류 는 바이너리를 찾을 수 없음 Library not loaded
을 @rpath
나타냅니다 Dynamic Linker
.
동적 프레임 워크가 추가되었는지 확인 General -> Embedded Binaries
@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.framework
A는 packaged bundle
로 MyFramework
내부 이진 파일과 자원.
디렉토리에이 경로는 절대 또는 상대 할 수있다 (예를 들면 @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
외부 (응용 프로그램) 및 중첩 (동적 프레임 워크) 부분에 의존하는 복합 개념입니다.
//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
CocoaPods
use_frameworks!
[정보] 를 사용 하여Dynamic Linker
[어휘]
Link Binary with Libraries
Xcode가 앱 번들에 복사하는 방법을 알고 있지만 사용자 정의 프레임 워크의 경우에는 발생하지 않는 것입니다.