経緯
Bitcode が有効化されたアプリで、 dSYM ファイルを AppStoreConnect からダウンロード。
fastlane の upload_symbols_to_crashlytics
アクションでこれをアップロードする CI / CD のステップを組んでいました。
Firebase Crashlytics には dSYM ファイルをアップロードするためのコマンドとして upload-symbols が同梱 されており、upload_symbols_to_crashlytics
アクションでは、この upload-symbols
を利用して dSYM ファイルのアップロードを実施しています。
Firebase Crashlytics を CocoaPods で導入していた場合は問題ないのですが、 SwiftPackageManager で導入した場合、配置先のパスが特定できずにうまく動いてくれなかったため、 upload-symbols
コマンドを別途用意する対応を実施しました。
対応方法
前述の通り、 upload-symbols
コマンドについては Firebase Crashlytics のパッケージに同梱されているため、 curl でホスティング先の GitHub から直接ダウンロードしてしまいます。
# Firebase バージョンを別途指定する必要がある
$ curl -fsSL https://github.com/firebase/firebase-ios-sdk/raw/9.0.0/Crashlytics/upload-symbols -o ${配置先パス}/upload_symbols
# 一応、実行権限を付与
$ chmod +x ${配置先パス}/upload-symbols
あとはこれを upload_symbols_to_crashlytics
アクションで利用するだけです。
パラメータとして binary_path
を指定可能なため、これを指定することになります。
Fastfile の記述としてまとめると以下のようになります。
# 一時ディレクトリに配置
binary_path = ENV["TMPDIR"] + "/upload-symbols"
# upload-symbols を直接ダウンロード
sh(
"curl",
"-fsSL",
"https://github.com/firebase/firebase-ios-sdk/raw/9.0.0/Crashlytics/upload-symbols",
"-o",
binary_path
)
sh("chmod", "+x", binary_path)
# 直接ダウンロードした upload-symbols を利用して upload_symbols_to_crashlytics 実行
upload_symbols_to_crashlytics(
dsym_path: "${アップロードする dSYM のパス}",
gsp_path: "${GoogleService-Info.plist のパス}",
binary_path: binary_path
)
備考
fastlnae 側にも該当 issue が立っているのですが、コメント欄にある通り Xcode 14 以降ではそもそも AppStoreConnect からの dSYM ファイルダウンロードが不要になるはずなので、時間が解決してくれそうです。