我最近使用的一个库已切换为作为 .framework 分发。
在我现有的 CMake 文件中,我已成功将其链接到我的 iOS 应用程序,但我得到:
dyld: Library not loaded: @rpath/Pizza.framework/Pizza
Referenced from: /var/mobile/Containers/Bundle/Application/D71ED298-C287-4B2F-8AFA-710A14C06D75/pizzashop.app/pizza
Reason: image not found
当我从 Xcode 安装它时。如果我手动将它添加到我的 xcode 项目中,在“嵌入式二进制文件”部分,那么我很好(见下图)
所以我得出结论,问题在于将 .framework 放入我的应用程序包中。我遇到过this question并查看了链接的 QT 示例,但我仍然试图在此处定位自己,因为我发现语法有点不透明。
我想在这里使用CMake的BundleUtilities吗?在查看 BundleUtilities 示例时,我有点迷茫:
set(APPS ...) # paths to executables
set(DIRS ...) # directories to search for prerequisites
INSTALL(CODE "
include(BundleUtilities)
fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")
" COMPONENT Runtime)
这是 OSX 特有的还是我可以将它类似地应用于 iOS?
最佳答案
我们最终没有找到理想的解决方案,最终以比首选更手动的方式完成工作:
我们添加了一个在构建完成后但在打包之前运行的自定义命令(请参阅 CMake 的
add_custom_command
)。自定义命令执行以下操作:
- 在我们的 app bundle 文件夹下创建一个 Frameworks 目录(确保它位于将在打包过程中复制的位置)。
- 我们使用
cp -aH
将所有框架复制到这个 Frameworks 目录中 - 然后我们使用以下方法对该目录中的每个框架重新签名:
codesign --force --verbose Computers.framework --sign "$2"
将 Frameworks 目录添加到您的搜索路径中:
set_target_properties(${EXE_NAME} PROPERTIES
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks")
关于ios - 使用 CMake 将 .frameworks 复制到 iOS 应用程序包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37692973/