Crashlyticsのデバッグシンボルのアップロードを、CocoaPodsからSwiftPMに移行する

2026/01/13 23:08公開
2026/06/28 17:49最終更新
Table of Contents
  1. 問題
  2. 対処法
  3. 参考

問題

私のiOSアプリでは、以下のようなスクリプトを作成して、CI上でCrashlyticsのデバッグシンボルが自動的にアップロードされるように構成してあった。このスクリプトでは、$PODS_ROOT環境変数を使って、CrashlyticsのSDKのソースに含まれるコマンドを叩いている。そのため、Swift Package Managerに移行してからビルドを走らせると、動作しなくなった。

if [ "$CONFIGURATION" = "Release" ]; then
    gsinfo_plist_path="$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/GoogleService-Info.plist"
    firebase_app_id=$(/usr/libexec/PlistBuddy -c "Print :GOOGLE_APP_ID" "$gsinfo_plist_path")
    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase --validate -ai $firebase_app_id -- "$DWARF_DSYM_FOLDER_PATH/App.framework.dSYM"
    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase -ai $firebase_app_id -- "$DWARF_DSYM_FOLDER_PATH/App.framework.dSYM"
fi

Xcodeは26.2。

対処法

upload-symbolsコマンドのパスが変わっただけなので、パスを書き換えてあげればOK。新しいパスは以下。

${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols

[Flutterを使用している場合] Flutter 3.44以降のパスについて

Flutter 3.44にて、SwiftPMのソースパッケージのパスが変更された。そのため、Flutterを利用している場合、そのバージョン以前と以後でパスが異なる。3.44以降のパスは以下の通り。

$SRCROOT/../build/ios/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols

3.41以前のパスは恐らくFlutterでないアプリでも同様と思われる。

これを用いてスクリプトを修正する。

if [ "$CONFIGURATION" = "Release" ]; then
    gsinfo_plist_path="$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/GoogleService-Info.plist"
    firebase_app_id=$(/usr/libexec/PlistBuddy -c "Print :GOOGLE_APP_ID" "$gsinfo_plist_path")
    
    upload_symbols="${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols"
    
    $upload_symbols --build-phase --validate -ai $firebase_app_id -- "$DWARF_DSYM_FOLDER_PATH/App.framework.dSYM"
    $upload_symbols --build-phase -ai $firebase_app_id -- "$DWARF_DSYM_FOLDER_PATH/App.framework.dSYM"
fi

参考

https://stackoverflow.com/questions/76926943/firebase-automate-uploading-dsyms-swift-package-manager