【初心者】気分記録アプリ、公開への道⑦|Expo Goのあと、iOSアプリを審査に出すまでの全手順

Expo Goで実機に表示できるところまでは、なんとかたどり着きました。

でもそこから先、「で、これをどうやってApp Storeに出すの?」がまったく分かりませんでした。

調べても、Xcodeでビルドする記事とEASを使う記事が混ざっていて、自分がどのルートに乗っているのかも分からない状態です。

今回は、Expo Goで一通り実機確認を終えたあとから、審査に提出するまでに私がやったことを、順番どおりに残しておきます。

ちなみに私はXcodeもインストールしましたが、この流れの中では出番がありませんでした。ビルドはすべてクラウド(EAS Build)にやってもらっています。

Expo Goで実機に表示するまでの話は、こちらの記事に書いています。

【初心者】気分記録アプリ、公開への道②|Expo で React Native アプリを作り、iPhone 実機に表示するまで
今回はAIに助けてもらって、Expoのファイルの作成から表示までの流れを書いていこうと思います。2026年8月、アプリ開発が初めての状態から Expo でプロジェクトを立ち上げ、自分の iPhone に画面を出すまでの記録です。公式手順どお…

先に全体像を出しておきます

細かい話に入る前に、全体の流れです。
これが最初に分かっていたら、だいぶ気が楽だったと思います。

【準備】
Apple Developer Program に登録
→ 設定ファイルを書く(app.json / eas.json)
→ EAS にログイン

【1回目のビルド】
ビルドコマンドを実行
→ Apple 関連の質問に答える(ここが1回目だけ長い)
→ クラウドでビルド(10〜20分)

【App Store Connect の準備】
アプリを新規追加(アプリ名・Bundle ID・SKU)
→ アップロード(eas submit)
→ Apple の処理待ち(5〜10分)

【実機で確認】
TestFlight の内部テストグループに自分を追加
→ iPhone に TestFlight アプリを入れる
→ 実機で確認 【ここをぐるぐる回す】← 私は10周しました
不具合を見つける
→ 直す
→ ビルド+提出
→ また実機で確認

【審査へ】
App Store Connect に情報を入力
→ 「審査へ提出」
→ 審査待ち

ポイントは、質問攻めにあうのは1回目のビルドだけということです。
2回目以降はコマンド1本で終わるので、最初の1周さえ越えれば急に楽になります。

【準備】登録と設定ファイル

Apple Developer Program に登録する

App Storeにアプリを出すには、Apple Developer Program への登録が必須です。

年会費は99ドルで、私の場合の請求額は12,980円でした。
ドル建てなので、日本円の請求額は為替で変わります。

買い切りではなく毎年かかる費用なので、そこだけは覚悟がいります。

設定ファイルを書く(app.json / eas.json)

ここが、私が一番「Xcodeいらないの?」と混乱したところです。

Expoで作っている場合、アプリ名・アイコン・バージョン・Bundle IDといった情報は、Xcodeの画面ではなく設定ファイルに書きます。

app.jsonにアプリそのものの情報を、eas.jsonにビルドの設定を書く、という分担です。

app.json … アプリ名、アイコン、バージョン、Bundle ID など
eas.json … ビルドの種類(development / preview / production)の設定

Bundle IDは com.example.myapp のような形式で、あとから変えられない扱いになるものです。
自分のドメインを逆にした形にしておくのが一般的なようです。

日本語表記になるようにファイルを追加

日本語表記になるようなファイルの書き方をしていないと、いざリリース後に言語が英語になってしまっていることに気づくことになります。

ファイルの記載を確認しておいた方が、再審査をしなくてすみます。

日本語表記になるようにファイルが書かれているかチェックしておきましょう。

ファイルの書き方については別記事をご参照ください!

【iOSアプリ】アプリ審査通ったけど、App Storeの言語が英語のままだった
初めてのiOSアプリが審査を通り、無事に公開されました。喜んでストアページを眺めていたら、 「情報」セクションの言語が「英語」になっていました。中身は全部日本語なのに・・・原因を突き止めて直すまでの記録と、次に作るアプリで同じ失敗をしないた…

EAS にログインする

ビルドをクラウドでやってもらうために、EASにログインします。

npx eas-cli login

ここで使うのはExpoのアカウントで、Appleのアカウントとは別物です。
私はここでも一瞬混乱しました。

【1回目のビルド】質問攻めにあうのはここだけ

ビルドコマンドを実行する

ターミナルで次のコマンドを打ちます。

npx eas-cli build --profile production --platform ios

この1回目だけは、自分のターミナルで対話しながら進める必要があります。

Appleまわりの質問に答える

コマンドを打つと、Appleのアカウントでのログインを求められ、そのあと証明書やプロビジョニングプロファイルについて聞かれます。

証明書もプロビジョニングプロファイルも、名前だけ見ると身構えますが、「EASに作ってもらいますか?」と聞かれるので、基本はYesで進みます。

プッシュ通知を使わないアプリなら、「プッシュ通知のキーを作りますか?」はNoで大丈夫でした。

私が実際に経験した内容

(1)Apple IDとパスワードの入力を求められます(Apple Developer Programに登録済みのアカウント)

(2)2段階認証コードの入力(お使いの端末に届きます)

 →できなかった

  • 最も多い原因
    ・同意待ちの規約がある
    Apple Developer Program License Agreement(利用規約)が更新されていて、それに同意しないとAPI経由のログインが弾かれることがあります。
    ブラウザで https://appstoreconnect.apple.com にアクセスし、その同じApple IDでログイン
    「Agreements, Tax, and Banking」などに新しい規約の同意待ちがないか確認し、あれば同意する
    同様に https://developer.apple.com/account にもログインし、警告バナーが出ていないか確認
  • その他考えられる原因
    ・表示されている Team maple project (U4G3K2M3F7) が意図したチームと違う(複数のApple Developerチームに所属している場合)
    ・2段階認証コードの入力に時間がかかりすぎて期限切れになった(コードは数分で失効します)
    ・Apple側の一時的な問題(少し待ってリトライすると直ることもあります)
  • まず1〜3を確認してから、もう一度 npx eas-cli build –profile production –platform ios を実行

 →設定を変えず、もう一回やったらできた

(3)Generate a new Apple Distribution Certificate? … yes
 初回の本番ビルドなので、EASが自動でApple Distribution証明書とプロビジョニングプロファイルをApple Developer Portal上に作成し、EASのサーバーに保存してくれる。
 一度作成されれば、以降のビルドではこの手順は省略され、保存された証明書が再利用される。

(4)「Bundle Identifier com.fanelab.kibun 用の証明書・プロビジョニングプロファイルを新規作成しますか?」のような質問には基本的に Yes(EASにお任せ) を選べば自動生成される。

(5)「Would you like to set up Push Notifications for your project?」が出たら、No

(6)ビルドがキューに入ったら完了までしばらく待つ(クラウド側でビルドされます)

ここで答えた内容は保存されます。

2回目以降のビルドでは同じ質問は出ません。

長く感じるのは最初の1回だけです。

クラウドでビルドされるのを待つ

質問が終わると、あとはクラウド側でビルドが走ります。
私の場合は10〜20分ほどで終わりました。

ターミナルは閉じてしまっても、ビルドの進み具合はExpoのサイト側で確認できます。

【App Store Connect】アプリの枠を先に作っておく

アプリを新規追加する

ビルドができても、App Store Connect側に「アプリの枠」がないとアップロードできません。

App Store Connectにログインして、アプリを新規追加します。
入力するのは
・会社名(屋号)
・アプリ名
・Bundle ID(選択式、長い名前が出てきても最後が設定したBundle IDになっていればそれを選択)
・SKU(自分の管理用のIDなので、重複しない文字列であれば自由に決められる)
・ユーザーアクセス(App Store Connect内で、どのチームメンバーがこのアプリを見たり管理できるかを制限する設定)
などです。

登録した後に出てきたページのアイコンは、自分が設定したアイコンじゃなくても問題はありません。

App Store Connectがアップロードしたビルドの処理が完了するまで表示する一時的なプレースホルダーアイコンです。Appleのサーバー側でipaの処理が終わる(通常15分~1時間程度)と切り替わります。

ビルドをアップロードする

枠ができたら、できあがったビルドをアップロードします。

npx eas-cli submit --platform ios --latest

--latestを付けると、直近のビルドが対象になります。
Apple IDの認証を再度求められる場合があります(先ほどと同じログインでOK)

Generate a new App Store Connect API Key? … yes

これはApp Store Connectにビルドをアップロードするための認証キー。
EASがApple ID経由で自動的に生成し、EASのサーバーに保存してくれます。
一度作成すれば、次回以降のeas submitはこのキーを使って認証なしでアップロードできるようになります。安全で推奨される選択肢です。

 Select role for the generated API key: › - Use arrow-keys. Return to submit.
❯   ADMIN (default)
    APP_MANAGER (least privilege for app management)

APP_MANAGER (least privilege for app management)を選択
→理由:
 eas submit が必要とするのは「アプリのビルドをアップロードする」権限だけです。ADMINは会員管理や財務情報など不要な権限まで含む最上位権限なので、必要最小限の APP_MANAGER(アプリ管理に絞った権限)を選ぶ方が安全です。

この後時間がかかります。2〜3時間かかりました。

【TestFlight】実機で確認する

ここからは、実際のiPhoneでアプリを動かして確認する段階です。
Expo Goで見ていたものとは違い、本番と同じ形のアプリを確認できます。

TestFlightタブでビルドを確認

App Store Connectの上のリンクの「TestFlight」のところで準備完了のような状態になっているか確認

TestFlightタブの見方

App Store Connect → アプリを選ぶ → 上部の TestFlight タブ。

見るべきものは2つだけです。

1. ビルドの一覧 アップロードしたビルドが番号順(13, 12, 11…)に並びます。状態がこう変わります。

  • 処理中 — Appleが検査中。5〜10分待つ
  • テストの準備完了 — インストールできる
  • 「輸出コンプライアンスがありません」と出たら質問に答える(暗号化を使っていないので「いいえ」)

2. 内部テスト(Internal Testing)
 左側のメニューにあります(後述します)

内部テストグループに自分を追加する

今回は、「Team (Expo)」 というグループが、すでに自動作成されていました。(EASが提出時に自動生成したもの)

  • 「Internal Testing」グループがなければ作成
  • テスターとして自分のApple ID(メールアドレス)を追加

追加すると招待メールが届き、iPhoneのTestFlightアプリにアプリが出てきます。

新しいビルドを提出すると、TestFlightアプリに自動で「アップデート」として出てきます。毎回テスターを追加し直す必要はありません。

内部テスターは最大100人まで登録でき、Appleの審査を通さずに配信できます。

iPhoneにTestFlightアプリを入れる

確認に使うiPhone側には、App Storeから「TestFlight」というアプリを入れておきます。

(1)アプリを開くと認証コードを求められるため、招待メールに書いてあるコードを入力。

(2)すると自分が作成したアプリが出てくる。

(3)TestFlightアプリからインストールして、実機で動かせるようになる。

(4)今後もビルドした後は、このアプリを開いて「アップデート」を押してから、自分が作成したアプリを開いて確認する。

Expo Goでは問題なく見えていたのに、TestFlightのビルドで初めて分かる崩れや不具合があります。

私も実機で見て初めて気づいた箇所がいくつもありました。

【ここをぐるぐる回す】私は10周しました

ここからが、正直いちばん時間がかかったところです。

実機で確認して、不具合を見つけて、直して、またビルドして、また確認する。
これを繰り返します。

Expo Goでは見つからなかった問題が出てきます。

それも修正が難しくて私は結局10周しました・・・

Expo Go で確認できることとできないこと

Expo Go で確認できること

  • 画面のレイアウト、遷移、状態管理、DB の読み書き
  • キーボードの被り、スクロール、グラフの描画
  • ローカル通知の予約そのもの(配信は届く)

Expo Go では確認できないこと

  • アプリ名・アイコン・スプラッシュ — config plugin が適用されないため
  • 通知タップからの起動経路 — Expo Go 経由の起動になり、条件が変わる
  • ネイティブへのパッチ — 焼き込み済みのため差し替え不可
  • リリースビルド固有の挙動

2回目以降はコマンド1本で済む

2周目からは、ビルドと提出をまとめてくれるオプションが使えます。

npx eas-cli build --platform ios --profile production --auto-submit

--auto-submitを付けると、ビルドが終わったあと、そのままApp Store Connectへのアップロードまでやってくれます。

1回目に答えた内容は保存されているので、質問も出ません。
コマンドを打って放置しておくと、しばらくしてTestFlightに新しいビルド番号が並びます。

周回を減らすためにやったこと

1周にどうしても20〜30分(長い時は数時間)はかかるので、思いついた修正を1個ずつビルドしていくと、いつまで経っても終わりません。

私は途中から、気づいた不具合をメモに溜めておいて、まとめて直してから1回ビルドするやり方に変えました。

それでも10周かかっているので、最初から回数を見込んで予定を立てておくといいと思います。

【審査へ】App Store Connectに入力する情報

実機での確認が終わったら、審査に出すための情報を入力していきます。
ここはコードではなく、ひたすら入力作業です。

最低限必要になったのは次のものでした。

  • iOSアプリ
    • スクリーンショット
    • プロモーション用テキスト
    • 概要
    • キーワード
    • サポートURL(問い合わせページ)
    • マーケティングURL(App Storeに表示される)
    • バージョン(1.0.0など)
    • 著作権(2026 sample.)
    • ビルド(選択)
    • App Reviewに関する情報(後述)
    • App Storeバージョンのリリース
  • 一般>アプリ情報
    • 名前
    • サブタイトル
    • カテゴリ
    • コンテンツ配信権(広告など使用してなくてテキストや画像がすべて自分で作成したのだと「いいえ」)
    • 年齢制限指定(質問に答えていく)
  • App Store>アプリのプライバシー
    • プライバシーポリシーURL
    • プロダクトページのプレビュー
    • データタイプ
    • 公開を押す
  • 収益化>価格および配信状況
    • 価格表
    • 国

スクリーンショット

実機のスクリーンショットをそのまま使うこともできますが、私はFigmaで作りました。

指定されたサイズがあるので、そこだけは合わせる必要があります。

スクリーンショット画像については別の記事にしているので、気になるかたはご参照ください。

【初心者】気分記録アプリ、公開への道⑤|スクリーンショット画像作るの大変だった
こんにちは!初学者ながら、iOSアプリを公開しようとしている者です。今回はアプリ公開に欠かせないスクリーンショット画像についての話です。スクリーンショット画像とはスクリーンショット画像とは(正式名称が合っているかわからない)Apple St…

プライバシー情報とプライバシーポリシー

ここでつまずく人が多そうだと感じたのが、この2つです。

まずプライバシー情報は、アプリが何のデータを集めているかの申告です。
私のアプリは記録データを端末の中だけに保存していて外部に送っていないので、「データを収集していません」で申告しました。

もうひとつがプライバシーポリシーのURLです。
これはそのアプリ専用のページが必要になります。

私はブログの固定ページでアプリ専用のプライバシーポリシーを1枚作って、そのURLを登録しました。

ブログ全体のプライバシーポリシーを流用すると、アプリの内容と食い違ってしまいます。

「このアプリが何を保存して、何を送っていないのか」を書いたページを別に用意したほうが安全だと思います。

App Reviewに関する情報のメモ欄

簡単にしか記入しなかったらあとからApple Developer Programよりメールが届きました。

App Store Connectで以下のすべての情報を添えて返信してください。

  1. 最新のオペレーティングシステムを搭載した実機で撮影した、アプリの機能を実演する画面録画。録画はアプリの起動から始まり、主要機能における典型的なユーザーフローを示す必要があります。アプリに以下の機能がある場合は、録画に含めてください。
  2. アカウント登録、ログイン、およびアカウント削除の手順
  3. アプリ内での有料コンテンツや機能へのアクセス(購入や購読の流れを含む)
  4. ユーザー生成コンテンツ(コンテンツの報告およびブロックメカニズムを含む)
  5. 機密データやデバイス機能へのアクセスを要求するプロンプト(例:位置情報、連絡先、カメラ、アプリ追跡の透明性)
  6. アプリが審査提出前にテストされたデバイスモデルとオペレーティングシステムのリスト
  7. アプリの機能と対象ユーザーの説明(解決する問題と提供する価値を含む)
  8. アプリの主要機能の設定およびアクセス方法に関する説明(必要なログイン認証情報やサンプルファイルを含む)
  9. アプリがコア機能を提供するために使用する外部サービス、ツール、またはプラットフォームのリスト(例:データプロバイダー、認証サービス、決済処理業者、AIサービスなど)
  10. アプリの機能やコンテンツにおける地域差について説明するか、アプリがすべての地域で一貫して機能することを確認してください。
  11. アプリが高度に規制された業界で運営されている場合、または保護された第三者の素材が含まれている場合は、これらのサービスまたは保護された素材を提供する権限があることを証明する関連文書または資格情報を提供してください。

今後の提出時には、この情報をApp Store Connectのアプリ審査情報セクションの「メモ」欄に記入してください。

審査前から上記内容をApp Reviewに関する情報のメモ欄に入れておくといいと思います。

私は修正の時に、AIから

返信そのものは「App Reviewに関する情報」のメモ欄ではなく、審査担当とのやり取り画面(Resolution Center/メッセージ)から送ります。メモ欄に書いても、担当者に「返信が来た」という通知は飛ばないので、審査が止まったままになります。

と言われていたのですが、焦ってメッセージを削除してしまいました。

改めてApp Reviewに関する情報のメモ欄のところの添付ファイルに動画を入れて、上記内容を日本語+英語で入力したら通りました!

「審査へ提出」を押す

入力欄がすべて埋まると、提出のボタンが押せるようになります。

Appleの公式には、提出されたもののうち90%は24時間以内に審査されると書かれています。

ただ、実際にはもっとかかったという話も見かけるので、数日かかる前提で見ておくほうが気は楽だと思います。

私は2日くらいで審査終わりました!

やってみて分かったこと

Xcodeは開かないままここまで来られた

Expo+EAS Buildの構成なら、ビルドはクラウド側で行われます。設定は app.json と eas.json に書きます。

大変なのは1回目だけ

証明書やプロビジョニングプロファイルの質問は1回目のビルドだけで、答えた内容は保存されます。

時間を食うのは実機確認の周回

私は10周しました。まとめて直してからビルドすると回数を減らせます。

入力項目は事前に用意できる

スクリーンショット、説明文、プライバシーポリシーのページは、ビルドを回している間に作っておけます。

まとめ

Expo Goで動いたあと、審査に出すまでの流れを書きました。

始める前は、証明書やプロビジョニングプロファイルという言葉だけで身構えていましたが、実際にやってみると、質問に答えていくだけで進む部分がほとんどでした。

むしろ時間がかかったのは、実機で確認して直してまたビルドする、地味な周回のほうです。

これから同じところに立つ人が、全体像だけでも先に持っておけるように、この記事を残しておきます。



タイトルとURLをコピーしました