iOS 8 动态框架:未加载库

Posted

技术标签:

【中文标题】iOS 8 动态框架:未加载库【英文标题】:iOS 8 Dynamic Framework: Library Not Loaded 【发布时间】:2014-11-27 15:44:53 【问题描述】:

我一直在开发一个包含共享扩展的 ios 8 应用程序。应用程序和扩展程序目标都使用新的 iOS 8 风格的动态框架。昨天,为了让该死的东西进入 TestFlight Beta App Review(参见here 和here),我对我的构建配置进行了一些更改。商店最终接受了该应用进行审核,但今天当我尝试在我的设备上运行时,我收到以下错误:

dyld: Library not loaded: /Users/aaron/Library/Developer/Xcode/DerivedData/VideoGrabber-gpyzpfvbijsnuyglzzvynckkuwee/Build/Products/Debug-iphoneos/MyAppKitiOS.framework/MyAppKitiOS Referenced from: /private/var/mobile/Containers/Bundle/Application/4C6CFF22-0595-4222-A515-D0D5A1696DBF/MyApp.app/MyApp Reason: image not found

在其他地方寻求帮助,我遇到了许多建议的解决方案:

将框架添加到常规选项卡的应用程序目标的嵌入式二进制文件部分。完成。

在 App Target 上的 Build Settings 的 Runpath Search Paths 部分输入“@executable_path/Frameworks”。完成。

确保“复制文件”构建阶段有一个条目。第一步实际上为您完成了这个,所以......完成了。

遵循this otherwise-excellent piece 中的建议并查看Dev Forums 中提供的解决方案与完全相同的问题,我完全一头雾水。还有什么我可以尝试的吗?

【问题讨论】:

【参考方案1】:

我通过将已知良好的东西(Apple 的 Lister app)与我自己的构建设置进行比较来实现它。通过比较框架的安装路径,然后是我的应用程序目标的搜索路径,我能够让它工作。总结:

    在框架目标的动态库安装名称库中,使用“@rpath” 在框架目标的动态库安装名称中,使用“$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)” - 这会自动解析为您的框架名称。 在应用程序目标的运行路径搜索路径中,使用“@executable_path/Frameworks”。 确保“始终搜索用户路径”设置为否。框架搜索路径也可以为空。 如果是在午餐时间之后,给自己倒三指苏格兰威士忌。你赢得了它。

现在还是早上,我会用温柔的哭泣来安慰自己。

【讨论】:

您应该使用Copy Frameworks 构建阶段而不是Copy Files 构建阶段。 @fluidsonic 对我有用。添加一个新的 Copy Files 构建阶段并将目标设置为 Frameworks,然后在列表中添加该框架。我不必更改任何路径。 我现在无法表达我有多爱你。我一直在寻找如何解决这个问题 2 小时。 花了几天时间解决它。您的评论在 5 分钟内解决了它 我没有第 2 步的“框架目标的动态库安装名称”我只看到第 1 步的“框架目标的动态库安装名称库”

以上是关于iOS 8 动态框架:未加载库的主要内容,如果未能解决你的问题,请参考以下文章

未加载框架库:'找不到图像'

动态加载框架DL分析

iOS 框架 - 已加载 nib 但未设置视图出口

dyld:未加载库:带有iOS8的@rpath

在 iOS 的动态框架中包含静态库

从iOS 8框架加载图像