对于iOS项目的Cmake集成,没有一个很好的教程。在互联网上发现的很少,但却滞后于信息。我有一个C++项目,我想为我的iOS项目交叉编译它。我真的不是C++和Cmake主题方面的专家。不过,我跟踪了一个博客,这正是我所要寻找的。
正如博客中提到的,我使用工具链执行Cmake命令
mkdir build/ && cd build/ && cmake -G "Xcode" -DCMAKE_TOOLCHAIN_FILE=../ios-cmake/ios.toolchain.cmake ../../xxx-cpp -DPLATFORM=OS64COMBINED并在.xcodeproj目录中生成build。
按照指示,我将生成的Xcode解决方案包含到我的主要iOS项目中,并将C++项目添加到“框架、库和嵌入式内容”和“依赖项”中。实际上,我想为iOS设备构建库,因此,正如在同一个博客中的评论中提到的,“从Cmake生成的Xcode项目本身不需要任何签名,而是将生成的Xcode项目包含在另一个已经配置了签名的Xcode项目中”,我的iOS项目已经是代码签名。当我试图构建这个项目时,我发现生成错误,它说“为”xxx签名“需要一个开发团队。请在签名和功能编辑器中选择一个开发团队。”
以下是我的观察结果
用于设备的构建主iOS项目:生成失败
为"xxx“签名需要一个开发团队。在签名和功能编辑器中选择一个开发团队。
用于模拟器的构建主iOS项目:构建失败
clang:错误:没有这样的文件或目录:‘/user/user/Workspace/Cmake/Cmake示例/C++/lib/{C++命令Ld失败,退出代码为非零
为设备生成的生成Xcode项目:生成失败
ALL_BUILD目标的选择
对于.app目标:缺少包标识符。xxx没有包标识符。在生成设置编辑器中为PRODUCT_BUNDLE_IDENTIFIER添加一个值。
对于.dylib目标:为"xxx“签名需要一个开发团队。在签名和功能编辑器中选择一个开发团队。
生成的模拟器Xcode项目:构建成功
ALL_BUILD目标的选择
我不知道在哪里找到解决办法,我已经投入了更多的时间来分析和做许多尝试和错误。在交叉编译用于iOS设备的Cpp库方面,我确实需要一些建议。提前谢谢!!
另一位先生正面对着一辆同一问题
发布于 2021-07-12 04:05:11
解决这个问题有多种方法。
在这里,签名标识可以是"$EXPANDED_CODE_SIGN_IDENTITY“,也可以是"$CODE_SIGN_IDENTITY",如果您使用cocoapods,则取决于您的工作区结构
第二种方法的思想是,xcode (xcodebuild)在构建项目时提供了很少的环境变量,因此我们试图利用用于对应用程序签名的相同签名标识来对库进行签名。
另外,关于您集成本机库的方式,我个人不建议这样做,因为如果您更改生成的xcode项目中的任何设置,如果再次生成xcode项目,它将消失。
我们的项目中有类似的依赖关系,因此我们选择在命令行中构建库(您可以选择使用xcode生成器或直接使用cmake和make构建库)。然后,我们不得不在我们的项目中设置一些设置。
# Retrieve architecture type
ARCHITECTURE=""
if [ $NATIVE_ARCH == "i386" ] || [ $NATIVE_ARCH == "x86_64" ] ; then
ARCHITECTURE="x86_64"
else
ARCHITECTURE="arm64"
fi
# Retrieve build configuration
BUILD_CONFIG=""
if [ $CONFIGURATION == "Debug" ] ; then
BUILD_CONFIG="Debug"
else
BUILD_CONFIG="Release"
fi
# Copying library
cp -r <path_to_your_library> "$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/"Path_to_your_library可能会根据x86_64、arm64、调试和发布版本而有所不同。步骤1和步骤2将由xcode自动处理,如果您使用您的路由,但是它有很多警告,但是配置这些设置是一个一次性的活动,在日常开发过程中是很顺利的。
如果您保持正确的目录结构,您可以顺利地将它们添加到运行脚本中,如下所示
还要确保您构建的是框架而不是dylib,否则Apple会在上传到appstore时抛出警告和拒绝。
https://stackoverflow.com/questions/68220107
复制相似问题