从您的错误消息来看,有几件事需要检查。
dyld: Library not loaded: @rpath/PodA.framework/PodA
Referenced from: .../Build/Products/Development-iphonesimulator/FrameworkA.framework/FrameworkA
Reason: image not found
第一件看起来很奇怪的事情是正在加载的框架(FrameworkA.framework)的路径没有嵌入到应用程序中。检查 MainAppTarget 的“常规”选项卡,并确保框架出现在“嵌入式二进制文件”和“链接的框架和库”部分中。
Second, @rpath
是一个简写runpath
搜索路径列表,它告诉dyld
在哪里寻找所需的库。
下面是 Github 上的一个示例项目,其中一个主应用程序使用一个 Cocoapod,以及一个主应用程序所依赖的使用不同 Cocoapod 的动态框架:https://github.com/dtweston/FrameworkPodTest https://github.com/dtweston/FrameworkPodTest
您应该在涉及的所有目标(包括由 Pods 项目构建的框架目标)上检查的构建设置:
- Runpath Search Paths (
LD_RUNPATH_SEARCH_PATHS
)
- 在示例项目中,这些是由 cocoapod 确定的,但每一项都设置为
$(inherited) @executable_path/Frameworks @loader_path/Frameworks
- Dynamic Library Install Name (
LD_DYLIB_INSTALL_NAME
)
- 在示例项目中,这与默认值没有变化
$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)
- Dynamic Library Install Name Base (
DYLIB_INSTALL_NAME_BASE
)
- 在示例项目中,设置为
@rpath
(再次由 Cocoapod 确定)
Here's a screenshot of the built application bundle showing how it's laid out:
您可以使用otool
获取有关 xcodebuild 如何组装应用程序的信息。
这是主要的应用程序二进制文件:
otool -L FrameworkPodTest
FrameworkPodTest:
@rpath/KeychainSwift.framework/KeychainSwift (compatibility version 1.0.0, current version 1.0.0)
@rpath/Lottie.framework/Lottie (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 61000.0.0)
@rpath/Framework.framework/Framework (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1560.10.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (compatibility version 64.0.0, current version 1245.9.2)
...
以及框架二进制文件:
otool -L Frameworks/Framework.framework/Framework
Frameworks/Framework.framework/Framework:
@rpath/Framework.framework/Framework (compatibility version 1.0.0, current version 1.0.0)
@rpath/KeychainSwift.framework/KeychainSwift (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1560.10.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
@rpath/libswiftCore.dylib (compatibility version 1.0.0, current version 1000.11.42)
@rpath/libswiftCoreFoundation.dylib (compatibility version 1.0.0, current version 1000.11.42)
...