LOG IN

iOS TodayExtensionのFirebase Crashlytics対応 (Carthage)

by shimastripe

Fabric Crashlyticsの記事やFabric→Firebase移行記事が多くてそれらしい話が見つからなかったので。FirebaseはCarthage(static framework) 経由です。

firebase-ios-sdk: 6.24.0

Xcode: 11.4.1

どういう人向けか

FirebaseのApp Extensions利用はサポート対象外

前もって確認しておくと現在はサポート対象外。動いたので記事にしていますが一応

Frameworkを入れる

公式のやり方に沿って入れていく

Carthageからstatic frameworkを入手

binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json"

binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseCrashlyticsBinary.json"

(手順に沿ってリンクとかする)

FirebaseApp.configure()

TodayViewControllerのoverrideinit(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)あたりで呼ぶ

Make sure that the build target(s) includes your project'sGoogleService-Info.plist(how to download config file)

肝になるのがこのGoogleService-Info.plistの扱いで、Dev/Prod切り替えている人はもともとRun Script時にGoogleService-Info.plistにRenameして入れる形にしている人が多いと思う

if [ "${CONFIGURATION}" == "PROD" ]; then

/bin/cp "${PROJECT_DIR}/PRODUCT_NAME/GoogleService-Info-production.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"

else

/bin/cp "${PROJECT_DIR}/PRODUCT_NAME/GoogleService-Info-development.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"

fi

通常のFirebaseのDev/Prodのplist切替方法

TodayExtensionの場合、BundleIdentifierがAppと違うため別個別アプリとしてFirebaseに登録してTodayExtension用のGoogleService-Info.plistを用意する。

if [ "${CONFIGURATION}" == "PROD" ]; then

/bin/cp "${PROJECT_DIR}/TodayExtension/GoogleService-Info-production.plist""${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.appex/GoogleService-Info.plist"

else

/bin/cp "${PROJECT_DIR}/TodayExtension/GoogleService-Info-development.plist""${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.appex/GoogleService-Info.plist"

fi

TodayExtensionのFirebaseのDev/Prodのplist切替方法

${PRODUCT_NAME}.appexの中にGoogleService-Info.plistを入れることでTodayExtension用のplistを埋め込むことができる。

このとき、Appと同一のGoogleService-Info.plistを使うと、単一アプリでクラッシュログを収集することもできるが、現状AppとTodayExtensionのログを区別するクエリが書けないみたい。ファイル名などで判別することはできるだろうけど。

run/upload-symbolsコマンド

現状Carthageはバイナリコマンドを埋め込むことができないのでCarthageで入れる場合には自前でリポジトリから取ってくる必要がある。これだと定期的にmasterの更新がされていないか確認する必要がある。Swift5.3になってSPMに移行したら解決しそうですね。

アプリのBitcodeをONにしている場合、appstoreconnectにupload後appstoreconnectに生成されるDSYMをCIなどを用いてDLしてrunコマンドを実行する必要があるため注意。

Fabric → Firebase CrashlyticsのAPIの移行

https://firebase.google.cn/docs/crashlytics/upgrade-sdk?platform=ios&hl=en

Firebase 6.25.0に上げる

Firebase 6.24.0まではTodayExtensionでAppと異なるGoogleService-Info.plistを使うとWarningログが出ていたが、6.25.0からは出さないようにbundleIdentifierの判定を緩く(?)したみたいです。上げましょう。

[Firebase/Core][I-COR000008] The project's Bundle ID is inconsistent with either the Bundle ID in 'GoogleService-Info.plist', or the Bundle ID in the options if you are using a customized options. To ensure that everything can be configured correctly, you may need to make the Bundle IDs consistent. To continue with this plist file, you may change your app's bundle identifier to 'com.mycompany.myapp.ShareExtension'. Or you can download a new configuration file that matches your bundle identifier fromhttps://console.firebase.google.com/and replace the current one.

引用元:https://github.com/firebase/firebase-ios-sdk/issues/5126

以上です。よかったですね。

OTHER SNAPS