ios - 位码是否支持弱链接第三方框架?
问题描述
问题在标题中简单说明。这是我的设置:
构建一个动态框架,可选择链接(弱链接)到 GoogleInteractiveMediaAds.framework。对于使用我的框架的应用程序,GoogleInteractiveMediaAds 是一个可选依赖项,没有它框架也能正常工作。这目前正在工作。
但是,当尝试从位码重建时会出现问题,这通常发生在选择“从位码重建”导出 Ad Hoc 构建时。位码编译过程失败:
ipatool failed with an exception: #<CmdSpec::NonZeroExitException: $/Applications/Xcode.app/Contents/Developer/usr/bin/bitcode-build-tool ...
并深入查看日志文件,我发现错误描述:
Failed to resolve linkage dependency MyFramework arm64 -> @rpath/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds: Could not resolve @rpath in @rpath/GoogleInteractiveMediaAds.framework/GoogleInteractiveMediaAds from MyFramework
error: GoogleInteractiveMediaAds not found in dylib search path
注意:GoogleInteractiveMediaAds.framework 确实包含位码。
显然,通过不选择“从位码重建”来避免此错误。如果我要回答我自己的问题,我会说,不,看起来从位码编译时,你不能使用弱链接框架。仅仅因为位码编译步骤试图链接到应用程序目标中未包含的框架。但是,我无法找到任何使用位码弱链接的官方文档,或任何相关的 StackOverflow 答案,所以我不确定我是否遗漏了什么或者是否有一些相关的编译器/链接器设置我错过了让它工作。
解决方案
在您的情况下,您将需要等待框架本身的修复。
我们在分发我们的框架时遇到了类似的问题,我在这里描述过,我只是不想分享我们的调查结果,因为似乎没有人公布他们的结果。
无需在没有位码的情况下进行分发。长话短说,其中包含 LLVM 工具,这会阻止 AppStore 处理。我写了一篇关于XCode 12 和 BigSur 与 XCFramework 问题的博客。
总而言之,这里有一些必要的步骤来确保在创建XCFramework
分发时:
- 使用归档构建是必须的,发布构建是不够的
BUILD_LIBRARY_FOR_DISTRIBUTION
必须设置为YES
SKIP_INSTALL
必须设置为NO
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO
关闭 GCC 检测并将它们从二进制文件中删除CLANG_ENABLE_CODE_COVERAGE = NO
从二进制文件中关闭代码覆盖工具
以上所有内容都有助于解决我们的准备和分发问题,如果您碰巧遇到与我们相同的问题,希望能为您节省一些时间。
推荐阅读
- python - The evaluation metric in the validation set in xgboost Python differs from the one I get when making a prediction
- mongodb - 猫鼬事务:只执行一个查询,另一个被忽略而没有错误
- javascript - db.collection 不是函数(MongoDB 3+)
- jmeter - Jmeter:如何使用 if 控制器检查 json 响应值是否为空
- javascript - 重复的 ChoicePrompt 清除 UserState
- android - 反应原生地图折线
- c# - Unity3D:如何调用从另一个类实例化预制件的方法?
- tsql - DATEADD 的 Pyspark 实现
- python - 如何在 xpathin selenium 中使用运算符“in”
- json - 我在远程分页中将数据作为表单数据而不是 JSON 获取