12
6

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 1 year has passed since last update.

Github ActionでFlutterアプリをTestFlight配信する

Last updated at Posted at 2023-08-27

本記事ではGithub ActionでFlutterアプリをTestFlight配信する方法を紹介します(対象OSはiOSのみとなります)。

方法

Github Action内でfastlaneの各種コマンドを実行します。
このために

  • Fastfile
  • Github Actionの実行ファイル

を設定する必要があります。

事前準備

  1. fatlane matchで証明書を管理している
    • 本記事ではGithub Action上で証明書使う手法として、matchによって証明書等が管理されているリポジトリから証明書等をダウンロードする方法を取っています。
  2. GithubのFine-grained personal access tokensを発行している
    • 1のmatchで作成されたリポジトリをcloneする際に必要になります。personal access tokens (classic)でも可能ですが、Fine-grained personal access tokensの使用が推奨されています。
    • Deploy Keyを使う事も可能です。
  3. App Store Connect APIのキーを発行している
    • TestFlightにアップロードする際にこのキーが必要になります。

設定ファイル

Fastfile

Fastfile

default_platform(:ios)

platform :ios do

  def update_build_number
    increment_build_number(
      skip_info_plist: true,
      build_number: number_of_commits)
  end

  lane :upload_testflight do
    access_token = ENV['PERSONAL_ACCESS_TOKEN']

    # 1. 証明書のインストール
    match(
      git_url: "https://#{YOUR_NAME}:#{access_token}@github.com/#{YOUR_NAME}/#{YOUR_REPOSITORY_NAME}.git",
      type: "appstore",
      app_identifier: "YOUR_APP_IDENTIFIER",
      readonly: true)

    # ビルド番号はコミット数とする
    update_build_number

    update_code_signing_settings(
      use_automatic_signing: false,
      path: "Runner.xcodeproj",
      profile_name: "YOUR_PROFILE_NAME",
      code_sign_identity: "YOUR_CODE_SIGN_IDENTITY"
    )

    build_app(
      output_name: 'IPA_NAME',
      output_directory: 'build/ios/',
    )

    # 2. App Store Connect APIの API Keyを取得
    api_key = app_store_connect_api_key(
      key_id: ENV['ASC_KEY_ID'],
      issuer_id: ENV['ASC_ISSUER_ID'],
      key_content: ENV['ASC_KEY_CONTENT'],
    )

    upload_to_testflight(
      api_key: api_key,
      skip_waiting_for_build_processing: true,
      ipa: 'IPA_NAME'
    )
  end
end


1. 証明書のインストール

matchを使用して証明書のインストールを行います。git_urlの設定はStack OverFlowのこちらの解答を参考にしています。Fine-grained personal access tokensを使用する際はこういった指定をする必要があるようです。

2. App Store Connect APIの API Keyを取得

App Store Connect APIの API Keyを使う事で2段階認証が必要なくなるといったメリットがあります。
https://docs.fastlane.tools/app-store-connect-api/

Github Actionのファイル

Github Actionのファイル
name: upload_testflight

on:
  push:
    branches: [feature/xxx]

jobs:
  build:
    runs-on: macos-12
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      # 1. Flutter SDKのインストール
      - name: install flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: "3.10.6"
          channel: "stable"
          cache: true

      - name: flutter dependencies install
        run: flutter pub get

      # 2. CocoaPodsを使用したライブラリのインストール
      - name: Pod cache
        uses: actions/cache@v3
        id: cache-cocoapods
        with:
          path: ios/Pods
          key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-

      - name: Pod Install
        if: steps.cache-cocoapods.outputs.cache-hit != 'true'
        run: |
          cd ios/
          pod install

      - name: Upload testflight
        run: |
          cd ios
          fastlane upload_testflight
        env:
          PERSONAL_ACCESS_TOKEN: ${{secrets.PERSONAL_ACCESS_TOKEN}}
          ASC_KEY_ID: ${{secrets.ASC_KEY_ID}}
          ASC_ISSUER_ID: ${{secrets.ASC_ISSUER_ID}}
          ASC_KEY_CONTENT: ${{secrets.ASC_KEY_CONTENT}}
          MATCH_PASSWORD: ${{secrets.MATCH_PASSWORD}}



1. Flutter SDKのインストール

cache: trueを設定する事でSDKをキャッシュする事ができます。これによりCIの実行時間短縮が見込めます。

2. CocoaPodsを使用したライブラリのインストール

こちら1と同様にキャッシュをしています。

参考

12
6
0

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
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?