iOSアプリ配布やmatchで2FA対策は不要?fastlaneがAppStoreConnect APIに対応しました!
fastlaneを利用してのAppStoreConnectへの配布には、2FA(2段階認証)の対策のためにApp用シークレットを用意したりといろいろ面倒でした。しかし、昨年AppStoreConnect APIがリリースされ、ついにfastlaneがこのAPIをサポートしました🎉(正確には2.162.0でmatchのサポートが入ったのでかなり使いやすくなったという感じです)
fastlaneチームの方々にはいつも本当に感謝しかありません。⭐を送るなどして応援しましょう!
App Store Connect APIを使うと何が嬉しいのか
👆こちらのページを見てみましょう。
Benefitとして以下の4つが記載されています。
- No 2FA needed
- Better performance
- Documented API
- Increased reliability
2FAが不要になり、パフォーマンスがよく、ドキュメントに書かれているAPIを使い、信頼性が増します。いい事ずくめですね!
APIの秘密鍵を発行する
APIを利用するには秘密鍵が必要になります。
👇 まずAppStore Connectを開き、ユーザーとアクセスのキーを開きます。初期状態ではAPI利用のリクエストを送信する必要があります。
👇 「アクセスをリクエスト」を押すと、ポップアップが表示されるので、目を通した上でチェックを入れて提出を押します。これはすぐに承認されるようです。
👇 APIキーを生成を押します。
👇 名前は何でもいいでしょう。役割は、matchを使うのであればAppManagerかAdminである必要があります。
👇 ここで表示される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
おわりに
これからはこの形が主流になっていくでしょう。早めに対応しておきたいところですね!
Discussion
ありがとうございます。困っていたので助かりました。
綺麗にまとまっていて、とても参考になりました!ありがとうございます。
こちらは好みの問題もあるかもしれませんが、返り値を使わない形で
app_store_connect_api_key
を実行すると、以降のactionではapi_key
が自動設定されるようです。参考までに、共有させていただきます。
参考: Use the shared value in lane context
おおーこれは便利ですね!これを使うほうがよさそうです、ありがとうございます!