Xcode 7'CrashReporter 不包含位码'链接器错误
Posted
技术标签:
【中文标题】Xcode 7\'CrashReporter 不包含位码\'链接器错误【英文标题】:Xcode 7 'CrashReporter does not contain bitcode' linker errorXcode 7'CrashReporter 不包含位码'链接器错误 【发布时间】:2015-09-11 14:32:13 【问题描述】:我在我的 ios 应用程序中直接链接 PLCrashReporter,而不使用任何外部工具,现在当我尝试在 Xcode 7 上编译它时,我收到链接错误:
ld: '.../CrashReporter.framework/CrashReporter(libCrashReporter-iphoneos.a-armv7-master.o)' 不包含位码。您必须在启用位码的情况下重建它 (Xcode设置ENABLE_BITCODE),从 供应商,或禁用此目标的位码。对于架构 armv7
我在哪里可以获得更新的框架或源代码,以便在启用位码的情况下编译它们,并在不禁用整个项目的位码的情况下消除错误?
【问题讨论】:
您是否尝试在项目上禁用位码? 我不喜欢,因为它们是改善用户体验的新资产,但我找到了源代码并重新编译了它们。 大多数库都没有使用来自 Xcode 7 的位码进行更新。所以现在要删除这个警告,我们需要从设置中禁用它。在这里找到解决方案***.com/a/32710815/3647325 可能是这样,但是我如何更新 PLCrashReporter 框架以使用位代码,而不必在任何地方禁用它,或者让一个已经编译的框架如此配置?如前所述,尝试在 XCode 7 上编译源代码是一场噩梦。 没有人想禁用bitcode,每个人都想做得更好,但是直到PLCrashReporter没有更新他们的框架以兼容bitcode,你必须禁用它。 【参考方案1】:我最终通过从源代码构建 PLCrashReporter 1.2.1 解决了这个问题。此版本是 Xcode 7 和 iOS9 修复合并的最低版本。
来源从这里获取:PLCrashReporter 1.2.1
将下载的 1.2.1 源码解压到一个文件夹中。
在 Xcode 中将该文件夹中的 Xcode 项目拉起,并将以下内容添加到项目构建设置的“自定义编译器设置”“其他 C 标志”部分:-fembed-bitcode
接下来将以下内容添加到项目构建设置的自定义编译器设置“其他警告标志”部分:-Wno-error=unused-command-line-argument
然后从 Xcode GUI 关闭项目。自定义设置是必要的,因为我们将使用 xcodebuild 从命令行构建以避免 PLCR 弃用错误,并且在这样做时默认只有 -fembed-bitcode-marker 以这种方式构建框架。我们正在覆盖默认行为,并且需要抑制由此导致的硬停止警告。
最后,从包含 xcode 项目文件的源 zip 文件所在文件夹中的终端窗口提示符运行以下命令:
xcodebuild -configuration Release -target 'Disk Image'
这将运行构建并将框架留在./build/Release/PLCrashReporter-1.2.1/iOS Framework
现在,这些步骤将生成一个启用位码的框架,但第三方崩溃报告与位码不兼容(当 App Store 重新编译时,您无法从动态构建中获取符号文件)。
【讨论】:
我执行了这个建议,实际上已经生成了一个框架,然后我可以将其导入我的项目中。然而,当我尝试存档时,我得到: ld:文件是通用的(5 个切片)但不包含 a(n) armv7k 切片:/Users/fbartolom/Documents/cocoa applications/inArrivoHD/CrashReporter.framework/CrashReporter file '/Users /fbartolom/Documents/cocoa applications/inArrivoHD/CrashReporter.framework/CrashReporter' 用于架构 armv7k 至于第三方工具,我使用与我的应用程序一起编译的 QuincyKit,因此它也应该启用位码。 然而,在 Xcode 上添加此选项并重复该过程后,它可以正常编译和存档。现在我正在尝试将应用程序提交给商店,我希望有同样的运气。 当您提交到 App Store 时,请务必在使用此框架时取消选中底部的“包含位码”框。 事实上,我遵循了 drshock 的建议,并设法让我的应用程序和 PLCrashReporter 都启用了 Bit Code - 我更愿意尽快遵循 Apple 的建议。我现在正在尝试提交二进制文件,但仍然出现无法验证客户端错误 3000。 @Fabrizio Bartolomucci,我建议从 Xcode Organizer 验证 ipa,然后从 Xcode 导出二进制文件(同样未选中 bitcode)以获取应用商店类型,然后使用 Application Loader [link ] itunesconnect.apple.com/apploader/ApplicationLoader_3.0.dmg【参考方案2】:有 2 个选项。
1. 下载PLCrashReporter 源代码并在启用位码的情况下对其进行编译,然后在您的项目中使用它。
2. 为您的目标禁用位码
转到目标的 Build Settings 选项卡,搜索 Enable Bitcode
将值设置为 NO。
【讨论】:
相反,我利用下面的答案为 PLCrashReporter 启用了位码。【参考方案3】:这对我有用,以便在我的项目中包含 Rollbar 框架:
在我的工作区中,我首先从 Project Navigator 中选择我的项目 -> 我的项目的目标 -> 构建设置 -> Enable Bitcode = NO
然后我从 Project Navigator 中选择 PODS -> Rollbar Target -> Enable Bitcode = NO
【讨论】:
【参考方案4】:遇到同样的问题。我使用从源代码构建崩溃报告器框架 https://www.plcrashreporter.org/code
在 Xcode 中打开 用红色靶心选择“CrashReporter”目标。 构建它然后在~/Library/Developer/Xcode/DerivedData/CrashReporter-xxxxxxx中搜索得到.framework bundle
【讨论】:
是的,实际上通过这种方式编译不会出错。现在我正在尝试启用位码。 不幸的是,当我尝试提交我的应用程序时,同样的问题再次浮出水面。当我现在尝试再次编译它时,我现在得到: ld: warning: object file (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a(cf.o) ( arclite.o)) 是为比链接 (10.5) 更新的 OSX 版本 (10.6) 构建的【参考方案5】:不幸的是,问题再次出现。此外,当我尝试再次编译时,我得到:
ld:警告:目标文件 (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a(cf.o)) 是为比链接 (10.5) ld 更新的 OSX 版本 (10.6) 构建的: 警告:目标文件 (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a(arclite.o)) 是为比链接 (10.5) 更新的 OSX 版本 (10.6) 构建的
此外,如果我在项目级别设置启用位代码,我会立即收到错误: 目标“CrashReporter-MacOSX-Static”已启用位码(ENABLE_BITCODE = YES),但“macosx”平台不支持它
我应该怎么做才能生成启用位码的框架?
【讨论】:
以上是关于Xcode 7'CrashReporter 不包含位码'链接器错误的主要内容,如果未能解决你的问题,请参考以下文章
WebView 在 Xcode 7.x [W/Code+Images] 中不返回 YouTube 视频
不要在 xcode 7 中使用 opencv 运行应用程序?
苹果手机crash日志怎么用symbolicatecrash分析
Xcode 7.3 XCTest of Disclosure Indicator in a custom TableViewCell