debug symbol / dSYMとは
dSYMの前にまず、debug symbolとは何かを整理します。debug symbolとは、アプリをコンパイルする過程で生成されるアプリのソースコードに含まれるクラス名やグローバル変数、メソッド名などのシンボル(名前)のリストのこと。
debug symbolには上記内容だけでなく、それらが(クラス名など)どのファイルの何行目で定義されているかという情報も含まれる。
普段XcodeでiOSアプリなどを開発している際にクラッシュしたりするが、その際にXcodeがスタックトレースはこのdebug symbolが使用されている。 debugビルド時にはデフォルトでアプリのbinary fileにdebug symbolが含まれているが、release build時では配布するアプリのサイズを減らすためにアプリのbinaryとは別にDebug Symbol fileを生成する。
このDebug Symbol fileがdSYM と呼ばれている。
アプリのbinaryと言っても、mainの実行可能なアプリ、アプリで使用しているframework、App Extensionでbinary fileがそれぞれ分かれる。 dSYMはコンパイルしたbinaryと同様にbuild UUIDで紐付けられるため、同じソースコードでもXcodeのversionやbuild settingが異なる場合、異なるbinary fileになる = 異なるdSYMが生成される。
dSYMの使用用途
目的としては開発時のdebug symbolと同様に、リリース済みのアプリで発生したクラッシュの問題特定および解決や診断のために使用する。bitcode onの状態でarchiveするケース
bitcode込みでarchiveする場合は、dSYMだけでなくbitcode symbol map (bcsymbolmap
) というファイルも生成し、bitcode込みでarchiveしたdSYMはシンボルがXcodeによって難読化される。難読化を解読するためのファイルが bcsymbolmap であり実際のコードとdSYMとのマッピングを行う。
また、AppStoreConnectにuploadする際にXcodeはbcsymbolmapファイルを除外し、ローカルのmacにシンボルを特定するための情報が残るようになる。
この辺のより詳細な情報はApple公式が出しているこちらの記事に記載されています。https://developer.apple.com/documentation/xcode/building_your_app_to_include_debugging_information
bitcodeとは
上記で出てきたbitcodeとは何なのか? bitcodeとは、コンパイル済みのプログラムにおける中間表現のことで、bitcode込みでAppStoreConnectにuploadすることでAppStoreConnect上でcompile、linkが可能となる。こうすることで、Appleは将来アプリの新しいversionをApp Storeに提出することなくアプリのバイナリを最適化できるようになります。
ただし、bitcodeに対応するにはアプリのメインのコードだけでなく、依存するframeworkなどもbitcode対応する必要があります。 iOSの場合、bitcode対応は任意で、watchOSやtvOSの場合は必須です。 こちらもApple公式で詳細な記載がされています
https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f