Windowsで作業しながらCapacitorのiOSアプリをビルドする
Capacitorは、Webアプリをネイティブの外枠で包みます。Windowsでは、WebアプリとAndroidアプリをビルドできます。iOSアプリにはXcodeが必要で、XcodeはmacOSでしか動きません。当社は2026年10月19日に、Capacitor 8.5.3で、その境目がどこにあるかを試しました。境目は、多くの人が思うよりあとにあります。
Windowsでできること
GitHubのWindows Server 2025のrunnerで、Node 22を使って次の手順を実行しました。CapacitorのドキュメントはNode 22以降を求めています。すべての手順が通りました。
npm init @capacitor/app@latest capdemo -- --name CapDemo --app-id com.example.capdemo cd capdemo npm install npm run build npm i @capacitor/android @capacitor/ios npx cap add android npx cap add ios npx cap sync ios
JDK 21を使ったAndroidのデバッグビルドも、そこで動きました。キャッシュのないrunnerで、gradlew.bat assembleDebugに6分33秒かかりました。8.2 MBのapp-debug.apkができました。
意外だったのはnpx cap add iosです。Windowsで1秒もかからずに終わり、完全なXcodeプロジェクトを書き出しました。出力は次のとおりです。
√ Adding native Xcode project in ios in 47.04ms [info] All Capacitor plugins have a Package.swift file and will be included in Package.swift [info] Writing Package.swift [success] ios platform added!
CocoaPodsではなくSwift Package Manager
Capacitor 8のプロジェクトは、標準でSwift Package Managerを使います。ドキュメントはこれを勧めていて、Capacitor 8より前はCocoaPodsが標準だったと書いています。当社の新しいプロジェクトにはPodfileがありませんでした。あったのはios/App/App.xcodeprojと、node_modules内のプラグインを指すCapApp-SPMパッケージです。
そのため、今はiOSの手順がWindowsで動きます。実行するpod installがないからです。プロジェクトがまだCocoaPodsを使っているなら、pod installにはmacOSが必要です。CocoaPodsのプロジェクトはWindowsで試していません。SPMに移るには、ドキュメントにあるnpx cap spm-migration-assistantを使います。
今もMacが必要なもの
- xcodebuildとXcode。Capacitor 8にはXcode 26.0以降が必要で、XcodeはmacOSでしか動きません。
- npx cap open iosとnpx cap run ios。どちらもプロジェクトをXcodeかシミュレータに渡します。
- iOSシミュレータ。Xcodeに含まれています。
- 署名、アーカイブ、アップロード。この部分についてはMacなしでの公開をご覧ください。
試したWindowsからMacへの受け渡し
Windowsのプロジェクトをgitにコミットし、Macのrunnerに移しました。iosフォルダの.gitignoreは、コピーされたWebのファイルと、生成された設定を除外しています。そのため、Xcodeを動かす前に、Macでそれらを作り直します。
npm ci npm run build npx cap sync ios xcodebuild -project ios/App/App.xcodeproj -scheme App \ -configuration Debug -sdk iphonesimulator \ -destination 'generic/platform=iOS Simulator' \ -derivedDataPath build build
Xcode 26.6で、ビルドは36秒でした。初回の実行では、XcodeがGitHubからcapacitor-swift-pm 8.5.3を取得しました。そのあと、iPhone 17 Proのシミュレータにアプリをインストールして開きました。Capacitorのようこそ画面が表示されました。
xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/App.app xcrun simctl launch booted com.example.capdemo
CapacitorのiOSのページには、今もApp.xcworkspaceを開くように書かれています。SPMのプロジェクトにはそれがないので、代わりにios/App/App.xcodeprojを開いてください。
署名をオフにしたデバイス向けのビルドも、17秒で通りました。CODE_SIGNING_ALLOWED=NOを加え、-sdk iphoneosを使います。リリースするには、Xcodeでプロジェクトを開き、Signing and Capabilitiesでチームを選んで、Product、Archiveの順に選びます。
Ionic Appflowはどうか
AppflowはIonicのクラウドでiOSアプリをビルドします。そのページにも今もそう書かれています。Ionicは2025年2月11日に、Appflowの新規販売をやめました。今のユーザーは2027年12月31日まで使えます。まだ顧客でないなら、別の方法を考えてください。
1つの工程のためにMacを借りる
MacRunの1日パスは、専用のM6 Mac miniが$15で、1週間なら$59です。Xcode 27.1とiOS 27.1のシミュレータが入っています。Nodeは入っていません。管理者権限とHomebrewが使えるので、自分が使うバージョンのNodeをインストールします。WindowsからSSHと画面共有で接続します。パスが終わるとMacのデータは消去されます。リモートの画面がどんな感じかは、WindowsでiOSシミュレータのガイドをご覧ください。
この用途でMacを借りるべきでない人
ときどきビルドが必要なだけなら、ホスト型のmacOS runnerで足ります。上のコマンドは、自分のMacなしでGitHub Actionsで動きました。CodemagicはIonicへの対応をうたっていて、個人にmacOS M2の時間を毎月500分、無料で提供しています。これは2026年10月19日時点の料金ページによるものです。毎週リリースするなら、中古のMacのほうが長い目で見て安いかもしれません。署名のトラブルやネイティブプラグインのバグなど、Xcodeを開く必要があるときは、レンタルのMacが向いています。
よくある質問
npx cap add iosはWindowsで実行できますか?
+
Capacitor 8とSwift Package Managerならできます。2026年10月の当社のテストでは、Windowsで1秒もかからずにXcodeプロジェクトが書き出されました。npx cap sync iosも動きました。アプリのビルドには、やはりMacが必要です。
CapacitorはiOSでCocoaPodsとSwift Package Managerのどちらを使いますか?
+
新しいCapacitor 8のプロジェクトは、Swift Package Managerを使います。当社の新しいプロジェクトにはPackage.swiftがあり、Podfileはありませんでした。ドキュメントによると、Capacitor 8より前はCocoaPodsが標準で、今は任意です。
CapacitorのiOSアプリをWindowsでビルドできますか?
+
アプリそのものはできません。xcodebuildの工程、シミュレータ、署名には、macOSのXcodeが必要です。準備はすべてWindowsで行い、gitにpushして、MacかmacOSのCI runnerでビルドできます。
Ionic Appflowは今も使えますか?
+
Ionicは2025年2月11日に、Appflowの新規販売をやめました。Ionicの発表によると、既存のAppflowのユーザーは2027年12月31日まで使えます。
AndroidアプリはWindowsでビルドできますか?
+
できます。当社のテストでは、JDK 21を使って、Windowsでnpx cap add androidとgradlew.bat assembleDebugが動きました。最初のビルドは6分33秒で、8.2 MBのデバッグ用APKができました。
CapacitorのiOSビルドには、どのくらい時間がかかりますか?
+
GitHubのmacOS runnerで、Xcode 26.6を使い、当社のスターターアプリはシミュレータ向けに24秒から36秒でビルドできました。長いほうには、Swiftパッケージの取得が含まれます。大きなアプリでは、もっと時間がかかります。