【iOS/Xcode/Firebase】GitHub ActionsでGoogleService-Info.plistを動的に生成する方法

【iOS/Xcode/Firebase】GitHub ActionsでGoogleService-Info.plistを動的に生成する方法

この記事からわかること

  • iOS/XcodeGitHub Actionsを使用してGoogleService-Info.plist動的構築する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

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のフローの中で動的にファイルを生成することで解消できたので方法をまとめておきます。

手順

  1. 対象の「GoogleService-Info.plist」をbase64で暗号化
  2. GitHubのSecrets and variablesに登録
  3. 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は一度登録した内容を再度確認することができないので公開リポジトリでも問題ありません。

  1. GitHub >「リポジトリ」>「Settings」をクリック
  2. 「Secrets and variables」>「Actions」をクリック
  3. 「New Repository secret」をクリック
  4. 「Name」にSecret名(今回はGOOGLE_SERVICE_INFO_PLIST_BASE64)、「Secret」に生成した文字列を入力
  5. 「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の想定で作成しましたが、いろいろなファイルで応用できそうですね。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index