WindowsやLinuxからiOSをテストする際の最大の課題は、iOS SimulatorとSafari Web InspectorがmacOS専用であるという点です。それ以外の要素はすべて準備可能です。本ガイドでは、ブラウザから実機のiPhoneまで、Macなしで実行できるテストのステップを段階的に紹介し、 Capgo のビルド と Live Update 待ち時間をなくそう。
テストのステップ
| レベル | テスト内容 | 実行環境 | Macが必要 |
|---|---|---|---|
| 1 | Webレイヤー: ロジック、レイアウト、レスポンシブ設計 | iPhoneビューポートでのデスクトップブラウザ | いいえ |
| 2 | Capacitor プラグイン、ネイティブブリッジ、権限 | Androidエミュレーターまたは実機 | いいえ |
| 3 | iOSの実挙動:WebKitの癖、セーフエリア、キーボード、プッシュ通知、iOSプラグイン | TestFlight経由のiPhone | いいえ、Capgo Buildを使えば可能です |
| 4 | 特定デバイス向けのAd hoc QAビルド | Ad Hoc IPA経由のiPhone | いいえ、Capgo Buildを使えば可能です |
| 5 | Xcodeによるステップ実行のネイティブデバッグ | Mac | はい |
Capacitor アプリにおいてレベル5が必要になることは稀です。もし必要になっても、Macを購入するより1時間だけレンタルする方が安上がりです。ほとんどのバグはレベル1と2で発見でき、レベル3でiOS特有のバグを捕捉できます。
レベル 1: iPhoneのビューポートでのブラウザ確認
ChromeやEdgeで開発サーバーを開き、デバイスエミュレーションを切り替えてiPhoneのプロファイルを選択します。Capacitor はプラットフォーム情報を公開しているため、UIの分岐処理も確認できます:
import { Capacitor } from '@capacitor/core';
if (Capacitor.getPlatform() === 'ios') {
// iOS-only behavior
}
ただし、WebKitのレンダリングの違い、セーフエリアのインセット、iOSキーボードによるビューポートの押し上げ、およびネイティブプラグインが関わる挙動は検知できません。
レベル 2: Webレイヤーは共通なため、まずはAndroidで確認
Capacitor は両プラットフォームで同じWeb bundleを実行します。WindowsやLinuxからChrome DevToolsを使用して、プラグインの接続、権限のprompt、ブリッジ呼び出しをAndroid上で検証できます。 chrome://inspectAndroidでプラグインの呼び出しが動作すれば、JavaScript側は正解です。残る課題はiOSのネイティブ実装のみとなり、それはレベル3でテストします。
レベル 3: TestFlightを使用した実機iPhoneでのテスト
これがMacを使わずにiOSをテストするメインの経路です。フロー:
- iOSプロジェクトをローカルで生成・同期します。
- App Store Connectの認証情報を保存してクラウドビルドをリクエストします。
- iPhoneでTestFlightを開きます。
bun run build
bunx cap sync ios
bunx @capgo/cli@latest build request com.example.app --platform ios --build-mode release
Capgo はmacOS上でアプリのコンパイルと署名を行い、App Store Connectへアップロードします。Appleがビルドを処理すると、数分以内にTestFlightの内部テスターに表示されます。内部テスター(App Store Connectチームのメンバー)はBeta App Reviewが不要なため、初回インストールがすぐに完了します。
認証情報のセットアップは一度だけで済みます。 bunx @capgo/cli@latest build init --platform ios これに従えば、OpenSSLなどを使ってMacがなくても証明書を作成できます。 iOS証明書ジェネレーター.
実機で確認できること:本物のWebKit、セーフエリア、キーボード、プッシュ通知、そしてプラグインの挙動。これらはブラウザでは検証できない要素です。
レベル4:指定デバイス向けのAd Hocビルド
テスターがApp Store Connectのチーム外にいる場合や、Appleの処理をスキップしたい場合は、デバイスのUDIDを登録したAd Hocプロファイルを使用します:
bunx @capgo/cli@latest build request com.example.app \
--platform ios \
--ios-distribution ad_hoc \
--output-upload \
--output-record build.json
CLI は、IPAの有効期限付きダウンロードリンクとQR code を返します。保持期間は1時間から7日まで、以下で設定できます: --output-retentionAd HocプロファイルにはApp Store Connectの API キーは不要で、証明書とプロファイルだけが必要です。
WindowsやLinuxからテスターのUDIDを取得するには、iPhoneの「設定 > 一般 > 情報」から項目を確認してもらうか、UDID取得用のWebツールを使用してください。その後、Appleのポータルにデバイスを追加し、プロファイルを再生成します。
ビルドし直さずに改善を繰り返す: Live Updates
TestFlightのビルドをインストールした後は、変更のたびに再ビルドする必要はありません。代わりにWeb bundleをプッシュしてください:
bun run build
bunx @capgo/cli@latest bundle upload --channel beta
以下の beta channelのテスターは、次回のアプリ起動時に新しいbundleを受け取ります。WindowsやLinuxを使用するチームにとって、これによりiOSのフィードバックループは「クラウドビルドとAppleの審査待ち」から「数秒」へと劇的に短縮されます。Native Buildが必要になるのは、プラグインや権限、または Capacitor のバージョンが変更された時だけです。
TestFlightのビルドは専用のchannelに向けておき、ベータテスターが誤って本番用のbundleを取得しないようにしましょう。 channelのガイド で設定方法を説明しています。
Safari Web Inspectorを使わずにiOSをデバッグする
SafariのインスペクタはmacOSからしか接続できません。どのOSからでも利用可能な代替案は以下の通りです:
- リモートのシンクへの構造化ロギング。 送信
console.errorまた、エラーをSentryなどのツールにブリッジします。これにより、 Firebase Crashlyticsを使ったCapacitorガイド ネイティブのSDKセットアップについて解説します。 - アプリ内デバッグパネル。 ジェスチャーで切り替える非表示ビューに、直近N行のログを表示します。TestFlightビルドでは手軽で効果的です。
- ビルドログ。 ネイティブのコンパイル問題は、ターミナルにストリーミングされるCapgoのビルドログに表示されます。さらに、
--ai-analyticsビルド失敗の原因が自動的に説明されるようにします。 - Androidで再現する。 共有ウェブレイヤーに関するものであれば、Android上のChrome DevToolsでフル機能のデバッガーが使えます。
Xcodeのデバッガーが必要な真のネイティブクラッシュについては、Macを1時間レンタルするか、チームメイトに頼んでください。Capacitorアプリではそのようなケースは稀で、ほとんどの問題はウェブレイヤーかプラグインの設定にあります。
現実的な週次ワークフロー
- 毎日: browser plus Android device from Windows or Linux. Live Updates to the
betaiPhoneテスター向けのチャンネルへ配信。 - ネイティブコードに変更があったら: Capgo BuildでTestFlightへ。数分の待ち時間だけで、Macは不要です。
- リリース: App Store配信用のCapgo Buildを行い、その後bundleチャンネルを昇格させます。
まとめ
WindowsやLinux上でiOSをシミュレートすることはできませんが、MacなしでiPhoneの実機テストを行うことは可能です。Capgo Buildを使えば、コマンド一つで署名済みアプリをTestFlightやad hocリンクへ送ることができ、インストール後はLive Updatesによって高速なイテレーションが維持されます。Macは、たまに発生するネイティブのデバッグ作業のために取っておきましょう。