gpt4 book ai didi

ios - 使用 CMake 将 .frameworks 复制到 iOS 应用程序包

转载 作者:技术小花猫 更新时间:2023-10-29 11:05:49 44 4
gpt4 key购买 nike

我最近使用的一个库已切换为作为 .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 项目中,在“嵌入式​​二进制文件”部分,那么我很好(见下图)

enter image description here

所以我得出结论,问题在于将 .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?

最佳答案

我们最终没有找到理想的解决方案,最终以比首选更手动的方式完成工作:

  1. 我们添加了一个在构建完成后但在打包之前运行的自定义命令(请参阅 CMake 的 add_custom_command)。

  2. 自定义命令执行以下操作:

    • 在我们的 app bundle 文件夹下创建一个 Frameworks 目录(确保它位于将在打包过程中复制的位置)。
    • 我们使用 cp -aH 将所有框架复制到这个 Frameworks 目录中
    • 然后我们使用以下方法对该目录中的每个框架重新签名:codesign --force --verbose Computers.framework --sign "$2"
  3. 将 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/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com