はじめに
2019年にAppleDeveloperProgramのAppleIDは2ファクタ認証が必須となりました。(AccountHolderというもっとも権限を持つアカウントのみ)
この2ファクタ認証が有効になることにより、
CIサービスを用いたアプリ申請自動化にどのような影響が出るのか
またその回避策を改めてまとめた記事です。
この記事はfastlaneを中心に情報をまとめます。
2ファクタ認証 OFFが最もシンプル
はじめに述べてしまいますが、
もっともシンプルな解決策は2ファクタ認証を有効化していないアカウントを用意することです。
運用上、それが難しい方がこの記事でなんらかの解決策を見出して頂けると嬉しいです。
前提情報
アプリ申請の手順
今回はアプリ申請に関わる手順を以下のものとします。
- 証明書とProvisioningProfileを取得または作成
- ipaファイルをAppstoreConnectにアップロード
- ストア情報のアップロード (説明文やスクショ等)
- 再コンパイルの完了を待つ
- アプリ審査提出
- 再コンパイル後のdSYMをダウンロード
- firebase等にdSYMをアップロード
これらの手順のなかでも、AppleIDの2ファクタ認証の影響を受けるものと
FastlaneのActionを表にしたものが以下です。
※ deliver
が2つあるのは、用途により認証に必要な情報が違うためです
Fastlane Action | 用途 |
---|---|
match | 証明書及びProfisioningProfileの管理 |
deliver | ipaのアップロード |
deliver | ストア情報のアップロード |
download_dsyms | 再コンパイル後のdSYMをダウンロード |
2ファクタ認証の回避方法
確認コードの入力を回避しインタラクティブモードでなくとも (CIサービス等で) アプリ申請を行う方法。
大きく分けて2つあります。
Sessionを利用する
AppleIDのログインクッキーが環境変数 FASTLANE_SESSION
に設定されていれば2ファクタ認証を回避できます。
(所定のディレクトリにクッキー情報をファイルで配置する方法もあります)
ただし、クッキーは有効期限が1ヶ月と限られており、定期的に再認証が必要となります。
また、このSessionはアクセスする地域が大きく異なると無効となる点も注意が必要です。
例) 日本のローカルマシンで生成したクッキーをクラウド(北米)で利用する
Bitriseではこのような対策が取られています。
Sessionを利用する際に必要な情報
概要 | 環境変数名 |
---|---|
アプリ申請可能なAppleID | FASTLANE_USER |
アプリ申請可能なAppleIDのパスワード | FASTLANE_PASSWORD |
アプリケーション固有パスワード ipaファイルのアップロード時にのみ必要 |
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD |
2ファクタ認証成功時に得られるクッキー 有効期限1ヶ月 |
FASTLANE_SESSION |
証明書やProvisioningProfileを複合化するパスワード | MATCH_PASSWORD |
AppStoreConnect APIを利用する
アクセス用の証明書を生成することで2ファクタ認証を回避できるAPIが公開されています。
この方法を利用すると恒久的に2ファクタ認証を回避できますが、提供されている機能は限られています。Fastlane Actionとの対応表が以下です。
Fastlane Action | 用途 | AppStoreConnect API対応 |
---|---|---|
match | 証明書及びProfisioningProfileの管理 | ○ |
deliver | ipaのアップロード | ○ |
deliver | ストア情報のアップロード | ○ |
download_dsyms | 再コンパイル後のdSYMをダウンロード | × |
追加情報
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORDの生成方法
- Appleアカウントの管理にアクセス
- セキュリティ項目のパスワード生成をクリック
- 得られるパスワードが
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
として利用可能
FASTLANE_SESSIONの生成方法
fastlane spaceship を利用します。
このspaceshipはAppstoreConnectへの認証やAppstoreConnectAPIラッパーとなっており、
deliverやdownload_dsymsの内部で利用されています。
以下のコマンドを実行すると、
パスワードの入力や確認コードの入力が求められます。
fastlane spaceauth -u user@email.com
認証に成功すると、~/.fastlane/user@email.com/cookie
にクッキーが保存されます。
このファイルの内容を環境変数 FASTLANE_SESSION
として利用することができます。
AppStoreConnect API Keyの発行方法
-
AppStoreConnectのユーザーページにアクセスし
APIキーを生成 ボタンをクリックします。
-
APIキーファイル、IssuerID、KeyIDの3つを利用することでAPIを利用可能です。
fastlaneでの利用
まとめ
- 2ファクタ認証を回避するには2つの方法がある
- Sessionを利用する
- メリット
- fastlaneのすべての機能が利用できる
- デメリット
- 月に1度、セッションを更新しなければならない
- メリット
- AppStoreConnect APIを利用する
- メリット
- 恒久的に2ファクタ認証を回避できる
- デメリット
- fastlaneのすべての機能が利用できない
- メリット