111
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

開発版とリリース版でFirebaseのGoogleService-Info.plistを切り替える

Last updated at Posted at 2018-07-17

iOSアプリの開発版とリリース版で別々のFirebaseプロジェクトを使うとき、GoogleService-Info.plistを環境ごとに切り替えてあげる必要があります。
この切り替え方法についてまとめます。

環境ごとに別々のターゲットを使用する場合

ターゲット設定

Firebaseに開発用とリリース用の2つのプロジェクトを作成しておきます。
ここではBundleIDは共通にすることとします。

開発版のターゲット名はFireApp-Debug、リリース版のターゲット名はFireApp-Releaseとします。

image.png

image.png

GoogleService-Info.plistの配置

Configs/DebugとConfigs/Releaseといったように、環境ごとにディレクトリを作成し、そこにそれぞれのGoogleService-Info.plistファイルを配置します。
詳しくは後述しますが、「GoogleService-Info.plist」という名前にしておく必要があります。

image.png

各GoogleService-Info.plistをそれぞれのターゲットに関連付けるのを忘れないようにしましょう。
こうすることで、FireApp-DebugターゲットではConfigs/Debug/GoogleService-Info.plistが、FireApp-ReleaseターゲットではConfigs/Release/GoogleService-Info.plistが使用されるようになります。

image.png

image.png

あとはAppDelegateで以下のコードを実行するだけです。

FirebaseApp.configure()

ターゲットは一つで、Configurationで切り替える場合

Firebaseに開発用とリリース用の2つのプロジェクトを作成しておきます。
ここではBundleIDは共通にすることとします。

ターゲット設定

こちらの方法では開発版とリリース版でターゲットは分けないので、新しくターゲットを作成する必要はありません。
プロジェクト作成時にデフォルトで作成されるターゲットを使用することとします。

GoogleService-Info.plistの配置

Configsディレクトリ配下に、GoogleService-Info-Debug.plistとGoogleService-Info-Release.plistという名前で配置します。

image.png

どちらのファイルも、ターゲットには関連付けないようにしておいて下さい(関連付けてもいいですがバンドルに無駄なファイルが追加されるだけです)。

image.png

ビルド時にGoogleService-Info.plistにリネームする

FirebaseSDKはGoogleService-Info.plistという名前を期待しているので、ビルド時にリネームしてバンドルに追加するという手段を取ります。

ターゲットのBuild Phasesに、Run Scriptを追加します。

if [ "${CONFIGURATION}" == "Release" ]; then
  cp "${PROJECT_DIR}/${PROJECT_NAME}/Configs/GoogleService-Info-Release.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
else
  cp "${PROJECT_DIR}/${PROJECT_NAME}/Configs/GoogleService-Info-Debug.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
fi

image.png

あとはAppDelegateで以下のコードを実行するだけです。

FirebaseApp.configure()

[非推奨] FirebaseApp.configure(options:)メソッドを使う

アプリ起動時にファイル名を指定してFirebaseSDKを設定する方法があります。
AppDelegateで以下のようなコードを書きます。

#if DEBUG
    let fileName = "GoogleService-Info-Debug"
#else
    let fileName = "GoogleService-Info-Release"
#endif
let filePath = Bundle.main.path(forResource: fileName, ofType: "plist")!
let options = FirebaseOptions(contentsOfFile: filePath)!
FirebaseApp.configure(options: options)

DebugビルドかReleaseビルドかによって、使用するGoogleService-Info.plistファイルを切り替えます。
#if DEBUGのところは他の記事を参照して下さい(これとか)。

ただしこのやり方には問題があって、アプリを実行すると以下のようなログが出力されます。

[Firebase/Core][I-COR000012] Could not locate configuration file: 'GoogleService-Info.plist'.
[Firebase/Analytics][I-ACS020006] Google App ID from GoogleService-Info.plist is empty. Please, define GOOGLE_APP_ID in GoogleService-Info.plist for Analytics to work reliably. See https://goo.gl/txkZbE
[Firebase/Analytics][I-ACS025020] Analytics requires Google App ID from GoogleService-Info.plist. Your data may be lost. Google App ID has been changed. Original, new ID: (nil), 1:230766696330:ios:86cfac58ce17318b

公式ドキュメントにもこの件に関して記載があり、FirebaseApp.configure()を実行するよりも前にGoogleService-Info.plistを参照しようとしてしまうようです。

アナリティクスデータが失われてしまう可能性があるようで、

可能な限りデフォルトの設定方法を使用することをおすすめします。

とのことなので、上述した2つの方法を使用すると良いでしょう。

この件に関連するIssueのリンクも貼っておきます: https://github.com/firebase/quickstart-ios/issues/75

111
68
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
111
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?