【iOS/Xcode/Firebase】GitHub ActionsでGoogleService-Info.plistを動的に生成する方法
この記事からわかること
- iOS/XcodeでGitHub Actionsを使用してGoogleService-Info.plistを動的に構築する方法
index
[open]
\ アプリをリリースしました /
環境
- Xcode:26.0.1
- iOS:26
- Swift:6
- macOS:Tahoe 26.0.1
GitHub Actionsで動的にGoogleService-Info.plistを生成する方法
GitHub ActionsでCI/CD構築している場合にプロジェクトにFirebaseを導入している場合「GoogleService-Info.plist」が必要になります。「GoogleService-Info.plist」は基本的に非公開にするべきファイルなのでリポジトリがパブリックの場合はGitHub上のソースコードには含めない状態になっていると思います。
その場合GitHub Actions上でビルドなどを行おうとしても「GoogleService-Info.plist」が存在しないためエラーになってしまいます。とはいえパブリックなリポジトリに「GoogleService-Info.plist」をアップロードすることはセキュリティ上リスクが大きいためGitHub Actionsのフローの中で動的にファイルを生成することで解消できたので方法をまとめておきます。
手順
- 対象の「GoogleService-Info.plist」をbase64で暗号化
- GitHubのSecrets and variablesに登録
- GitHub Actions上から複合化してファイル化
1.対象の「GoogleService-Info.plist」をbase64で暗号化
まずはローカルで持っている対象の「GoogleService-Info.plist」をbase64で暗号化した文字列を生成します。以下のコマンドを実行してクリップボードにコピーしておきます。
$ base64 -i GoogleService-Info.plist | tr -d '\n' | pbcopy
2.GitHubのSecrets and variablesに登録
続いてリポジトリのSecrets and variablesに先ほど生成した文字列を登録していきます。Secrets and variablesは一度登録した内容を再度確認することができないので公開リポジトリでも問題ありません。
- GitHub >「リポジトリ」>「Settings」をクリック
- 「Secrets and variables」>「Actions」をクリック
- 「New Repository secret」をクリック
- 「Name」にSecret名(今回はGOOGLE_SERVICE_INFO_PLIST_BASE64)、「Secret」に生成した文字列を入力
- 「Add Secret」をクリック
これでリポジトリAのGitHub Actionsからsecret.GOOGLE_SERVICE_INFO_PLIST_BASE64で暗号化した「GoogleService-Info.plist」の中身が取得できるようになります。
3.GitHub Actions上から複合化してファイル化
最後にGitHub Actions上から複合化してファイル化していきます。secrets.GOOGLE_SERVICE_INFO_PLIST_BASE64で取得したものをbase64 --decodeを使って複合化し、$GITHUB_WORKSPACE/GoogleService-Info.plistにファイル化しています。これでGitHubのソースコード上に「GoogleService-Info.plist」がなくても動的にファイルを設置することができます。
# GoogleService-Info.plistの動的構築
- name: Setup GoogleService-Info.plist
run: |
echo ${{ secrets.GOOGLE_SERVICE_INFO_PLIST_BASE64 }} | base64 --decode > $GITHUB_WORKSPACE/GoogleService-Info.plist
確認方法
正しく生成されているかどうかはstepの中に$GITHUB_WORKSPACEの中身をリスト表示するとわかりやすいかなと思います。
- name: Show GITHUB_WORKSPACE
run: ls -R $GITHUB_WORKSPACE
GitHub ActionsのJobを実行させてみて以下のように「GoogleService-Info.plist」が表示されていればファイル生成ができていることになります。
▶︎ Run ls -R $GITHUB_WORKSPACE
fastlane
Gemfile
Gemfile.lock
GoogleService-Info.plist
・・・
secrets.GOOGLE_SERVICE_INFO_PLIST_BASE64の中身が正しいかどうかも確認したい場合は以下のようにしてみるとわかりやすいかもしれません。
- name: Debug base64
run: |
# Secret(Base64)の文字数を表示する
echo ${{ secrets.GOOGLE_SERVICE_INFO_PLIST_BASE64 }} | wc -c
# Base64をデコードしてplistファイルに書き出す (失敗時に処理を継続するためtrue)
echo ${{ secrets.GOOGLE_SERVICE_INFO_PLIST_BASE64 }} | base64 --decode > plist_check.plist || true
# 出力されたplistファイルをlsで確認する
ls -l plist_check.plist
# plistファイルの先頭10行を表示する(正常ならXMLのヘッダが出る)
head plist_check.plist
今回はiOSアプリ × Firebaseの想定で作成しましたが、いろいろなファイルで応用できそうですね。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。







