我有一个带有目标框架的项目。
- 主应用目标
- 框架A
FrameworkA 是唯一使用特定 pod 的框架,因此在我的 pod 文件中我有类似的内容
target 'MainAppTarget' do
...
end
target 'FrameworkA' do
pod 'PodA'
end
构建成功没有问题,但是当我在模拟器上运行应用程序时,应用程序立即崩溃并显示以下错误消息:
dyld: Library not loaded: @rpath/PodA.framework/PodA
Referenced from: .../Build/Products/Development-iphonesimulator/FrameworkA.framework/FrameworkA
Reason: image not found
我尝试了所有常见的怀疑(删除派生数据、清理、pod deintegrate...)到目前为止没有任何效果。
知道为什么会发生这种情况,以及如何在不必在两个目标上都安装所有 pod 的情况下使其工作?
该应用程序采用 Swift 4.2。
最佳答案
从您的错误消息中,有几件事情需要检查。
dyld: Library not loaded: @rpath/PodA.framework/PodA Referenced from: .../Build/Products/Development-iphonesimulator/FrameworkA.framework/FrameworkA Reason: image not found
第一件看起来很奇怪的事情是正在加载的框架 (FrameworkA.framework) 的路径没有嵌入到应用程序中。检查 MainAppTarget 的“常规”选项卡并确保框架出现在“嵌入式二进制文件”和“链接的框架和库”部分中。
其次,@rpath
是 runpath
搜索路径列表的简写,它告诉 dyld
到哪里寻找所需的库。
这是 Github 上的一个示例项目,其中包含一个使用一个 Cocoapod 的主应用程序,以及一个主应用程序所依赖的使用不同 Cocoapod 的动态框架:https://github.com/dtweston/FrameworkPodTest
build设置,您应该检查所有涉及的目标(包括由 Pods 项目构建的框架目标):
- 运行路径搜索路径(
LD_RUNPATH_SEARCH_PATHS
)- 在示例项目中,这些由 cocoapod 确定,但每个设置为
$(inherited) @executable_path/Frameworks @loader_path/Frameworks
- 在示例项目中,这些由 cocoapod 确定,但每个设置为
- 动态库安装名称(
LD_DYLIB_INSTALL_NAME
)- 在示例项目中,这与默认的
$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)
没有变化
- 在示例项目中,这与默认的
- 动态库安装名称库(
DYLIB_INSTALL_NAME_BASE
)- 在示例项目中,设置为
@rpath
(同样由Cocoapod决定)
- 在示例项目中,设置为
您可以使用 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)
...
关于swift - Xcode10-dyld : Library not loaded for pod installed in framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53437837/