[iOS] 2020年11月15日以降にCrashlyticsへのdSYMアップロードが失敗する事象への対処方法について

本記事では、2020年11月15日以降にCrashlyticsへのdSYMアップロードが失敗する場合の修正方法を紹介します。
2020.11.24

はじめに

こんばんは。CX事業本部の平屋です。

最近、CrashlyticsへのdSYMアップロードが失敗する事象に遭遇しました。調査の結果、対処する方法を発見しましたので、その方法を紹介します。

検証環境

  • Xcode Version 12

事象

2020年11月15日頃からCrashlyticsへのdSYMアップロードが失敗する事象が発生するようになりました。

対象のアプリはCIでビルドを行い、SDKのupload-symbolsコマンドでdSYMアップロードを行っていましたが、dSYMアップロードだけが失敗するようになっていました。 エラーの内容は以下の通りで、当該アプリで使用しているAlamofireのdSYMアップロードに失敗しています。

error: Failed uploading cSYMs due to error: Error Domain=com.twitter.FABCompoundOperation.error Code=4294967293 "(null)" UserInfo={com.twitter.FABCompoundOperation.error.user-info-key.underlying-errors=(
"Error Domain=com.crashlytics.mac.error-domain.submit-csym Code=0 \"Failed to submit cSYM for architecture armv7 with uuid XXXXXXXXXX in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM\" UserInfo={NSLocalizedFailureReason=Failed to submit cSYM for architecture armv7 with uuid XXXXXXXXXX in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM, NSUnderlyingError=0x7fdd5bf11d00 {Error Domain=FABNetworkError Code=-6 \"(null)\" UserInfo={retryLimit=10, NSErrorFailingURLStringKey=https://cm.crashlytics.com/api/v3/platforms/ios/code_mappings}}}",
"Error Domain=com.crashlytics.mac.error-domain.submit-csym Code=0 \"Failed to submit cSYM for architecture arm64 with uuid a2994177b2893f76b1b712677a652fbb in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM\" UserInfo={NSLocalizedFailureReason=Failed to submit cSYM for architecture arm64 with uuid a2994177b2893f76b1b712677a652fbb in dSYM: /tmp/sandbox/XXXXXXXXXX/build.xcarchive/dSYMs/Alamofire.framework.dSYM, NSUnderlyingError=0x7fdd5bf0b5b0 {Error Domain=FABNetworkError Code=-6 \"(null)\" UserInfo={retryLimit=10, NSErrorFailingURLStringKey=https://cm.crashlytics.com/api/v3/platforms/ios/code_mappings}}}"

原因

今回の事象の原因は古いバージョンのSDKのコマンド(Fabricのupload-symbols)を使用していることが原因でした。

こちらのFirebase Crashlytics(iOS)の公式のガイドページには、2020年11月24日現在、以下の注意書きが表示されています。

Fabric の終了: 以前の Fabric SDK と Firebase Crashlytics SDK の古いバージョンは非推奨になりました。2020 年 11 月 15 日以降はアプリのクラッシュが報告されなくなります。 Fabric からアプリを移行し、Firebase コンソールでクラッシュ レポートを引き続き受信したい場合は、アップグレード ガイドにアクセスし、特定のバージョンの Firebase Crashlytics SDK(Android の場合は 17.0.0 以降、iOS の場合は 4.0.0 以降、Unity の場合は 6.15.0 以降)を使用していることを確認してください。

これを見た際に、もしかして古いバージョンのSDKのコマンドを使用しているのでアップロードが失敗しているのでは? と思い、確認してみると、CI上でdSYMアップロードを行う際に使用しているスクリプトで、古いバージョンのSDKのコマンドを使用していました。

FabricからFirebaseへ移行する際に、アプリ側で使用するSDKは最新版のFirebase Crashlytics SDKに変更しましたが、CI用のスクリプトの対応が漏れていました。

対処方法

古いバージョンのSDKのコマンドを、Firebase Crashlytics SDKのコマンドに書き換えると、アップロードが成功しました。(SDKのインストールにはCocoaPodsを使用)

  • 変更前: /Pods/Fabric/upload-symbols
  • 変更後: /Pods/FirebaseCrashlytics/upload-symbols

公式のガイドページの注意書きや、今回の事象に遭遇した時期からの推測ですが、2020年11月15日を過ぎたあたりから、古いSDKからのアップロードを受け付けないようになったのではないかと思います。

なお、Firebase Crashlytics SDKupload-symbolsの使用例は以下のページに記載されています

さいごに

本記事では、CrashlyticsへのdSYMアップロードが失敗する事象への対処方法についてを紹介しました。同様の事象に遭遇している方の参考になれば幸いです。