📱

Xcode 12 移行に伴い Firebase Cashlytics をアップデートする

2020/10/20に公開

前提

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 を追加してビルド時に動的にファイル名を書き換えるように設定します

  1. Configs という名前のフォルダを作成する
  2. 環境ごとにプレフィックスをつけた GoogleService-Info.plist を Configs フォルダに配置する
  3. 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

というようなエラーが発生したのでこちらを参考に以下のような対応を行いました

  1. Build Settings から Excluded Architectures を検索し、Any iOS Simulator SDK -> arm64 を追記

  2. Podfile に以下を記述します

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

これで無事対応が完了しました👏

Discussion