EAS Submit iOSでApp Store公開
著者:Mehdi Azizi
公開・8 分
EAS SubmitはiOSビルドをApp Store Connectに送り、TestFlightに届けます。審査提出は手動です。
eas submit --platform ios はiOSビルドをApp Store Connectに送信し、Apple側の処理が終わるとTestFlightに表示されます。このコマンドはアプリをAppleの審査に提出するわけではありません。ビルドの選択と審査への提出は、App Store Connectで自分で行う必要があります。 自動化するには、アプリの登録番号(ascAppId)とApp Store Connect APIキーが必要です。
僕はSolys、TradaZen、NoleraなどのiOSアプリを、Expo、EAS Build、EAS Submitで公開しています。このガイドはExpoのiOS送信に関するドキュメント(2026年10月25日に再確認)に沿っています。Macを持っていない場合の全体の流れはMacなしでiOSアプリを公開する方法にまとめています。ここでは送信に絞って解説します。
最初のコマンドの前に必要なもの
Expoは前提条件を3つ挙げています。
- 有料のApple Developerアカウント。 料金と登録方法はApple Developerアカウントにあります。
ios.bundleIdentifierに設定するバンドルID。 Expoの設定リファレンスによると、IDは自分で決めてかまいませんが、App Store上で一意である必要があります。- EAS CLIのインストールと、Expoアカウントでの
eas login。
さらに、署名済みのプロダクションビルドも必要です。iOSの証明書とプロビジョニングプロファイルで説明しているとおり、EAS Buildが管理してくれる証明書とプロファイルを使ってビルドを作ります。
App Store Connectのアプリ登録:自分で作るか、EASに任せるか
EAS Submitは、App Store Connectに存在するアプリに対してバイナリを送信します。
自分で作成できます。 AppleのヘルプではNew Appウィンドウの内容として、プラットフォーム、名前、プライマリ言語、バンドルID、SKU、ユーザーアクセスが説明されています。Account Holder、Admin、App Managerのいずれかのロールが必要です。
最初の送信時にEASに作らせることもできます。 ExpoのTestFlightに関するページによると、最初のビルドを送信したときに eas submit がアプリ登録を作成します。eas.jsonのリファレンスによれば、ascAppId を指定するとこのステップは省略されます。名前は appName、なければ設定ファイルの name が使われます。プライマリ言語は language で、デフォルトは en-US です。最初にフランス語でリリースするなら、最初の送信の前に language を設定してください。
その後、アプリの番号を ascAppId に書き写します。場所はExpoが説明しています。App Store Connectでアプリを開き、App Informationへ進みます。General Informationの下にあるApple IDの欄です。これは数字で、バンドルIDではありません。
Apple IDではなくAPIキーを使う理由
EAS SubmitはApple ID、またはApp Store Connect APIキーでAppleに接続します。
Apple IDだと2ファクタ認証が壁になります。AppleはApp Store Connectの全ユーザーにこれを必須としていて、ログインを人が承認しなければなりません。EXPO_APPLE_APP_SPECIFIC_PASSWORD に渡すApp用パスワードならこの手順を回避できますが、Expoはこれを、デフォルトかつ推奨の方法であるAPIキーより安全性が低いとしています。APIキーなら操作なしで認証できるので、送信を自動化できます。
入手方法は2つあります。
- EASに管理させる。
eas credentials --platform iosを実行し、productionプロファイルを選び、Appleアカウントにログインして「App Store Connect: Manage your API Key」を選びます。 - 自分のキーを用意する。 App Store ConnectでUsers and Access、Integrationsタブ、App Store Connect API、Team Keys、Generate API Keyの順に進みます。Adminアカウントが必要で、ExpoのガイドではキーにAdminロールを付けています。
後者の場合、有効なキーの一覧に表示されるKey IDと、Integrationsページの上部にあるIssuer IDを控えておきます。何より .p8 ファイルを保管してください。ダウンロードは1回しかできず、Apple側にはコピーが残りません。
Appleによると、Adminキーはアカウントのユーザーを作成・削除できます。Appleは、キーを絶対にコードリポジトリに置かないよう求めています。
コピーして使える最小限のeas.json
値はすべてダミーです。自分の値に置き換えてください。
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {
"ios": {
"ascAppId": "1234567890",
"appleTeamId": "ABCDE12345",
"ascApiKeyPath": "./keys/AuthKey_XXXXXXXXXX.p8",
"ascApiKeyIssuerId": "your-issuer-id",
"ascApiKeyId": "XXXXXXXXXX"
}
}
}
}
appVersionSourceとautoIncrement:EASのサーバーがビルド番号を保持し、プロダクションビルドのたびに上げてくれます。EAS CLI 12以降、Expoはこのリモート方式を推奨しています。ascAppId:アプリの登録番号です。これがないと非対話モードは失敗します。appleTeamId:Apple Developerのチームの識別子です。ascApiKeyPath、ascApiKeyIssuerId、ascApiKeyId:APIキーです。3つとも環境変数を使えます。keysフォルダは.gitignoreに追加してください。
appleId フィールドはApple IDでログインする場合にしか使いません。EASがすでにキーを管理しているなら、ascApiKey の3つのフィールドも削除します。10月25日に確認したところ、僕の3つのアプリでは、プロダクションの送信プロファイルにあるのは ascAppId だけで、Solysのみ appleTeamId も入っています。ファイルにキーは一切ありません。
ビルドして、送信する
eas build --platform ios --profile production
eas submit --platform ios
オプションなしだと、eas submit は送信するビルドを選ばせ、初回はApple IDを聞いてきます。production という送信プロファイルがあれば、それがデフォルトで使われます。選択を省くオプションはEAS CLIのリファレンスに載っています。
| オプション | 内容 |
|---|---|
--latest | 最新のiOSビルドを送信 |
--id | 特定のEASビルドを送信 |
--path | ローカルの.ipaファイルを送信 |
--url | オンラインのアーカイブを送信 |
--groups | 内部グループに追加 |
--what-to-test | 「What to test」を入力 |
一気に進めたいなら、ビルドコマンドに --auto-submit を付けます。Expoの自動送信のページによると、完了したビルドは、ビルドプロファイルと同じ名前の送信プロファイルでEAS Submitに渡されます。別のプロファイルを使うなら --auto-submit-with-profile=name です。ビルドが向かうのはTestFlightで、審査ではありません。
CIでは --non-interactive と EXPO_TOKEN トークンを追加します。この場合コマンドは何も質問できないので、プロファイルに ascAppId が必要です。APIキーも必要で、EASがアプリに紐付けたもの、または ascApiKey の3フィールドに書いた自分のキーを使います。
送信後に起こること
1. Appleがビルドを処理します。 App Store Connectに表示される前にこの処理を通る必要があり、終わるとAppleからメールが届きます。Expoによると、TestFlightで見られるまで通常10〜15分です。
2. 輸出コンプライアンス。 Missing Complianceというステータスは、暗号化に関する申告が足りないという意味です。Info.plistで回答済みでない限り、App Store Connectは新しいバージョンのたびにこの質問をしてきます。Expoでは、キーは ios.config.usesNonExemptEncryption です。
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
Appleによると、ライブラリを含めてアプリが暗号化をまったく使わないか、免除対象の暗号化だけを使う場合は false で問題ありません。URLSessionによるHTTPSのようなシステムの暗号化は、通常は免除対象です。false と申告するのは、自分のアプリで本当にそうである場合だけにしてください。申告には責任が伴います。 Info.plistの他のキーと同じく、反映には新しいビルドが必要です。
3. TestFlight。 Appleによると、Ready to Submitのステータスになると、ビルドは内部テスターに配布したり、外部テスター向けのベータ審査に出したり、App Store審査に提出したりできます。プロファイルの groups フィールドを使うと内部グループに追加されます。詳しくはTestFlightでアプリをテストするにまとめています。
送信は審査への提出ではない
Expoも書いているとおり、TestFlightのビルドがApp Storeに自動で公開されることはありません。EAS Submitはストアの掲載情報もスクリーンショットも入力してくれません。App Store Connectでの作業が4つ残っています。審査への提出に関するAppleのヘルプに説明があります。
- バージョンの必須メタデータを入力します。
- バージョンのBuildセクションでビルドを選びます。
- 「Add for Review」をクリックします。 バージョンはReady for Reviewになりますが、まだ審査には送られていません。
- 「Submit for Review」をクリックします。 審査が始まるとステータスがIn Reviewになります。
よくあるエラーと対処法
| 表示されるエラー | 原因 | 対処 |
|---|---|---|
| ITMS-90189 | ビルド番号が使用済み | autoIncrement |
| ITMS-90062 または 90186 | バージョンが締め切り済み | version を上げる |
| 「Set ascAppId」 | CIで ascAppId がない | ascAppId を追加 |
| 「API Keys cannot」 | 紐付いたキーがない | eas credentials |
| ITMS-90683 | 用途説明の文言がない | ios.infoPlist |
| ITMS-91053 | マニフェストが不完全 | ios.privacyManifests |
| ITMS-90725 | iOS SDKが古すぎる | Expo SDKを上げる |
| Missing Compliance | 暗号化が未申告 | usesNonExemptEncryption |
Expoによると、使用済みのビルド番号は送信時に拒否される典型的な原因です。詳しくはビルド番号とバージョンにあります。3つのエラーには個別のガイドがあります:ExpoでのITMS-90683、ExpoでのITMS-91053、ITMS-90725。
引用符付きの2つのメッセージはEASから出るもので、EASの設定で直せます。Missing ComplianceはApp Store Connectで質問に答えても解決できます。それ以外の行はすべてバイナリの修正が必要です。ビルドし直して、もう一度送信してください。 リモートアップデートではInfo.plistもマニフェストも番号も変わりません。
最初のアプリを迷わず送信するために
コマンドは1つのステップにすぎません。iOS Kitは、サブスクリプションも含めた僕のアプリのスターターコードから始めて、App Storeまでの4つのステップを自分のペースで進められます。
初めてのリリースを準備しているなら、無料の診断を受けてください。本当に何がつまずきの原因になっているかがわかり、僕のApple審査リジェクト対策チェックリストも届きます。掲載情報、スクリーンショット、審査通過については、App Storeにアプリを公開するのページで各ステップを解説しています。
よくある質問
ExpoアプリをApp Storeに公開するには?
EAS Buildでプロダクションビルドを作り、eas submit --platform ios で送信します。Appleの処理が終わるとTestFlightに表示されます。その後App Store Connectで掲載情報を入力し、バージョンでそのビルドを選び、「Add for Review」と「Submit for Review」をクリックします。
EAS SubmitはアプリをAppleの審査に提出しますか?
いいえ。EAS SubmitはバイナリをApp Store Connectに送るだけで、ビルドはTestFlightに届きます。審査への提出は、掲載情報を入力してビルドを選んだあと、App Store Connectで手動で行います。
アプリのascAppIdはどこにありますか?
App Store Connectでアプリを開き、App Informationへ進みます。General Informationの下にあるApple IDの欄です。数字なので、バンドルIDと混同しないでください。
eas submitを使うにはApple IDが必要ですか?
初回はコマンドがApple IDを聞いてきます。その後は、プロファイルに ascAppId があり、App Store Connect APIキーがあれば、CIでも操作なしで実行できます。APIキーはExpoのデフォルトかつ推奨の方法です。
TestFlightにビルドが表示されるまでどのくらいかかりますか?
Expoによると、Apple側の処理は通常10〜15分で、終わるとメールが届きます。ビルドがMissing Complianceのままなら、暗号化に関する質問に答え、次回以降のビルドのために設定ファイルでも申告しておきましょう。