iOSアプリ配布やmatchで2FA対策は不要?fastlaneがAppStoreConnect APIに対応しました!

公開:2020/10/03
更新:2020/10/04
3 min読了の目安(約3100字TECH技術記事
Discuss1Likes38

fastlaneを利用してのAppStoreConnectへの配布には、2FA(2段階認証)の対策のためにApp用シークレットを用意したりといろいろ面倒でした。しかし、昨年AppStoreConnect APIがリリースされ、ついにfastlaneがこのAPIをサポートしました🎉(正確には2.162.0でmatchのサポートが入ったのでかなり使いやすくなったという感じです)

fastlaneチームの方々にはいつも本当に感謝しかありません。⭐を送るなどして応援しましょう!
https://github.com/fastlane/fastlane

App Store Connect APIを使うと何が嬉しいのか

https://docs.fastlane.tools/app-store-connect-api/
👆こちらのページを見てみましょう。

Benefitとして以下の4つが記載されています。

  • No 2FA needed
  • Better performance
  • Documented API
  • Increased reliability

2FAが不要になり、パフォーマンスがよく、ドキュメントに書かれているAPIを使い、信頼性が増します。いい事ずくめですね!

APIの秘密鍵を発行する

APIを利用するには秘密鍵が必要になります。

この操作はAccount Holderで行う必要があります。

👇 まずAppStore Connectを開き、ユーザーとアクセスのキーを開きます。初期状態ではAPI利用のリクエストを送信する必要があります。

👇 「アクセスをリクエスト」を押すと、ポップアップが表示されるので、目を通した上でチェックを入れて提出を押します。これはすぐに承認されるようです。

👇 APIキーを生成を押します。

👇 名前は何でもいいでしょう。役割は、matchを使うのであればAppManagerかAdminである必要があります。

ここで生成される.p8ファイルは二度と同じものを手に入れることができないので気をつけて保管してください。

👇 ここで表示されるIssuerIDとキーIDもfastlaneで使用します。

fastlaneに組み込む

さっそくFastfileを編集していきましょう。matchを使いつつ、審査に向けてAppStoreConnectへアプリバイナリをアップロードします。app_store_connect_api_keyというactionを使います。詳細はこちらをご覧ください。

今回はCI/CD環境で実行することも踏まえ、ファイルとして読み込むのではなく文字列として秘密鍵を読むこむようにしました。GitHub ActionsやBitriseの場合でも、コンソールなどから環境変数を設定すればそのまま活用できるかと思います。

default_platform(:ios)

platform :ios do
  desc "Push a new release build to the App Store"
  lane :release do
    # api_keyの生成
    # ローカルであれば.env.defaultにASC_KEY_ID=your_keyのように設定してください。
    api_key = app_store_connect_api_key(
      key_id: ENV['ASC_KEY_ID'], # your key id
      issuer_id: ENV['ASC_ISSUER_ID'], # your issuer id
      key_content: ENV['ASC_KEY_CONTENT'], # your secret key body
      # ex) key_content: '-----BEGIN PRIVATE KEY-----\nfoobar\n-----END PRIVATE KEY-----'
    )

    match(
      api_key: api_key, # pass api_key
      app_identifier: 'YOUR APP BUNDLE ID',
      type: "appstore",
      readonly: is_ci
    )

    build_app(
      scheme: "YOUR_SCHEME",
      export_options: {
        method: "app-store",
      },
    )

    upload_to_app_store(
      api_key: api_key, # pass api_key
      skip_metadata: true,
      skip_screenshots: true,
      precheck_include_in_app_purchases: false, # 2.162.0ではfalseにしなければならない
    )
  end
end

2.162.0では、precheck_include_in_app_purchasesをfalseにする必要があります。ここを指定していないと次のようなエラーが出てしまいます。今後対応されるのでしょう。

[!] Precheck cannot check In-app purchases with the App Store Connect API Key (yet). Exclude In-app purchases from precheck or use Apple ID login

これでFastfileの設定は完了です(もし足りていない部分があれば教えて下さい)。以下を叩けば2FAなしでAppStoreへのアップロードが完了するはずです!

fastlane release

おわりに

これからはこの形が主流になっていくでしょう。早めに対応しておきたいところですね!