Xcode 12 移行に伴い Firebase Cashlytics をアップデートする
前提
Firebase からアナウンスがあり Fabric SDK がクラッシュレポートを送信するのは 2020/11/15 までとなったようです
そのため、引き続き利用するためには Firebase Crashlytics SDK への移行が必要となりました
環境
- Xcode 12.0.1
- Swift 5.0
- Cocapods 1.8.4
Podfile を編集
- pod 'Fabric'
- pod 'Crashlytics'
+ pod 'Firebase/Crashlytics'
Firebase SDK は依存関係が複雑なため pod update
で Firebase SDK ごとバージョンアップすることをお勧めします
Run Script を編集
こちらは以前Fabricを利用していた方は
Build Phases -> Run Script
に
"${PODS_ROOT}/Fabric/run"
というようなスクリプトを既に追加されていると思いますので、以下に編集します
"${PODS_ROOT}/FirebaseCrashlytics/run"
そもそもこの記述がないよって方は、
プロジェクトファイル -> Build Phases -> +
からスクリプトを追加して利用ください
環境ごとにGoogleServices-info.plistを分ける
こちらはビルド環境ごとに読み込む GoogleServices-info.plist
を分岐していた方向けとなります
私の場合は以下のようにソースコードで読み込むファイルを変更していたのですが、こちらもFirebase SDKのアップデートでビルドエラーとなり利用できませんでした。
#if DEBUG
let filePath = Bundle.main.path(forResource: "GoogleService-Info-Staging", ofType: "plist")
#else
let filePath = Bundle.main.path(forResource: "GoogleService-Info-Release", ofType: "plist")
#endif
guard let fileopts = FirebaseOptions(contentsOfFile: filePath!) else { retrun }
FirebaseApp.configure(options: fileopts)
iOS の場合、Firebase SDK は標準で GoogleService-Info.plist
を環境ごとに分ける仕組みは無いようです。
また、GoogleService-Info.plist
という命名のファイルを読み込む性質上環境ごとに同一のファイルをプロジェクトに保持することができません(同一ファイル名で上書きされてしまうため)。
そこで、Build Phases -> run script を追加してビルド時に動的にファイル名を書き換えるように設定します
- Configs という名前のフォルダを作成する
- 環境ごとにプレフィックスをつけた
GoogleService-Info.plist
を Configs フォルダに配置する - Build Phases -> run script を追加して以下のように編集する
以下の例では 本番環境用として GoogleService-Info-Release.plist
開発環境用としてGoogleService-Info-Debug.plist
と命名した場合のスクリプトとなります
if [ "${CONFIGURATION}" == "Release" ]; then
cp "${PROJECT_DIR}/${PROJECT_NAME}/Configs/GoogleService-Info-Release.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
else [ "${CONFIGURATION}" == "Debug" ];
cp "${PROJECT_DIR}/${PROJECT_NAME}/Configs/GoogleService-Info-Debug.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
fi
その他エラー
building for iOS Simulator, but linking in object file built for iOS, file '/Users/hoge/dev/fuga/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector' for architecture arm64
というようなエラーが発生したのでこちらを参考に以下のような対応を行いました
-
Build Settings から
Excluded Architectures
を検索し、Any iOS Simulator SDK -> arm64
を追記 -
Podfile に以下を記述します
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
これで無事対応が完了しました👏
Discussion