メインコンテンツまでスキップ

PWA からネイティブへの変換


PWA ラッピングのワークフローと API ドキュメント

ワークフローの概要

ラッピングプロセスは非同期であり、以下のステップに従います。

  1. POST /wrap – ラッピングプロセスを開始します(ドラフト ID とともに即座に返されます)
  2. GET /draft/{draft_id}完了または失敗まで、ステータスの更新をポーリングします
  3. ビルドをダウンロードする – 完了したら、download_url から .zip ファイルをダウンロードします

エンドポイント

1. ラッピングプロセスの開始

POST /wrapper/wrap

PWA ラッピングプロセスを開始します。 進捗を追跡するためのドラフト ID とともに即座に返されます。

リクエストボディ

{
"url": "https://example.com",
"bundle_id": "com.example.app",
"team_id": "A1B2C3D4E5",
"auth_redirects": {
"accounts.google.com": "https://example.com/auth/google/callback"
}
}

リクエストパラメータ

フィールド必須説明
urlstring (URL)✅ はいラップする PWA URL
bundle_idstring✅ はいiOS バンドル識別子(com.company.app
team_idstring❌ いいえApple Developer チーム ID — ネイティブ認証の場合のみ
auth_redirectsobject❌ いいえ認証リダイレクトパス — ネイティブ認証の場合のみ

ネイティブ認証と WebView 認証

次の場合に team_idauth_redirects を指定します。

  • Universal Links を使用して認証をネイティブに処理したい場合
  • デバイスに保存されたログイン(Google、Facebook など)を有効にします
  • より信頼性が高い — 認証に Safari/ネイティブブラウザを使用します

⚠️ 次の場合に team_idauth_redirects を省略します。

  • WebView 内で認証したい場合
  • 信頼性が低い(一部のプロバイダは WebView 認証をブロックします)
  • UX が悪い(ソーシャルプロバイダの保存されたログインがありません)

レスポンスの例(201 Created)

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"pwa_url": "https://example.com",
"status": "created",
"manifest_url": null,
"project_zip_filename": null,
"build_zip_filename": null,
"download_url": null,
"error_message": null,
"created_at": "2025-11-10T12:00:00Z",
"updated_at": "2025-11-10T12:00:00Z"
}

2. ドラフトステータスの取得

GET /wrapper/draft/{draft_id}

ラッピングの進捗を追跡するには、このエンドポイントをポーリングします。

パスパラメータ

パラメータ説明
draft_idstring (UUID)POST /wrap からのドラフト ID

レスポンスの例(200 OK)

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"pwa_url": "https://example.com",
"status": "completed",
"manifest_url": "https://example.com/manifest.json",
"project_zip_filename": "550e8400-e29b-41d4-a716-446655440000.zip",
"build_zip_filename": "550e8400-e29b-41d4-a716-446655440000.zip",
"download_url": "https://pwa-ios.aptoide.com/pwa-ios/8.20251013/storage/file/550e8400-e29b-41d4-a716-446655440000.zip",
"error_message": null,
"created_at": "2025-11-10T12:00:00Z",
"updated_at": "2025-11-10T12:05:00Z"
}

ステータスフロー

ステータス説明
createdドラフトが作成され、ラッピングプロセスが開始しています
fetching_manifestPWA マニフェストを取得して検証しています
generating_projectXcode プロジェクトファイルを生成しています
buildingiOS アプリケーションをビルドしています
completed✅ ビルドが完了しました — download_url が利用可能です
failed❌ プロセスが失敗しました — error_message を参照してください

レスポンスフィールド

フィールド説明
idstring一意のドラフト識別子
pwa_urlstring元の PWA URL
statusstring現在のステータス
manifest_urlstring?取得したマニフェストの URL
project_zip_filenamestring?生成された Xcode プロジェクトのファイル名
build_zip_filenamestring?最終ビルドのファイル名
download_urlstring?ダウンロード URL(完了時のみ)
error_messagestring?エラーの詳細(失敗した場合のみ)
created_atdatetimeドラフト作成のタイムスタンプ
updated_atdatetime最終更新のタイムスタンプ

ダウンロード内容

ステータスが completed の場合、.zip には以下が含まれます。

常に含まれるもの

  1. 署名なしの .app(シミュレータ) テスト用に iOS シミュレータで直接実行します。

  2. 署名なしの .ipa 配信前に手動での署名が必要です。

  3. Xcode プロジェクトフォルダー これを使用してアプリケーションを手動で署名し、公開します。


ネイティブ認証(team_id を指定)の場合のみ含まれるもの

  1. OAUTH_SETUP.md ネイティブ認証と Universal Links を設定するための手順。

  2. apple-app-site-association 次の場所に配置するための事前構成済みファイル: {base_url}/.well-known/apple-app-site-association

⚠️ ネイティブ認証が構成されて いない 場合は含まれません。


ポーリングの推奨事項

パラメータ推奨値
ポーリング間隔5~10 秒
タイムアウト20~25 分
一般的なビルド時間3~8 分

ダウンロード後の次のステップ

ネイティブ認証あり(team_id + auth_redirects

  1. .zip を展開します
  2. シミュレータでテストします
  3. OAUTH_SETUP.md を読みます
  4. apple-app-site-association をウェブサイトに配置します
  5. Xcode プロジェクトを開いてコード署名を構成します
  6. Xcode でビルドおよびアーカイブします
  7. App Store に提出します

⚠️ ネイティブ認証なし(WebView 認証)

  1. .zip を展開します
  2. シミュレータでテストします
  3. Xcode プロジェクトを開いてコード署名を構成します
  4. Xcode でビルドおよびアーカイブします
  5. App Store に提出します

重要な注意事項

✅ 重要なポイント

  • ラッピングはバックグラウンドで非同期に実行されます
  • ビルド時間:3~8 分
  • download_urlstatus = completed の場合にのみ利用可能です
  • ドラフトは履歴追跡のために保持されます

⚠️ 重要な警告

  • 署名なしの .ipa は、配信前に必ず署名する必要があります

  • ネイティブ認証には次のものが必要です。

    • team_id
    • auth_redirects
    • apple-app-site-association の適切なホスティング
  • WebView 認証は機能しますが、以下の問題があります。

    • UX が悪い
    • ソーシャルログインのサポートが信頼できない