如何在ios中通过cocoapods使用供应商框架发送dsym文件

shi*_*hub 7 frameworks cocoapods dsym podspec swift

我创建了一个通过 cocoapods 发送的供应框架。现在我想将 dsym 文件也与框架一起发送,以便我的崩溃可以显示在控制台中并包含在存档的 ipa 的 dsym 中。

我尝试在框架中复制 dsym,但在存档构建时抛出“bit_strip 错误”。

提前致谢

Vic*_*ler 1

dSYMsCocoapods 在 1.3.0 中引入了自动复制供应商动态框架的可能性,如下所述:

\n
\n

CocoaPods 将自动检测并复制供应商动态框架的 .dSYM 文件。将 .dSYM 放置在 CocoaPods 的 .framework 旁边以检测它并将其复制到 ${DWARF_DSYM_FOLDER_PATH} 指定的文件夹中。

\n
\n

那么这到底是如何运作的呢?好吧,Cocoapods 在本地克隆您的存储库,然后根据Podspec库中指定的模式清理它。如果您将*.framework和放在路径的同一级别,Cocoapods 将自动检测它并在存档过程中*.framework.dSYM处理 dSYM 的副本到该文件夹​​。${DWARF_DSYM_FOLDER_PATH}

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Stencil.framework\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Headers -> Versions/Current/Headers\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Modules -> Versions/Current/Modules\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Resources -> Versions/Current/Resources\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Stencil -> Versions/Current/Stencil\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Versions\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 A\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Headers\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Stencil-Swift.h\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Stencil.h\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Modules\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Stencil.swiftmodule\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 x86_64.swiftdoc\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 x86_64.swiftmodule\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module.modulemap\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Resources\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Info.plist\n\xe2\x94\x82       \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Stencil\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Current -> A\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Stencil.framework.dSYM\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Contents\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Info.plist\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Resources\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 DWARF\n                \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Stencil\n\n
Run Code Online (Sandbox Code Playgroud)\n

检查您是否*.dSYM被检测到并正确处理的一个好方法是将其添加到项目后,查看一下Pods-{ProjectName}-frameworks.sh,您应该会找到类似于以下内容的新行:

\n
install_dsym "${PODS_ROOT}/Stencil.framework.dSYM"\n
Run Code Online (Sandbox Code Playgroud)\n

通过上面的这一行,Cocoapods 会将 dSYM 复制到该文件夹​​,并在存档过程中将${DWARF_DSYM_FOLDER_PATH}其正确添加到该文件夹​​中。*.xcarchive

\n

这里重要的一点是,如果您的供应商动态框架启用了 Bitcode,那么 dSYM 将不够,因为在这种情况下,*.bcsymbolmap将生成另一个名为的文件,并且也有必要正确地表示您的崩溃。Apple对此提供了很好的解释。

\n

那么我们如何才能将生成的框架包含*.bcsymbolmap在生成的框架中呢?好吧,您可以在 Podspec 中添加 apreserve_path以保留对生成的引用*.bcsymbolmap,Cocoapods 会再次处理它并为您复制符号。

\n
m.preserve_path = \'**/*.bcsymbolmap\'\n
Run Code Online (Sandbox Code Playgroud)\n

一个很好的例子是Mapbox-iOS-SDK-nightly-dynamic.podspec。需要提及的是,需要与要正确处理的*.bcsymbol位于同一级别的路径,这一点非常重要。*.framework*dSYM

\n

再次检查您是否*.bcsymbolmap被检测到并正确处理它转到Pods-{ProjectName}-frameworks.sh,您应该找到类似于以下内容的新行:

\n
install_bcsymbolmap "${PODS_ROOT}/AA73DD4B-8AC5-30D1-9831-3D09CC9906D9.bcsymbolmap"\n
Run Code Online (Sandbox Code Playgroud)\n