自定义框架未加载 dyld: 库未加载:@rpath/Custom.framework/

5
我有一个应用程序,其中包含几个自定义动态框架,这意味着我正在使用Xcode 6.2上的iOS 8 SDK。我的Mac是Yosemite。这些框架具有Swift源代码和资源。
该应用程序是企业级分发,因此我只需创建一个IPA文件,并通过网页进行内部分发,用户可以下载并安装该应用程序。
该应用在iPhone 5(iOS 8.1.2)、iPod Touch(iOS 8.2)和模拟器上安装并运行,但无法在iPhone 6(iOS 8.1.2)上运行。错误始终为dyld: Library not loaded: @rpath/Custom.framework/。每当我尝试删除和重新添加框架以修复它时,另一个框架会在iPhone 6上出现未加载的情况。(为什么!!!)
设置如下:
@executable_path/Frameworks Embedded Content Contains Swift code - Yes Frameworks in embedded binaries Embedded Frameworks Link Binary With Libraries
是什么导致了这些问题,我该如何确保应用程序在所有设备和iOS 8版本上始终运行一致?
大多数解决方案都是试错性建议。
3个回答

8
直到我了解了架构,才停止寻找问题的原因。这促使我在连接 iPhone 6 的同时构建框架。我创建了一个带有所有默认设置的项目,并添加了一些框架,包括 Alamofire。在连接 iPhone 6 的同时进行构建。生成存档并部署和安装 OTA。当应用程序安装后,它可以正常运行。
我尝试通过 iPod(MD717ZP/A)进行构建来确认。我不确定这是第五代。首先清空派生数据文件夹,清理所有项目,包括框架。构建并部署应用程序。将其安装在 iPod 上,它可以运行。我将其安装在 iPhone 6 上,但它立即崩溃。
我一遍又一遍地尝试同样的过程。先针对 iPhone 6 进行构建,然后针对 iPod 进行构建,再在两者上都安装。结果只能证实需要在 iPhone 6 上构建才能让应用程序在该设备及更低版本上运行。
请记住,我只是将框架添加到“嵌入式二进制文件”(目标 > 通用 > 嵌入式二进制文件),然后在 iPhone 6 上进行构建以使其正常工作。这可能意味着如果要在所有设备上运行,则需要拥有最新的设备,因为某些架构要求。
更新: 除了上面的知识,您可能还想在“构建设置”选项卡中检查“仅构建活动架构”部分。如果设置为 YES,则意味着它将基于连接的硬件进行构建,否则将构建您支持的架构,例如有效架构。

如果可以的话,我会给你点赞的。这就是答案:“请记住,我只是将框架添加到“嵌入式二进制文件”(目标 > 通用 > 嵌入式二进制文件)中。” - Satheesh
这是有史以来最棒的答案。谢谢! - Marcus Rossel
谢谢,这节省了我大量的时间。 - ErikBrandsma

0
请在“构建设置”选项卡中检查链接部分,以下项目可能未设置:
Runpath Search Paths = @executable_path/Frameworks
  • 这个对我解决了一个错误:

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

0

我在使用 Mojave 和 CocoaPods 的 Xcode 10 中遇到了同样的问题,以下是我的解决方案:

  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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接