我需要 Carthage 创建的 bcsymbolmap 文件吗

Do I need bcsymbolmap files created by Carthage

我在 iOS 项目中使用 Carthage 依赖管理器。 我的存储库中有 Carthage/build 文件夹,以便在签出存储库时随时准备构建框架。

我想知道构建文件夹中的 bcsymbolmap 文件是做什么用的。每个 carthage update 都会创建其中的一些。

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

If you use carthage build without the specification of a project, all .bcsymbolmaps should be deleted, but if you use e.g. carthage build Alamofire it should just delete the corresponding .bcsymbolmap

来自 the discussion of a github issue。看起来您不需要这些文件,因为默认行为是在构建新版本时删除它们。

一般来说,您不应将在本地构建过程中生成的文件提交到您的存储库中,因为构建可能是特定于设备的,并且每个克隆到您的存储库中或从中提取的人都应该能够自己执行构建。

不,您不需要这些文件。如果正确设置 Carthage,二进制、.dsym 和 .bcsymbolmap 文件将在构建阶段被复制。当您存档构建以使用 App Store 分发时,所有需要的文件都将包含在存档中,并且在您将构建上传到 App Store 后,您将能够随时上传 dsyms 文件(以便能够解码您的崩溃报告)。事实上,您不需要在存储库中存储 .dsyms 和 .bcsymbolmap 文件。

有一篇很好的文章解释了在构建框架时发生了什么(以及 Carthage 脚本实际上做了什么)https://instabug.com/blog/ios-binary-framework/。它还解释了 .bcsymbolmaps 文件的用途 - 因此 Apple 服务器可以使用 Bitcode 重建您的代码,然后您可以取消符号化您的崩溃报告。

因此,您不需要保留这些文件。无需将它们存储在存储库中。不存储 Build 文件夹内容的另一个原因是,无论如何,您的项目在具有不同环境的另一台机器上使用它构建时可能会失败。如果你想用相同版本的依赖项构建你的项目 - 使用 Carthage bootstrap 命令而不是 update.

P.S。 您还可以调查 copy-frameworks 命令的作用: https://github.com/Carthage/Carthage/blob/fc0166b4827736bac2c804fc928797f1a742c455/Source/carthage/CopyFrameworks.swift

位码符号映射(BCSymbolMap)

.bcsymbolmap 是一个带有调试信息的文本文件,它是为解码堆栈跟踪而生成的。解决了与生成 .dSYM[About] but on more low level for and when Bitcode

相同的问题

看起来像:

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

Do I need to keep these files? Should I have them in my repository?

它们是可选的