Руководство

Как собрать iOS-приложение на Capacitor, если вы работаете на Windows

Capacitor заворачивает веб-приложение в нативную оболочку. На Windows можно собрать веб-приложение и приложение для Android. iOS-приложению нужен Xcode, а он работает только на macOS. 19 октября 2026 года мы проверили с Capacitor 8.5.3, где проходит эта граница. Она проходит позже, чем думает большинство.

Что работает на Windows

Мы выполнили эти шаги на раннере GitHub с Windows Server 2025 и 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

Отладочная сборка для Android там тоже сработала с JDK 21. gradlew.bat assembleDebug на холодном раннере занял 6 минут 33 секунды. Он создал app-debug.apk на 8.2 MB.

Сюрприз это npx cap add ios. Он отработал на Windows меньше чем за секунду и создал полный проект 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!

Swift Package Manager, а не CocoaPods

Проекты Capacitor 8 по умолчанию используют Swift Package Manager. Документация его рекомендует и говорит, что до Capacitor 8 по умолчанию был CocoaPods. В нашем новом проекте не было Podfile. В нём были ios/App/App.xcodeproj и пакет CapApp-SPM, который ссылается на ваши плагины в node_modules.

Поэтому шаги для 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. Собственный .gitignore папки ios не включает скопированные веб-файлы и сгенерированную конфигурацию. Поэтому Mac пересобирает их до запуска Xcode:

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

Сборка заняла 36 секунд в Xcode 26.6. При первом запуске Xcode скачал capacitor-swift-pm 8.5.3 с GitHub. Потом мы поставили приложение в симулятор 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 собирает iOS-приложения в облаке Ionic, и его страница до сих пор так пишет. 11 февраля 2025 года Ionic прекратил новые продажи Appflow. Текущие пользователи сохраняют доступ до 31 декабря 2027 года. Если вы ещё не клиент, планируйте другой путь.

Аренда Mac на один шаг

Суточный доступ MacRun это выделенный Mac mini на M6 за $15, или $59 за неделю. Установлены Xcode 27.1 и симулятор iOS 27.1. Node не установлен. У вас есть права администратора и Homebrew, так что вы ставите свою версию Node. Вы подключаетесь по SSH и через демонстрацию экрана из Windows. Когда доступ заканчивается, Mac очищается. Наше руководство симулятор на Windows показывает, каково работать с удалённым экраном.

Кому не стоит арендовать для этого Mac

Если сборка нужна лишь изредка, с ней справится облачный раннер macOS. Команды выше прошли на GitHub Actions без собственного Mac. Codemagic указывает поддержку Ionic и даёт частным лицам 500 бесплатных минут на macOS M2 в месяц. Это по его странице цен на 19 октября 2026 года. Если вы выпускаете обновления каждую неделю, б/у Mac со временем может обойтись дешевле. Арендованный Mac подходит, когда нужен открытый Xcode, для проблем с подписью или бага в нативном плагине.

Частые вопросы

Можно ли выполнить npx cap add ios на Windows?

+

Да, с Capacitor 8 и Swift Package Manager. В нашем тесте в октябре 2026 года команда создала проект Xcode на Windows меньше чем за секунду. npx cap sync ios тоже сработал. Для сборки приложения всё равно нужен Mac.

Что Capacitor использует для iOS, CocoaPods или Swift Package Manager?

+

Новые проекты Capacitor 8 используют Swift Package Manager. В нашем новом проекте был Package.swift и не было Podfile. Документация говорит, что до Capacitor 8 по умолчанию был CocoaPods, а теперь он необязателен.

Можно ли собрать iOS-приложение на Capacitor на Windows?

+

Само приложение нельзя. Шагу xcodebuild, симулятору и подписи нужен Xcode на macOS. Всё остальное можно подготовить на Windows, отправить в git и собрать на Mac или CI-раннере на macOS.

Ionic Appflow ещё доступен?

+

Ionic прекратил новые продажи Appflow 11 февраля 2025 года. По объявлению Ionic, текущие пользователи Appflow сохраняют доступ до 31 декабря 2027 года.

Можно ли собрать приложение для Android на Windows?

+

Да. В нашем тесте npx cap add android и gradlew.bat assembleDebug сработали на Windows с JDK 21. Первая сборка заняла 6 минут 33 секунды и создала отладочный APK на 8.2 MB.

Сколько длится сборка Capacitor под iOS?

+

Наше стартовое приложение собралось под симулятор за время от 24 до 36 секунд в Xcode 26.6 на раннере GitHub с macOS. Более долгое время включало загрузку пакетов Swift. Большие приложения собираются дольше.

Похожие руководства