# EAS Submit iOSでApp Store公開

> EAS SubmitはiOSビルドをApp Store Connectに送り、TestFlightに届けます。審査提出は手動です。

元のページ：[EAS Submit iOSでApp Store公開](https://devoria.fr/ja/blog/eas-submit-ios-app-store)
著者：[Mehdi Azizi](https://devoria.fr/ja/mehdi-azizi)
公開日：2026-10-25
内容の最終更新：2026-10-25


`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送信に関するドキュメント](https://docs.expo.dev/submit/ios/)（2026年10月25日に再確認）に沿っています。Macを持っていない場合の全体の流れは[MacなしでiOSアプリを公開する方法](https://devoria.fr/ja/blog/publish-ios-app-without-mac-expo-eas)にまとめています。ここでは送信に絞って解説します。

## 最初のコマンドの前に必要なもの

Expoは前提条件を3つ挙げています。

- **有料のApple Developerアカウント。** 料金と登録方法は[Apple Developerアカウント](https://devoria.fr/ja/blog/apple-developer-account-price)にあります。
- **`ios.bundleIdentifier` に設定するバンドルID。** [Expoの設定リファレンス](https://docs.expo.dev/versions/latest/config/app/)によると、IDは自分で決めてかまいませんが、App Store上で一意である必要があります。
- **EAS CLIのインストール**と、Expoアカウントでの `eas login`。

さらに、署名済みのプロダクションビルドも必要です。iOSの証明書とプロビジョニングプロファイルで説明しているとおり、EAS Buildが管理してくれる証明書とプロファイルを使ってビルドを作ります。

### App Store Connectのアプリ登録：自分で作るか、EASに任せるか

EAS Submitは、App Store Connectに存在するアプリに対してバイナリを送信します。

**自分で作成できます。** [Appleのヘルプ](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app)ではNew Appウィンドウの内容として、プラットフォーム、名前、プライマリ言語、バンドルID、SKU、ユーザーアクセスが説明されています。Account Holder、Admin、App Managerのいずれかのロールが必要です。

**最初の送信時にEASに作らせることもできます。** [ExpoのTestFlightに関するページ](https://docs.expo.dev/submit/testflight/)によると、最初のビルドを送信したときに `eas submit` がアプリ登録を作成します。[eas.jsonのリファレンス](https://docs.expo.dev/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は](https://developer.apple.com/support/authentication/)App Store Connectの全ユーザーにこれを必須としていて、ログインを人が承認しなければなりません。`EXPO_APPLE_APP_SPECIFIC_PASSWORD` に渡すApp用パスワードならこの手順を回避できますが、[Expoはこれを](https://github.com/expo/fyi/blob/main/apple-app-specific-password.md)、デフォルトかつ推奨の方法である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のガイド](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md)ではキーにAdminロールを付けています。

後者の場合、有効なキーの一覧に表示されるKey IDと、[Integrationsページの上部](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests)にあるIssuer IDを控えておきます。何より `.p8` ファイルを保管してください。[ダウンロードは1回しかできず](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api)、Apple側にはコピーが残りません。

> Appleによると、Adminキーはアカウントのユーザーを作成・削除できます。Appleは、キーを絶対にコードリポジトリに置かないよう求めています。

## コピーして使える最小限のeas.json

値はすべてダミーです。自分の値に置き換えてください。

```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はこのリモート方式を推奨しています](https://docs.expo.dev/build-reference/app-versions/)。
- **`ascAppId`**：アプリの登録番号です。これがないと非対話モードは失敗します。
- **`appleTeamId`**：Apple Developerのチームの識別子です。
- **`ascApiKeyPath`、`ascApiKeyIssuerId`、`ascApiKeyId`**：APIキーです。3つとも環境変数を使えます。`keys` フォルダは `.gitignore` に追加してください。

`appleId` フィールドはApple IDでログインする場合にしか使いません。EASがすでにキーを管理しているなら、`ascApiKey` の3つのフィールドも削除します。10月25日に確認したところ、僕の3つのアプリでは、プロダクションの送信プロファイルにあるのは `ascAppId` だけで、Solysのみ `appleTeamId` も入っています。ファイルにキーは一切ありません。

## ビルドして、送信する

```bash
eas build --platform ios --profile production
eas submit --platform ios
```

オプションなしだと、`eas submit` は送信するビルドを選ばせ、初回はApple IDを聞いてきます。`production` という送信プロファイルがあれば、それがデフォルトで使われます。選択を省くオプションは[EAS CLIのリファレンス](https://docs.expo.dev/eas/cli/)に載っています。

| オプション       | 内容                         |
| ---------------- | ---------------------------- |
| `--latest`       | 最新のiOSビルドを送信        |
| `--id`           | 特定のEASビルドを送信        |
| `--path`         | ローカルの.ipaファイルを送信 |
| `--url`          | オンラインのアーカイブを送信 |
| `--groups`       | 内部グループに追加           |
| `--what-to-test` | 「What to test」を入力       |

一気に進めたいなら、ビルドコマンドに `--auto-submit` を付けます。[Expoの自動送信のページ](https://docs.expo.dev/build/automate-submissions/)によると、完了したビルドは、ビルドプロファイルと同じ名前の送信プロファイルでEAS Submitに渡されます。別のプロファイルを使うなら `--auto-submit-with-profile=name` です。**ビルドが向かうのはTestFlightで、審査ではありません。**

CIでは `--non-interactive` と `EXPO_TOKEN` トークンを追加します。この場合コマンドは何も質問できないので、プロファイルに `ascAppId` が必要です。APIキーも必要で、EASがアプリに紐付けたもの、または `ascApiKey` の3フィールドに書いた自分のキーを使います。

## 送信後に起こること

**1. Appleがビルドを処理します。** App Store Connectに表示される前にこの処理を通る必要があり、終わると[Appleからメールが届きます](https://developer.apple.com/help/app-store-connect/manage-builds/upload-builds)。Expoによると、TestFlightで見られるまで通常10〜15分です。

**2. 輸出コンプライアンス。** Missing Complianceというステータスは、暗号化に関する申告が足りないという意味です。Info.plistで回答済みでない限り、App Store Connectは新しいバージョンのたびにこの質問をしてきます。Expoでは、キーは `ios.config.usesNonExemptEncryption` です。

```json
{
  "expo": {
    "ios": {
      "config": {
        "usesNonExemptEncryption": false
      }
    }
  }
}
```

[Apple](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations)によると、ライブラリを含めてアプリが暗号化をまったく使わないか、免除対象の暗号化だけを使う場合は `false` で問題ありません。URLSessionによるHTTPSのようなシステムの暗号化は、通常は免除対象です。**`false` と申告するのは、自分のアプリで本当にそうである場合だけにしてください。申告には責任が伴います。** Info.plistの他のキーと同じく、反映には新しいビルドが必要です。

**3. TestFlight。** [Appleによると](https://developer.apple.com/help/app-store-connect/reference/app-build-statuses)、Ready to Submitのステータスになると、ビルドは内部テスターに配布したり、外部テスター向けのベータ審査に出したり、App Store審査に提出したりできます。プロファイルの `groups` フィールドを使うと内部グループに追加されます。詳しくは[TestFlightでアプリをテストする](https://devoria.fr/ja/blog/testflight-iphone-app-beta-testing)にまとめています。

## 送信は審査への提出ではない

[Expoも書いているとおり](https://docs.expo.dev/submit/introduction/)、TestFlightのビルドがApp Storeに自動で公開されることはありません。EAS Submitはストアの掲載情報もスクリーンショットも入力してくれません。App Store Connectでの作業が4つ残っています。[審査への提出に関するAppleのヘルプ](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app)に説明があります。

1. **バージョンの必須メタデータを入力します。**
2. **バージョンのBuildセクションでビルドを選びます。**
3. **「Add for Review」をクリックします。** バージョンはReady for Reviewになりますが、まだ審査には送られていません。
4. **「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](https://devoria.fr/ja/blog/itms-90683-missing-purpose-string-expo)、[ExpoでのITMS-91053](https://devoria.fr/ja/blog/itms-91053-missing-api-declaration-expo)、ITMS-90725。

引用符付きの2つのメッセージはEASから出るもので、EASの設定で直せます。Missing ComplianceはApp Store Connectで質問に答えても解決できます。**それ以外の行はすべてバイナリの修正が必要です。ビルドし直して、もう一度送信してください。** リモートアップデートではInfo.plistもマニフェストも番号も変わりません。

## 最初のアプリを迷わず送信するために

コマンドは1つのステップにすぎません。[iOS Kit](https://devoria.fr/ja/kits/ios)は、サブスクリプションも含めた僕のアプリのスターターコードから始めて、App Storeまでの4つのステップを自分のペースで進められます。

初めてのリリースを準備しているなら、[無料の診断を受けてください](https://devoria.fr/ja/diagnostic)。本当に何がつまずきの原因になっているかがわかり、僕のApple審査リジェクト対策チェックリストも届きます。掲載情報、スクリーンショット、審査通過については、[App Storeにアプリを公開する](https://devoria.fr/ja/expertise/publish-app-on-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のままなら、暗号化に関する質問に答え、次回以降のビルドのために設定ファイルでも申告しておきましょう。


## あなたのプロジェクト

[Apple Review Kit](https://devoria.fr/ja/kits/review-apple)：僕が使っているApp Store審査チェックリスト、修正済みのリジェクト事例、審査担当者へのメモ、アプリを確認する2つのClaude Codeスキル。29 €。

[iOS Kit](https://devoria.fr/ja/kits/ios)：Claude CodeでiPhoneアプリを作りましょう。僕のアプリのStarter Code、作業を確認するスキル、Apple Review Kit、App Store Screenshots Kit、ASO Kit付き。129,99 €。
