我需要创建由Carthage创建的bcsymbolmap文件吗?

24

我在我的iOS项目中使用Carthage依赖管理器。

我在仓库中有一个 Carthage/build文件夹,以便在检出仓库时随时准备好使用已构建的框架。

我想知道构建文件夹中的bcsymbolmap文件是用来做什么的。每次运行carthage update时都会创建相当多的这些文件。

我需要保留这些文件吗?我应该将它们保存在我的仓库中吗?


很棒的问题。 - Fattie
3个回答

5
不需要这些文件。如果你正确设置了Carthage,二进制、.dsym和.bcsymbolmap文件将在构建阶段被复制。当你归档用于通过App Store分发的构建时,所有需要的文件都会被包含在归档中,上传构建到App Store后,你将能够随时上传dsyms文件(以便解码崩溃报告)。实际上,你不需要将.dsyms和.bcsymbolmap文件存储在你的仓库中。
有一篇很好的文章解释了框架构建时正在发生的事情(以及实际上Carthage脚本在做什么)https://instabug.com/blog/ios-binary-framework/。它还解释了.bcsymbolmaps文件的用途,这样苹果服务器就可以使用Bitcode重建你的代码,然后你就可以对崩溃报告进行反符号化处理。
因此,你不需要保留这些文件。无需将它们存储在仓库中。不将Build文件夹的内容存储到仓库的另一个原因是,即使在具有不同环境的另一台计算机上,项目也可能在构建时失败。如果你想使用相同版本的依赖项构建你的项目,请使用Carthage的bootstrap命令,而不是update命令。
另外你可以调查一下copy-frameworks命令的作用:https://github.com/Carthage/Carthage/blob/fc0166b4827736bac2c804fc928797f1a742c455/Source/carthage/CopyFrameworks.swift

4
如果你使用carthage build而没有指定项目,所有的.bcsymbolmaps都应该被删除,但如果你使用例如carthage build Alamofire,它应该只删除相应的.bcsymbolmap。
这是从一个GitHub问题的讨论中得出的结论。看起来你不需要那些文件,因为默认行为是在构建新版本时删除它们。
一般来说,你不应该将本地构建期间生成的文件提交到你的存储库中,因为构建可能是特定于设备的,每个克隆或拉取你的存储库的人都应该能够自己执行构建。

1
感谢您指出在Github上的讨论。那里也链接到了苹果开发者论坛的一个主题。似乎需要bcsymbolmap文件才能将应用上传到App Store。但是看起来Carthage从不清除旧文件......顺便说一下,提交构建产品的原因是允许在拉取仓库后立即构建应用程序而无需重新构建所有依赖项。此外,依赖项目可能会被从Github中删除,因此我们希望在本地保留它们。 - codingFriend1
4
在迦太基的情况下,有很好的理由提交Build和Checkout文件夹。详见https://dev59.com/Lpvga4cB1Zd3GeqPvgds#44082073。如果你不这样做,检出代码的人可能会在提交之前无意中构建出与你测试过的不同的东西。 - pbm

1

位码符号映射(BCSymbolMap)

.bcsymbolmap是一个包含调试信息的文本文件,用于解码堆栈跟踪。解决了与.dSYM[关于]相同的问题,但在生成Bitcode[关于]时更低级别。

它的外观如下:

BCSymbolMap Version: 2.0
__swift_FORCE_LOAD_$_swiftCompatibility50
__swift_FORCE_LOAD_$_swiftCompatibility51
__swift_FORCE_LOAD_$_swiftCompatibilityDynamicReplacements
_$sSo26SCNetworkReachabilityFlagsVMa
_$sSo24SCNetworkReachabilityRefaMa
...

我需要保留这些文件吗?我应该将它们放在我的代码库中吗?

这些是可选的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接