メインコンテンツにジャンプ

アプリをApp Storeにアップロードする11ステップ

アプリをApp StoreとGoogle Playにアップロードする11ステップとCapacitor

記事のクレジット

マーティン・ドナディュー

ライター

Valeria

レビュアー

ジョーダン

エディター

App StoreにWebアプリを11ステップで配置する方法

App StoreとGoogle PlayにWebアプリを配置するには、Capacitorで構築されたWebアプリをネイティブプロジェクトにラップし、ネイティブ機能を追加し、AppleとGoogleの開発者アカウントを作成し、iOSとAndroidバイナリを署名してビルドし、実際のユーザーでテストし、ストアのリストリングを準備し、レビューに提出します。既存のHTML、CSS、JavaScriptはネイティブのWebView内で実行されるため、再実装は必要ありません。

以下は、待たないようにするために順序を避けずに提示された11ステップです。Capacitor 8と10月2026年のストアのルールのコマンドが含まれます。

必要なもの

  • 静的ファイルにビルドされるWebアプリ (React、Vue、Angular、Svelte、Next.jsの静的エクスポート、Nuxtの生成、またはLovableまたはBoltなどのAIビルダーで作成されたアプリ)。
  • Node.js 22以上 (Capacitor 8の要件) とBunまたは別のパッケージマネージャー。
  • Android StudioでAndroidビルド。
  • macOSでXcode 26またはクラウドビルドサービスでiOSビルド。
  • 99 ドルあたり 1 年で Apple、25 ドルあたりの 1 回で Google。

現実的なタイムライン

フェーズ 通常の時間 並行して実行できる?
開発者アカウントの登録 1 人あたり 1 時間から、組織に新しい D-U-N-S の場合 2 週間 はい、最初の日から始めます
Capacitor のセットアップと最初のデバイスの実行 1 日
モバイル ポリッシュとネイティブ機能 3 日から 3 週間
署名と最初のビルド 1 日
Google Play クローズド テスト (新しい個人アカウント) 14 日以上、次に生産アクセスレビュー はい、iOS TestFlight
ストア リスト 1 から 2 日 はい
アプリ レビュー Apple は通常 1 から 2 日、Google は数時間から数日

ステップ 1: 開発者アカウントの登録を始めましょう

アカウントの検証は、コードを書く前に行う必要があるステップです。

  • Apple Developer Program99 ドルあたり 1 年。個人には、Apple アカウントと 2 つの要素認証、およびその法的名義が必要です。組織には、D-U-N-S 番号、会社のウェブサイト、およびそのドメイン上のワークメールも必要です。
  • Google Play Console25 ドルで 1 回の費用。組織には D-U-N-S 番号が必要です。ID の確認が必要です。

Google Playに個人として登録した場合、ご自分のアカウントはクローズドテストルール (Step 9) に従わなければなりません。全体のガイド: AppleとGoogle Playの開発者アカウントを作成する方法.

ステップ 2: アプリストアに配信するためのウェブアプリを準備する

Capacitor はアプリ内でウェブビューを実行します。ブラウザのタブで問題ないものは、アプリ内では不快なものです。

  • 静的ビルド出力. Capacitor はアプリのバンドルからファイルを読み込む。サーバーサイドレンダリングは電話で実行されない。フレームワークの静的出力(静的サイトジェネレーターなど)を使用する。next build with output: 'export', nuxt generateVite build. API の呼び出しは、HTTPS でバックエンドにアクセスするように以前と同じように行われます。
  • ファイルの起源から動作するクライアントサイドルーティング。 history routing (Capacitor iOSアプリからアプリを提供します) https://localhost Android と iOS の両方で動作するようにするため、__CAPGO_KEEP_0__ を使用して history ルーティングを実装し、深い URL が CORS にフォールバックするようにしてください。 capacitor://localhost iOSで動作するようにし、深いURLが自動的にフォールバックするようにする必要があります。 index.html.
  • CORS. Capacitor の許可されたオリジンに API のオリジンを追加してください。 capacitor://localhost (iOS) https://localhost (Android).
  • タッチのみ。ホバーは使用しない。 ホバーのみのメニューを削除し、タップのターゲットは少なくとも 44 x 44 ポイントでなければなりません。
  • 安全なエリア。 追加 viewport-fit=cover ビューポート メタタグに追加し、ヘッダーとフッターを埋めます env(safe-area-inset-top) と env(safe-area-inset-bottom).
  • オフラインやネットワークが遅い環境で 適切な状態を表示するようにしましょう。レビュアーはフラッキーのWi-Fiでテストします。
  • 「アプリをダウンロードしてください」というバナーは表示しません。 ユーザーをサイトに送るリンクもありません。
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />

Step 3: Add Capacitor

プロジェクトのルートディレクトリから

bun add @capacitor/core
bun add -d @capacitor/cli
bunx cap init "My App" com.example.myapp --web-dir dist
bun add @capacitor/ios @capacitor/android
bun run build
bunx cap add ios
bunx cap add android

実際の出力フォルダを使用します --web-dir: dist Viteの場合 out Next.jsの静的エクスポートの場合 .output/public Nuxt を使用する場合、 build Create React App を使用する場合、 dist/<project>/browser Angular を使用する場合、

アプリがストアに表示されるようになったら、com.example.myappbundle ID は変更できません。

Your capacitor.config.ts あなたの

import type { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.myapp',
  appName: 'My App',
  webDir: 'dist',
};

export default config;

Capacitor 8は、Swift Package Managerを使用してiOSプロジェクトを作成するため、CocoaPodsは必要ありません。ウェブのcodeを毎回変更すると、

bun run build
bunx cap sync

実行してください。

bunx cap run ios
bunx cap run android

コミットする ios/ 実行してください。 android/ コミットしてください。ファイルとフォルダはソース code になります。ここで、パーミッション、アイコン、署名を編集できます。詳細はこちらを参照してください。 how easy it is to make a web app into a mobile app with Capacitor, AIツールで作成した場合、 Capgoのモバイルガイド.

ステップ 4: モバイルアプリとしての特徴を追加する

コンテキスト: Capgoのページ。役割: UIラベル。見られる場所: about.astroのページ。メッセージキー `about_how_step_label` (About How Step Label)。

Feature 機能
プラグイン @capacitor/push-notifications
プッシュ通知 @capgo/capacitor-social-login
ネイティブのGoogle、Apple、Facebookサインイン @capgo/capacitor-native-biometric
Face ID / 指紋認証 @capacitor/camera
カメラと写真の機能 @capgo/capacitor-native-purchases
Native share sheet @capacitor/share
Haptics @capacitor/haptics
ステータスバーとスプラッシュ画面 @capacitor/status-bar, @capacitor/splash-screen
アプリの評価を求めるメッセージ @capgo/capacitor-in-app-review
ライブアップデート @capgo/capacitor-updater

例: Native share シートを表示するのではなく、 “コピー リンク” ボタンを表示します。

import { Share } from '@capacitor/share';
import { Capacitor } from '@capacitor/core';

export async function shareLink(url: string, title: string) {
  if (Capacitor.isNativePlatform()) {
    await Share.share({ title, url });
  } else {
    await navigator.clipboard.writeText(url);
  }
}

アプリ内課金の準備が必要です。デジタルコンテンツやサブスクリプションを販売する場合は、現在の準備が必要です。AppleとGoogleは、デジタル商品の場合、ほとんどの場合にアプリ内購入システムを必要とします。2025年の裁判所の判決により、アメリカのApp Storeでは、アプリは外部のウェブチェックアウトへのリンクを表示することもできます。 他の地域には独自の規則があります。物理商品やサービス(配達、乗車)はStripeまたは他の支払いプロバイダーを使用できます。詳しくは in-app purchases with Capacitor.

The full catalog of Capgo plugins is on the ステップ 5: アイコン、スプラッシュスクリーン、許可文字列.

2 つのソース画像からすべてのアイコンとスプラッシュサイズを生成します。

アプリ内課金の詳細は

bun add -d @capacitor/assets
# assets/icon.png 1024x1024, assets/splash.png 2732x2732
bunx capacitor-assets generate

iOS では、使用するすべてのパーミッションに使用説明が必要です。 ios/App/App/Info.plistアプリがリクエストを送るとクラッシュする場合、またはAppleが拒否する場合

<key>NSCameraUsageDescription</key>
<string>Take a photo of your receipt to attach it to an expense.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Choose receipt photos from your library.</string>

カメラを使用する必要があるため、このアプリは却下されました。

Android の場合、プラグインは大部分のパーミッションをマニフェストに追加します。使用しないパーミッションを削除し、敏感なパーミッションについては Google に説明を求められます。

Also add a プライバシーマニフェスト (PrivacyInfo.xcprivacy) code が必要な理由の API を使用している場合、見ることができます。 privacy manifest guide for Capacitor.

Step 6: iOS

iOS. Apple ディストリビューション証明書(その秘密鍵、通常exported as として)が必要です。 .p12iOSアプリでは、使用するすべての権限に使用説明が必要です。 iOS証明書とプロビジョニングプロファイルの説明; その iOS証明書生成ツール ブラウザ内でCSRステップを処理します。

Android。 アップロードキーストアを作成し、バックアップしておきます。Google PlayはPlayアプリ署名を使用しているため、Googleは最終的なアプリ署名キーを保持し、自分のアップロードに署名します。

keytool -genkeypair -v -keystore upload-keystore.jks -alias upload \
  -keyalg RSA -keysize 2048 -validity 10000

または Androidキーストア生成ツール.

ステップ 7: リリースバイナリをビルドする

Locally

ローカル iOS (Mac上のXcode 26で、2026年4月以降のApp Storeアップロードに必要):

  1. bunx cap open ios
  2. iOS: アプリ 対象のアプリを選択し、バージョンとビルド番号を設定し、Signing &amp; Capabilitiesの下でチームを選択してください。
  3. Choose iOSデバイス(arm64)を選択し、 製品 > アーカイブ.
  4. Organizerで App配布 > App Store Connect > アップロード.

Android:

bun run build
bunx cap sync android
cd android
./gradlew bundleRelease

AABは android/app/build/outputs/bundle/release/で構成します signingConfigs に android/app/build.gradle 環境変数からパスワードを読み込む

確認してください targetSdkVersion は36です。2026年8月31日以降、Google Playでは、新しいアプリとアップデートはAndroid 16 (API 36)をターゲットにする必要があります。これは、Capacitor 8のデフォルトです。

クラウド

CIからビルドを再現することができる場合は、Macを持っていない場合や、CIからビルドを再現することができない場合は Capgo ビルド 上記のビルドは、ホストされたマシンで両方のプラットフォームをビルドし、直接TestFlightとGoogle Playにアップロードすることができます。

bunx @capgo/cli@latest build credentials save --appId com.example.myapp --platform ios
bunx @capgo/cli@latest build credentials save --appId com.example.myapp --platform android
bunx @capgo/cli@latest build request com.example.myapp --platform ios --path .
bunx @capgo/cli@latest build request com.example.myapp --platform android --path .

ビルドのためにのみ使用され、Capgoサーバーに保存されません。詳細は Capgo ビルドドキュメント.

ステップ8: テスト者に配布

実機にビルドを配置して、AppleやGoogleの誰もがそれを見ないようにしてください。

  • iOS:
  • AndroidAndroid

: Play Consoleで内部テストリリースを作成し、オプティンリンクを共有する。.

ステップ9:Google Playのクローズドテストを実行(新しい個人アカウント)

iOSとAndroidアプリをテスターに配布する方法 Step 9: Google Playのクローズドテストを実行(新しい個人アカウント)Page/area: About Capgo page. Role: UI label. Seen in: page about.astro. Message key `about_how_step_label` (About How Step Label).

Playアカウントが2023年11月13日以降に作成された場合、12名以上のテスターが14日連続でオプティンしているクローズドテストを実行するまで、生産環境に公開することはできません。

ステップ 10: アプリストアのリストを用意し、提出

両方のストアに必要なのは、 App Store と Google Play のリストを準備する方法.

App StoreとGoogle Playのリストを準備する方法 iOSの提出: App Store Connectでバージョンを作成し、TestFlightビルドを選択し、App Review Information(デモアカウント、注釈)を入力し、レビューに追加 、そして.

提出 プロダクションリリースを作成するには、AAB(またはテストトラックからテストされたものをプロモート)を実行し、すべてのステップを完了する必要があります。 Androidの提出: プロダクションリリースを作成し、AAB(またはテストトラックからテストされたものをプロモート)、すべての

アプリコンテンツの宣言を完了し、国を選択し、レビューに送ります。

  1. 4.2 最小機能:アプリはただのウェブサイトです。ネイティブ値を追加し、ブラウザのようなUIを削除します。
  2. ログインは必要ですが、デモアカウントはありません。アカウントが機能しません。
  3. GoogleまたはFacebookログインをiOSで提供する場合、プライバシーに焦点を当てたログインオプションはありません。ガイドライン4.8では、データ収集を制限するための同等のオプションが必要です。Sign in with Appleは通常の選択肢です。 アカウントの削除はアプリ内で行えません。
  4. アカウントを作成できるユーザーがアプリ内でアカウントを削除できない場合です。 ストライプを使用したデジタル購入
  5. ストライプを使用したデジタル購入は、インアプリ購入が必要な場合にのみ行われます。 iPadのレイアウトが破損しています。
  6. プロジェクトはiPadをサポートしているためです。 iPadのレイアウトが破損しています。
  7. 許可情報が不足または曖昧な場合。

Capgoの 初めてのアプリレビューガイド と iOSアプリの提出ガイド を詳しく説明します。

11. ステップ:リビューなしでアップデートを配信する

リリース後、ほとんどの変更はWeb code内にあります。新しいストアビルドを作成するのではなく、ライブアップデートを追加します。Capgo アップデータは、Capgo から新しいWebバンドルをダウンロードし、起動時に自動ロールバックを実行します。

bun add @capgo/capacitor-updater
bunx cap sync
bunx @capgo/cli@latest init

Call notifyAppReady() 次のリリースごとにWeb __CAPGO_KEEP_0__は1つのコマンドです。

import { CapacitorUpdater } from '@capgo/capacitor-updater';

CapacitorUpdater.notifyAppReady();

Then each release of web code is one command:

bun run build
bunx @capgo/cli@latest bundle upload --channel production

Both stores allow this for interpreted code as long as the update does not change the app’s main purpose or bypass their payment rules. Native changes (new plugins, new permissions, Capacitor upgrades) still go through the stores. Read more on Capgoライブアップデート そして アップデートドキュメント.

初回のストア提出前にプラグインを追加する必要があります。バイナリに含まれている必要があります。そうしないと、初回のlive updateは2回目のストアリリース後にユーザーに到達するまでに時間がかかります。

最後に、自動化: GitHubアクションまたはGitLab CIでビルドとアップロード、毎回のマージでライブアップデートをプッシュし、ネイティブの変更用にネイティブのリリースを残す。 mainプレリリースチェックリスト

AppleとGoogleのアカウントが承認され、契約が受け入れられた

  • アプリがオフラインでも動作するか、明確なオフライン状態を表示する
  • セーフエリア、キーボード、Androidバックボタンのハンドリング
  • 少なくとも、ウェブサイトでは提供できないネイティブの機能が少なくとも一つある
  • アイコン、スプラッシュ、許可文字列、プライバシーマニフェスト
  • __CAPGO_KEEP_0__ライブアップデート
  • 配布証明書、App Store プロファイル、アップロードキーストアのバックアップ
  • ターゲット SDK 36 の Android、Xcode 26 で iOS を構築
  • 実機でテストフライトとPlayの内部テストが完了
  • Google Playのクローズドテストが完了(個人アカウント)
  • 両方のストアのリストが完了、デモアカウントが追加
  • ユーザーがサインアップできる場合のアプリ内アカウントの削除
  • 初回バイナリにLive Update プラグインが含まれる

トラブルシューティング

起動時に白い画面が表示される webDir ポイントは間違ったフォルダに指しているか、または忘れている bunx cap sync ビルド後に確認してください ios/App/App/public そして android/app/src/main/assets/public 含める index.html.

APIの呼び出しは、 CORS:許可 capacitor://localhost そして https://localhostURLも確認してください。iOSはデフォルトでブロックしています。 http:// リロードまたはディープリンク後も404エラーが発生する

古いセットアップ用のハッシュルーティングにフォールバックするルーターを使用する Xcode署名エラー index.htmlエラーの一覧は

iOS証明書とプロビジョニングプロファイルの説明 エラーの一覧を参照してください。 iOS証明書とプロビジョニングプロファイルの説明.

アップグレード後、Gradleビルドが失敗します。 Capacitor 8には、Android Studio Otter (2025.2.1) 以降と JDK 21が必要です。詳細はCapacitor 8のアップグレードガイドを参照してください。 Capacitor 8のアップグレードガイドその他のGradleエラーについては、__CAPGO_KEEP_0__の「Androidビルドエラーを解決する方法」を参照してください。 Google Playのアップロードが拒否された理由は、Capacitorです。.

Google Play upload rejected for target SDK. この targetSdkVersion = 36 著者 android/variables.gradle.

リアルタイムアップデートの Capacitor アプリ

ウェブ層のバグが実行中の場合、Capgo を通じて修正を配信し、数日間待つ必要のないアプリストアの承認を待つのではなく。ユーザーはバックグラウンドでアップデートを受け取り、ネイティブの変更は通常のレビューのパスを通る。

人間のサポートからマーティン

スタートする

最新のブログ

Capgo gives you the best insights you need to create a truly professional mobile app.