swift - Xcode10-dyld : Library not loaded for pod installed in framework

标签 swift frameworks cocoapods dyld xcode10.1

我有一个带有目标框架的项目。

  • 主应用目标
  • 框架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 的“常规”选项卡并确保框架出现在“嵌入式​​二进制文件”和“链接的框架和库”部分中。

其次,@rpathrunpath 搜索路径列表的简写,它告诉 dyld 到哪里寻找所需的库。

这是 Github 上的一个示例项目,其中包含一个使用一个 Cocoapod 的主应用程序,以及一个主应用程序所依赖的使用不同 Cocoapod 的动态框架:https://github.com/dtweston/FrameworkPodTest

build设置,您应该检查所有涉及的目标(包括由 Pods 项目构建的框架目标):

  • 运行路径搜索路径(LD_RUNPATH_SEARCH_PATHS)
    • 在示例项目中,这些由 cocoapod 确定,但每个设置为 $(inherited) @executable_path/Frameworks @loader_path/Frameworks
  • 动态库安装名称(LD_DYLIB_INSTALL_NAME)
    • 在示例项目中,这与默认的 $(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)
    • 没有变化
  • 动态库安装名称库(DYLIB_INSTALL_NAME_BASE)
    • 在示例项目中,设置为@rpath(同样由Cocoapod决定)

这是构建的应用程序包的屏幕截图,显示了它的布局方式: Finder window

您可以使用 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/

相关文章:

ios - 在 Custom Cocoapods 中使用 Storyboards 和 Image assets

swift - “Cannot subscript a value of type ' [String] '”和“Cannot assign value of type ' ArraySlice ' to type ' [String]? Swift中的'”错误

ios - 使用 xib 和 tableView 的多个 View

ios - Swift - PrepareForSegue 无法传递 sender.tag(其他 ViewController 标签中的值为 nil)

java - 在 java 中包含框架 - IntelliJ

ios - Xcode 4.6 无法正确识别 Xcode 5.0 创建的项目的链接框架

javascript - 如何在页面滚动中使用Animtrap CSS

ios7 - CocoaPodsarm64问题

ios - 如果在未选择 tableView 单元格的情况下按下按钮,则显示警报消息

ios - 'pod init' 为 'pod lib create ...' 创建了 pod?