【问题标题】:Custom framework not loaded dyld: Library not loaded: @rpath/Custom.framework/自定义框架未加载 dyld:库未加载:@rpath/Custom.framework/
【发布时间】:2015-06-03 16:34:10
【问题描述】:

我有一个包含多个自定义动态框架的应用程序,这意味着我在 Xcode 6.2 上使用 iOS 8 作为 SDK。我的 Mac 在优胜美地。这些框架具有 Swift 源代码和资源。

该应用程序是分布式企业,因此我只需创建一个 IPA 并通过用户可以下载和安装该应用程序的网页在内部分发。

该应用程序在 iPhone 5(iOS 8.1.2)、iPod Touch(iOS 8.2) 和模拟器上安装和运行但不是在 iPhone 6(iOS 8.1.2) 上。错误始终是 dyld:未加载库:@rpath/Custom.framework/。每当我删除并添加框架以尝试修复它时,另一个框架会弹出,因为 iPhone 6 上没有加载。(为什么!!!)

设置如下:

  • @executable_path/Frameworks
  • 嵌入内容包含 Swift 代码 - 是
  • 嵌入式二进制文件中的框架
  • 嵌入式框架
  • 将二进制文件与库链接

是什么导致了这些问题,我可以做些什么来确保应用在所有设备和 iOS 8 版本上始终如一地运行。

我找到的大多数解决方案都是试错建议。

【问题讨论】:

    标签: ios frameworks dyld rpath


    【解决方案1】:

    我在使用 Mojave 的 xcode 10 时遇到了同样的问题,我正在使用 Cocoa 豆荚,这是我的解决方案:

    1. 确保您的目标->构建设置->iOS 部署目标设置为最新的 IOS。
    2. 在 Pod 文件中,删除测试 UI 目标的“inherit! :search_paths”。例如。
    Existing pod file :
    
        target 'MyApp' do
            pod 'oAuthorize'
            target 'MyUITest1' do
                inherit! :search_paths
            end
            target 'MyFunctionalTest' do
                inherit! :search_paths
            end
        end
        Remove "inherit! :search_paths" for all sub-targets. 
    
        target 'MyApplication' do
            pod 'oAuthorize'
            target 'MyUITest1' do
            end
            target 'MyFunctionalTest' do
            end
        end
    

    【讨论】:

      【解决方案2】:

      检查构建设置选项卡中的链接部分,可能未设置以下项目:

      Runpath Search Paths = @executable_path/Frameworks
      
      • 这为我修复了一个错误:

        dyld: library not loaded: @rpath/CorePlot.framework/CorePlot
        reason: image not found
        

      【讨论】:

        【解决方案3】:

        直到我阅读了有关架构的信息,我才停止找出问题的原因。所以它促使我在连接 iPhone 6 时构建框架。我创建了一个具有所有默认值的项目。添加了几个框架,包括 Alamofire。在连接 iPhone 6 时构建它们。生成存档并部署和安装 OTA。安装该应用后,它可以正常运行。

        我试图通过构建我的 iPod(MD717ZP/A) 来确认它。我不确定这是否是第 5 代。首先我清空了派生数据文件夹,清理了包括框架在内的所有项目。构建并部署了应用程序。将它安装在它正在运行的 iPod 上。我在 iPhone 6 上安装了它,它立即崩溃了。

        我一遍又一遍地尝试相同的过程。针对 iPhone 6 构建,然后 iPod 然后安装在两者上。结果刚刚证实我需要在 iPhone 6 上构建它,这样应用程序才能在该设备或更低版本上运行。

        请记住,我只是将框架添加到“嵌入式二进制文件”(目标 > 常规 > 嵌入式二进制文件),然后在 iPhone 6 上构建以使其工作。这可能意味着由于某些架构要求,如果您希望它在所有设备上运行,您需要拥有最新的设备。

        更新: 除了上述知识之外,您可能还需要查看构建设置标签中的“Build Active Architecture Only”部分。这意味着如果设置为 YES,它将基于连接的硬件构建,否则它将为您支持的架构(如有效架构)构建。

        【讨论】:

        • 一千个赞成票兄弟,如果可以的话。这就是答案,“记住我只是将框架添加到“嵌入式二进制文件”(目标>常规>嵌入式二进制文件)”
        • 这是有史以来最好的答案。谢谢!
        • 谢谢,为我节省了大量时间
        猜你喜欢
        • 2016-05-24
        • 2017-04-20
        • 2016-05-29
        • 2016-10-27
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多