TOP(About this memo)) > 一覧(Flutter) > Firebase Crashlytics
flutterfire configure
を実行する。FlutterFire: "flutterfire upload-crashlytics-symbols"
FIX: ensure Crashlytics Apple upload-symbol script works for every build type/flavor
FIX(apple): upload debug symbols for de-obfuscating Dart stack traces FEAT: flutterfire reconfigure now updates android build.gradle files & Apple project.pbxproj for debug symbol script like flutterfire configure
FEAT: automatically add debug symbols script by detecting crashlytics dependency.
FEAT: upload debug symbols script.
このアプリには未処理のクラッシュが x 件あります。これらを処理するには、x 個の dSYM ファイルをアップロードしてください。
dwarf-with-dsym
へ変更してみる。find ./ -name "*.dSYM" | xargs -I \{\} dwarfdump -u \{\}
によってローカルのdSYMのUUIDの一覧を探しても、コンソール上で欠損として表示されるUUIDが見つからないこともある。
build/ios/Debug-iphoneos/Runner.app.dSYM/Contents/Resources/DWARF/Runner.debug.dylib
というファイルのUUIDにはヒットする。build/ios/Debug-iphoneos/Runner.app.dSYM
をアップロードすると別のUUIDとして扱われる。[firebase_crashlytics] Crashlytics Upload Symbols
#!/bin/bash
PATH=${PATH}:$FLUTTER_ROOT/bin:$HOME/.pub-cache/bin
flutterfire upload-crashlytics-symbols
--upload-symbols-script-path=$PODS_ROOT/FirebaseCrashlytics/upload-symbols
--platform=ios
--apple-project-path=${SRCROOT}
--env-platform-name=${PLATFORM_NAME}
--env-configuration=${CONFIGURATION}
--env-project-dir=${PROJECT_DIR}
--env-built-products-dir=${BUILT_PRODUCTS_DIR}
--env-dwarf-dsym-folder-path=${DWARF_DSYM_FOLDER_PATH}
--env-dwarf-dsym-file-name=${DWARF_DSYM_FILE_NAME}
--env-infoplist-path=${INFOPLIST_PATH}
--default-config=default
$PODS_ROOT/FFirebaseCrashlytics/upload-symbols
を実行するexport DWARF_DSYM_FOLDER_PATH=/Users/path/to/project/build/ios/Release-iphoneos
export DWARF_DSYM_FILE_NAME\=Runner.app.dSYM
export INFOPLIST_PATH\=Runner.app/Info.plist
export BUILT_PRODUCTS_DIR\=/Users/path/to/project/build/ios/Release-iphoneos
export PROJECT_DIR\=/Users/path/to/project/ios
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/Runner/GoogleService-Info.plist" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
を直接呼び出して、Input Filesに各種ファイルを設定することとほぼ同じと考えられる。
Running upload-symbols in Build Phase mode
warning: Flutter build with '--obfuscate' enabled. To view deobfuscated stack traces, upgrade to Flutter 3.12.0+ or upload dSYMs manually using the Firebase console web uploader at https://firebase.google.com/project/_/crashlytics
Validating build environment for Crashlytics...
Processing dSYMs...
Successfully submitted symbols for architecture arm64 with UUID xxxxx in dSYM: /Users/path/to/project/build/ios/Release-iphoneos/Runner.app.dSYM
Successfully submitted symbols for architecture arm64 with UUID xxxxx in dSYM: /Users/path/to/project/build/ios/Release-iphoneos/App.framework.dSYM
Successfully uploaded Crashlytics build event and symbols
Running upload-symbols in Build Phase mode
warning: Flutter build with '--obfuscate' enabled. To view deobfuscated stack traces, upgrade to Flutter 3.12.0+ or upload dSYMs manually using the Firebase console web uploader at https://firebase.google.com/project/_/crashlytics
Validating build environment for Crashlytics...
Processing dSYMs...
Successfully submitted symbols for architecture arm64 with UUID xxxxx in dSYM: /Users/path/to/project/build/ios/Release-iphoneos/Runner.app.dSYM
Successfully submitted symbols for architecture arm64 with UUID xxxxx in dSYM: /Users/path/to/project/build/ios/Release-iphoneos/App.framework.dSYM
Successfully uploaded Crashlytics build event and symbols
--obfuscate
)を行った場合でも、dSYMは難読化されない。
--split-debug-info
によって出力される.symbolファイルをCrashlyticsへアップロードする必要はない。--obfuscate
を利用した際にCrashlyticsのスタックトレースも難読化されてしまう、というIssueとなる。(8934, 10994のissue)--obfuscate
を利用した際に、dSYMの方も難読化がされてしまったこととなる(124715のissue)Xcode 16 以降、App Store の検証では、App Store にアップロードされたアプリが、埋め込まれている各フレームワークの dSYM デバッグ情報バンドルをバンドルすることが必要になりました。 dSYMバンドルは、エンジンパッチとしてios-release toolsアーカイブに同梱されているFlutter.xcframeworkにパッケージされています これはFlutter.framework.dsymバンドルをtoolsキャッシュからflutter build ipaが生成するappアーカイブにコピーする。
Crashlyticsによってプロダクションクラッシュが報告されましたが、UUID 1F29F0F6-7F1B-3049-A2C2-B0101BD2AB95のdSYMが見つからないため、詳細を表示することができません。 過去に何度かクラッシュが発生しましたが (同じビルドでも)、dSYM の欠落に関する問題は報告されていませんでした。そのため、dSYM のほとんどは問題なくビルド出力に含まれていると推測しています。
changed the title
Flutter application missing framework dSYMsFlutter application missing framework dSYMs, validation error “The archive did not include a dSYM for the Flutter.framework with the UUIDs” on Jul 10
これは #153215 (commit c375dd8) で master ブランチで修正されました。 Xcode Product > Archiveまたはflutter build ipa経由でApp Storeアーカイブを作成すると、Flutter.framework.dSYMバンドルが埋め込まれるようになりました。
flutterfire configure
によって追加されるスクリプトがアップロードするdSYMは、App.framework.dSYM と Runner.app.dSYM の2つのみとなる。find ./ -name "*.dSYM" | xargs -I \{\} ios/Pods/FirebaseCrashlytics/upload-symbols -gsp ios/Runner/GoogleService-Info.plist -p ios \{\}
ios/Pods/FirebaseCrashlytics/upload-symbols -gsp ios/Runner/GoogleService-Info.plist -p ios "/path/to/Library/Developer/Xcode/Archives/YYYY-mm-dd/Runner YYYY-mm-dd, hh.mm.xcarchive/dSYMs"
`firebase crashlytics:symbols:upload --app="(コンソール上で確認できるアプリのID)" obfuscate/ios/app.ios-arm64.symbols`
ios/Pods/FirebaseCrashlytics/upload-symbols -gsp ios/Runner/GoogleService-Info.plist -p ios ./build/ios/archive/Runner.xcarchive/dSYMs/Flutter.framework.dSYM
ios/Pods/FirebaseCrashlytics/upload-symbols -gsp ios/Runner/GoogleService-Info.plist -p ios ./build/ios/archive/Runner.xcarchive/dSYMs/対象のパッケージ.dSYM