我创建了一个通过cocoapods运送的供应商框架。现在,我还希望将dsym文件与框架一起运送,以便我的崩溃可以显示在控制台中,并包含在存档的ipa的dsym中。
我试图在框架中复制dsym,但是在归档构建时却抛出了“ bit_strip错误”。
预先感谢
答案 0 :(得分:0)
1.3.0中引入的Cocoapods可以如here所述自动复制供应商动态框架的dSYMs
:
CocoaPods将自动检测并复制供应商动态框架的.dSYM文件。将.dSYM放在您的.framework旁边以供CocoaPods检测到它,然后将其复制到$ {DWARF_DSYM_FOLDER_PATH}指定的文件夹中。
那么这到底如何工作?好吧,Cocoapods在本地克隆您的存储库,然后根据Podspec
中为库指定的模式对其进行清理。如果您将*.framework
和*.framework.dSYM
放在路径的同一级别,Cocoapods将在存档过程中自动检测到它并处理dSYM到${DWARF_DSYM_FOLDER_PATH}
文件夹的副本。>
├── Stencil.framework
│ ├── Headers -> Versions/Current/Headers
│ ├── Modules -> Versions/Current/Modules
│ ├── Resources -> Versions/Current/Resources
│ ├── Stencil -> Versions/Current/Stencil
│ └── Versions
│ ├── A
│ │ ├── Headers
│ │ │ ├── Stencil-Swift.h
│ │ │ └── Stencil.h
│ │ ├── Modules
│ │ │ ├── Stencil.swiftmodule
│ │ │ │ ├── x86_64.swiftdoc
│ │ │ │ └── x86_64.swiftmodule
│ │ │ └── module.modulemap
│ │ ├── Resources
│ │ │ └── Info.plist
│ │ └── Stencil
│ └── Current -> A
└── Stencil.framework.dSYM
└── Contents
├── Info.plist
└── Resources
└── DWARF
└── Stencil
检查*.dSYM
是否被正确检测和处理的一种好方法是,一旦将其添加到项目中,请查看Pods-{ProjectName}-frameworks.sh
,您应该找到一条类似于以下内容:
install_dsym "${PODS_ROOT}/Stencil.framework.dSYM"
在Cocoapods上方的那一行将dSYM复制到${DWARF_DSYM_FOLDER_PATH}
文件夹,并在存档过程中将其正确添加到*.xcarchive
。
这里重要的一点是,如果供应商提供的动态框架启用了位码,则dSYM将不够用,因为在这种情况下,将生成另一个名为*.bcsymbolmap
的文件,因此也有必要正确地表示崩溃。 Apple here对此有很好的解释。
再一次,我们如何将所生成的*.bcsymbolmap
包含在所生成的框架中?好了,您可以在Podspec中添加一个preserve_path
,以保留对生成的*.bcsymbolmap
的引用,然后Cocoapods会照顾它并为您复制符号。
m.preserve_path = '**/*.bcsymbolmap'
Mapbox-iOS-SDK-nightly-dynamic.podspec是一个很好的例子。必须特别指出的是,*.bcsymbol
与*.framework
必须与*dSYM
处于同一级别路径,才能正确处理。
再次检查是否检测到您的*.bcsymbolmap
并正确处理它。转至Pods-{ProjectName}-frameworks.sh
,您应该找到与以下内容相似的新行:
install_bcsymbolmap "${PODS_ROOT}/AA73DD4B-8AC5-30D1-9831-3D09CC9906D9.bcsymbolmap"