Help us understand the problem. What is going on with this article?

Firebase+CircleCi+FastlaneでAdHoc配信を自動化する

はじめに

今回は以前投稿したFirebaseAppDistributionのデプロイ作業をCircleCiFastlaneを用いて自動化していきたいと思います。実装前に下記の準備項目が必要になります。

事前準備

実装フロー

  1. Fastlane Matchを仕様してCI環境でもadhocの証明書を参照できるようにします。

  2. CircleCiからadhoc証明書を参照できるように権限を付与します。

  3. CircleCiからFirebaseにアクセスするために、環境変数を設定します。

  4. FastlaneにAppDistributionにデプロイするためのLaneを追加します。

  5. CircleCiのワークフローに4.で作成したレーンを追加します。

Fastlane Matchの導入

まずは、証明書に関する情報を保存して置くためのリポジトリを作成しておきます。

  git@github.com:your_github_name/certificates.git

次にFastlaneのMatchFileを下記のコマンドで設定します。ここで、設定するgithub-urlはHTTPSの場合CIからデプロイするときにErrorが発生する可能性があるので、SSHで設定しておきます。またPassphrass for Git repoで設定する値は後々メンバーに共有するなど使用するタイミングがあるので、控えておきましょう。

  $ fastlane match init

次に開発証明書と配信用証明書をそれぞれGitリポジトリに作成します。

  $ fastlane match development
  $ fastlane match adhoc

次に作成した証明書とプロファイルを取得し、XcodeのSigning&Capabilitiesにプロファイルを設定しておきましょう。

  $ fastlane match development --readonly
  $ fastlane match adhoc --readonly

スクリーンショット 2020-02-14 20.48.40.png

CircleCiにCertificatesリポジトリアクセス権限を付与する

CircleCiのプロジェクト画面に移動してカレントユーザのSSH keysを登録します。

https://circleci.com/docs/ja/2.0/add-ssh-key/ の通りCheckout SSH keysから登録を行います。

CircleCiにFirebaseTokenの環境変数を登録する

CI用のFirebaseTokenをFirebaseCLIから取得します。

  $ firebase login:ci

ログインに成功して表示されたtokenをCircleCiの環境変数に登録します。

スクリーンショット 2020-02-14 21.06.53.png
スクリーンショット 2020-02-14 21.07.39.png

FastFileの実装

まずはFastlaneからAppDistributionを使用するためのプラグインを追加します。

  $ fastlane add_plugin firebase_app_distribution

FastFileにLaneを追加します。

Fastfile.rb
default_platform(:ios)
WORKSPACE = "App.xcworkspace"
SCHEME = "App"
platform :ios do
  before_all do
    # https://circleci.com/docs/ja/2.0/testing-ios/
    setup_circle_ci
  end

  desc 'Runs except unit_test tests'
  lane :unit_test do
    scan(
      scheme: SCHEME
    )
  end

  desc 'Deploy to Firebase'
  lane :adhoc do
    # matchでadhoc証明を行います。
    match(type: "adhoc", readonly: true)
    # https://docs.fastlane.tools/actions/gym/ でipaを作成します。
    gym(
      workspace: WORKSPACE,
      scheme: SCHEME,
      configuration: "Staging",
      export_method: "ad-hoc"
    )
    # デプロイ
    firebase_app_distribution(
              app: "1:298717447283:ios:f90cc26d3b9a7423725606",
              testers: "tester_email@firebase.com,
              release_notes: "Lots of amazing new features to test out!",
              firebase_cli_path: "./node_modules/.bin/firebase"
    )
  end
end

CircleCi-Config.ymlの実装

config.yml
defaults: &defaults
  working_directory: ~/app
  macos:
    xcode: "11.3.0"
version: 2
jobs:
  unit_test:
    <<: *defaults
    steps:
      - checkout
      - run: bundle install --path vendor/bundle
      - run:
          name: Fastlane
          command: bundle exec fastlane unit_test
  adhoc:
    <<: *defaults
    steps:
      - checkout
      - run: bundle --path vendor/bundle
      - run:
          name: Install Firebase Tools
          # FirebaseCLIをインストール
          command: npm install firebase-tools
      - deploy:
          name: Deploy
          # Fastfileで作成したlaneを呼び出す
          command: bundle exec fastlane adhoc

workflows:
  version: 2
  build-and-deploy:
    jobs:
      - unit_test
      - adhoc:
          # unit_test完了後にデプロイ
          requires:
            - unit_test

さいごに

これでPRが作成されるたびにAppのAdHocがテスターに配信されるようになります。Appをインストールする手順は以前の記事でも投稿しています。

yum_fishing
iOS Developer 1998's 2018 - Go Fishing! 🎣 2019 - Player! - https://web.playerapp.tokyo/ - teamLab - RingoPass - Parnovi - https://parnovi-work.studio.design/ 2020 - wantedly - People
https://apps.apple.com/us/app/go-fishing/id1449815960
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした