21
16

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 3 years have passed since last update.

アプリ申請自動化とAppleID2ファクタ認証

Last updated at Posted at 2020-03-28

はじめに

2019年にAppleDeveloperProgramのAppleIDは2ファクタ認証が必須となりました。(AccountHolderというもっとも権限を持つアカウントのみ)

この2ファクタ認証が有効になることにより、
CIサービスを用いたアプリ申請自動化にどのような影響が出るのか
またその回避策を改めてまとめた記事です。

この記事はfastlaneを中心に情報をまとめます。

2ファクタ認証 OFFが最もシンプル

はじめに述べてしまいますが、
もっともシンプルな解決策は2ファクタ認証を有効化していないアカウントを用意することです。
運用上、それが難しい方がこの記事でなんらかの解決策を見出して頂けると嬉しいです。

前提情報

アプリ申請の手順

今回はアプリ申請に関わる手順を以下のものとします。

  1. 証明書とProvisioningProfileを取得または作成
  2. ipaファイルをAppstoreConnectにアップロード
  3. ストア情報のアップロード (説明文やスクショ等)
  4. 再コンパイルの完了を待つ
  5. アプリ審査提出
  6. 再コンパイル後のdSYMをダウンロード
  7. 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の生成方法

  1. Appleアカウントの管理にアクセス
  2. セキュリティ項目のパスワード生成をクリック
スクリーンショット 2020-03-28 10.51.08.png 3. 任意の名前をつける スクリーンショット 2020-03-28 10.51.17.png
  1. 得られるパスワードが FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD として利用可能
スクリーンショット 2020-03-28 10.51.27.png

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の発行方法

  1. AppStoreConnectのユーザーページにアクセスし
    APIキーを生成 ボタンをクリックします。
    スクリーンショット 2020-12-16 12.50.44.png

  2. 任意の名前をつけ、アクセス権を決定します。 (Deliverに利用するのであればApp Manager以上を付与)
    スクリーンショット 2020-12-16 12.51.16.png

  3. APIキーファイル、IssuerID、KeyIDの3つを利用することでAPIを利用可能です。
    fastlaneでの利用
    スクリーンショット 2020-12-16 12.51.31.png

まとめ

  • 2ファクタ認証を回避するには2つの方法がある
  1. Sessionを利用する
    • メリット
      • fastlaneのすべての機能が利用できる
    • デメリット
      • 月に1度、セッションを更新しなければならない
  2. AppStoreConnect APIを利用する
    • メリット
      • 恒久的に2ファクタ認証を回避できる
    • デメリット
      • fastlaneのすべての機能が利用できない
21
16
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
21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?