5

我有一个包含多个自定义动态框架的应用程序,这意味着我在 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/框架
  • 嵌入式内容包含 Swift 代码 - 是
  • 嵌入式二进制文件中的框架
  • 嵌入式框架
  • 将二进制文件与库链接

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

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

4

3 回答 3

8

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

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

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

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

更新: 除了上述知识之外,您可能还需要检查“构建设置”选项卡中的“仅构建活动架构”部分。这意味着如果设置为 YES,它将基于连接的硬件构建,否则它将为您支持的架构(如 Valid Architectures)构建。

于 2015-03-31T07:04:34.877 回答
0

检查 Build Settings 选项卡中的 Linking 部分,可能未设置以下项目:

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

    dyld: library not loaded: @rpath/CorePlot.framework/CorePlot
    reason: image not found
    
于 2017-02-23T16:18:25.553 回答
0

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

  1. 确保你的 target->build settings->iOS Deployment Target 设置为最新的 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
于 2018-11-06T05:20:54.957 回答