Руководство

Публикация приложения iOS в App Store без собственного Mac

Опубликовать приложение iOS можно и без собственного Mac. Но без macOS нельзя. Для сборки и подписи приложения нужен Xcode. Почти всё остальное делается в браузере или на iPhone. Единственный шаг, где нужна macOS, закрывает арендованный Mac или CI-раннер.

Что Apple требует в октябре 2026 года

  • Платное членство. Apple Developer Program стоит 99 USD за год членства, по данным страницы регистрации Apple. Некоммерческие организации, учебные заведения и государственные органы могут попросить освобождение от взноса.
  • Свежий Xcode. С 28 апреля 2026 года загружаемые сборки должны быть собраны в Xcode 26 или новее с iOS 26 SDK. Это указано на странице предстоящих требований Apple.
  • Свежая macOS. Xcode 26.6 требует macOS Tahoe 26.2 или новее, по данным системных требований Xcode от Apple.

Значит, сборка идёт на Mac. Вопрос только в том, чей это Mac.

Что можно сделать из Windows или Linux

  • Зарегистрироваться в программе на сайте или в приложении Apple Developer.
  • Создать запись приложения в App Store Connect.
  • Создать API-ключ App Store Connect (шаги ниже).
  • Добавить тестировщиков, написать описание в магазине и отправить на проверку.
  • Загрузить готовую сборку. Консольная утилита Apple Transporter поддерживает Windows 11 и Red Hat Enterprise Linux. На этих системах ей нужен AppStoreInfo.plist, который Xcode создаёт при экспорте. Так что загрузить можно с вашего PC, но сам файл всё равно берётся с Mac.

Сначала создайте API-ключ

API-ключ позволяет инструментам на Mac общаться с Apple. Пароль и двухфакторный запрос не нужны. Шаги Apple для ключа команды:

  • В App Store Connect откройте Users and Access, затем Integrations.
  • Выберите App Store Connect API, затем вкладку Team Keys.
  • Нажмите Generate API Key, дайте имя, выберите роль и создайте ключ.
  • Скачайте файл .p8. Apple разрешает скачать его только один раз.

Чтобы создавать ключи команды, нужна роль Admin. Запишите Key ID и Issuer ID с этой страницы. Не храните .p8 в репозитории.

Подпись без собственной связки ключей

Для подписи нужны сертификат распространения и профиль provisioning. Получить их на арендованном Mac можно двумя способами.

Автоматическая подпись. xcodebuild принимает API-ключ. В справке сказано, что с флагом allowProvisioningUpdates он создаёт и обновляет профили, app ID и сертификаты для целей с автоматической подписью. Apple также предлагает сертификаты распространения, которыми управляет облако. Их хранит Apple, так что на арендованной машине не лежит ни одного закрытого ключа.

Ручная подпись. Создайте запрос на подпись сертификата в «Связке ключей» на арендованном Mac. Затем сделайте сертификат Apple Distribution и профиль App Store в разделе Certificates, Identifiers and Profiles. Перед тем как вернуть Mac, очистите связку ключей.

Сборка и загрузка с облачного Mac

Создайте архив приложения. Подставьте свои имена, ID ключа и ID издателя.

xcodebuild -workspace MyApp.xcworkspace -scheme MyApp \
  -configuration Release -destination 'generic/platform=iOS' \
  -archivePath build/MyApp.xcarchive archive \
  -allowProvisioningUpdates \
  -authenticationKeyPath ~/private_keys/AuthKey_ABC123DEF4.p8 \
  -authenticationKeyID ABC123DEF4 \
  -authenticationKeyIssuerID YOUR-ISSUER-ID

Затем экспортируйте его. Если destination равен upload, экспорт отправляет сборку прямо в App Store Connect. Метод app-store-connect заменил старое значение app-store.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>method</key><string>app-store-connect</string>
  <key>destination</key><string>upload</string>
  <key>signingStyle</key><string>automatic</string>
  <key>teamID</key><string>YOURTEAMID</string>
</dict>
</plist>
xcodebuild -exportArchive -archivePath build/MyApp.xcarchive \
  -exportOptionsPlist ExportOptions.plist -exportPath build/export \
  -allowProvisioningUpdates \
  -authenticationKeyPath ~/private_keys/AuthKey_ABC123DEF4.p8 \
  -authenticationKeyID ABC123DEF4 \
  -authenticationKeyIssuerID YOUR-ISSUER-ID

Хотите отдельный шаг загрузки? Укажите destination export, а затем используйте altool. Он находит файл ключа в ~/private_keys по его ID.

xcrun altool --upload-package build/export/MyApp.ipa \
  --api-key ABC123DEF4 --api-issuer YOUR-ISSUER-ID

Пользователи fastlane могут сделать то же самое двумя действиями из его документации: app_store_connect_api_key загружает ключ, а pilot отправляет сборку в TestFlight.

Мы сверили каждый флаг выше со справкой xcodebuild и altool в Xcode 26.6. Подписанную загрузку именно с этими строками мы не запускали. Детали зависят от настройки подписи в вашем проекте.

Номера версии и сборки

Apple сопоставляет каждую загрузку с вашим приложением по bundle ID и номеру версии. Строка сборки определяет каждую сборку, поэтому она должна быть уникальной. Увеличивайте номер сборки при каждой загрузке. В CI для этого удобно брать номер запуска. Номер версии оставьте для того, что пользователи видят в магазине.

TestFlight на вашем iPhone

Apple обрабатывает каждую загрузку и присылает письмо, когда сборка готова. Дальше всё происходит в App Store Connect и на телефоне. По данным обзора TestFlight от Apple:

  • До 100 внутренних тестировщиков из вашей команды в App Store Connect.
  • До 10 000 внешних тестировщиков по почте или по публичной ссылке.
  • Первая сборка для внешних тестировщиков проходит App Review.
  • Каждую сборку можно тестировать до 90 дней.

Тестировщики ставят бесплатное приложение TestFlight и принимают приглашение. Для всего этого Mac не нужен. Скриншоты для магазина легко сделать в симуляторе на арендованном Mac.

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

На Expo сборку и загрузку в облаке Expo делают EAS Build и EAS Submit. Если вы выпускаете обновления дважды в год, hosted CI-раннер обойдётся в центы за сборку. Как это настроить, читайте в статье iOS CI/CD с GitHub Actions. MacRun не предлагает управляемую подпись кода. Сертификаты и ключи принадлежат вам.

Арендованный Mac подходит, когда вы выпускаете часто. Он подходит и тогда, когда нужен экран Xcode, чтобы вручную починить подпись. Наши тарифы на M6 есть на странице цен.

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

Можно ли опубликовать приложение iOS без Mac?

+

Да, если у вас где-то есть доступ к macOS. Для сборки и подписи нужен Xcode на Mac, и это может быть арендованный или облачный Mac. Регистрация, App Store Connect, TestFlight и проверка работают из браузера или с iPhone.

Можно ли загрузить .ipa в App Store Connect из Windows?

+

Консольная утилита Apple Transporter поддерживает Windows 11 и Red Hat Enterprise Linux. На этих системах ей нужен AppStoreInfo.plist, который Xcode экспортирует вместе со сборкой. Так что .ipa всё равно нужно собирать на Mac.

Какой Xcode нужен для загрузки в 2026 году?

+

С 28 апреля 2026 года Apple требует, чтобы приложения для App Store Connect собирались в Xcode 26 или новее с iOS 26 SDK. Xcode 26.6 работает на macOS Tahoe 26.2 или новее.

Сколько стоит публикация в App Store?

+

Apple Developer Program стоит 99 USD за год членства. Подходящие некоммерческие организации, учебные заведения и государственные органы могут получить освобождение от взноса. Время Mac для сборки оплачивается отдельно: от центов за сборку в hosted CI до помесячной аренды.

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