关于 xcode:iOS 8 Dynamic Framework: Library Not Loaded

 2022-01-08 

iOS 8 Dynamic Framework: Library Not Loaded

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

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"。完成。

  • 确保在"复制文件"构建阶段有一个条目。第一步实际上为您完成了此操作,所以... 完成。

听从了这篇非常出色的文章中的建议,并查看了开发论坛中提供的具有完全相同问题的解决方案,我完全一头雾水。还有什么我可以尝试的吗?


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

  • 在 Framework Target\\'s Dynamic Library Install Name Base 中,使用 "@rpath"
  • 在框架目标的动态库安装名称中,使用 "$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)" - 这会自动解析为您的框架的名称。
  • 在 Application Target\\'s Runpath Search Paths 中,使用 "@executable_path/Frameworks"。
  • 确保"始终搜索用户路径"设置为否。框架搜索路径也可以为空。
  • 如果是在午餐时间之后,给自己倒三指苏格兰威士忌。这是你应得的。
  • 现在还是早上,我会用温柔的哭泣来安慰自己。