Дистрибуция iOS‑приложения без App Store: практический опыт с AltStore PAL - QubStore

Дистрибуция iOS‑приложения без App Store: практический опыт с AltStore PAL

Когда App Store блокирует приложение по формальным признакам, остаётся не так много вариантов. Но можно пойти через альтернативный маркетплейс — и вот как это работает на практике.

Наше приложение не прошло модерацию App Store по Guideline 1.2: механика, в которой пользователи оценивают фото друг друга, оказалась под запретом как категория. Правки метаданных тут не помогают. Так мы оказались в числе первых, кто распространяет iOS-приложение исключительно через стороннюю площадку. Документации по этому пути мало, а кое-где она и вовсе противоречива, так что делимся пошаговым опытом.

Шаг 1. Подписываем дополнение к договору
В App Store Connect нужно оформить Alternative Terms Addendum. Для этого необязательно быть резидентом ЕС. До миллиона первых установок в год дистрибуция бесплатна (для компаний с выручкой до €10M действует освобождение от Core Technology Fee).

Шаг 2. Привязываемся к маркетплейсу
У AltStore есть REST API для регистрации developer ID. Важный момент: это UUID из профиля ASC, а не Team ID — на Team ID регистрация молча отказывает, мы на это наткнулись. Токен затем добавляется в App Store Connect: раздел Users and Access → Integrations → Marketplaces.

Шаг 3. Нотаризация вместо ревью
Сборку загружаем через обычный xcodebuild + upload. Дальше вместо «Submit for Review» запускается нотаризация — автоматизированная проверка безопасности и работоспособности, которая не смотрит на контент. В нашем случае она прошла с первого раза, на всё ушло около 30 часов. Та самая механика, которую заблокировали в App Store, здесь работает без проблем.

Шаг 4. Самостоятельный хостинг ADP
Скачиваем Alternative Distribution Package: внутри manifest.json, файл signature (без расширения!) и варианты .ipa. Этот набор нужно хостить строго в исходном виде. Вот с чем столкнулись: файл signature без расширения — наш SPA-fallback на ASP.NET отдавал вместо него index.html (проблему решили через ServeUnknownFileTypes); .ipa-файл должен отдаваться как octet-stream.

Шаг 5. Source JSON и федерация
Создаём source.json: указываем marketplaceID, downloadURL манифеста, иконку, скриншоты и версии. Пользователь добавляет источник по ссылке altstore://source?url=… Если настроить федерацию (параметр fediUsername), приложение становится доступно через поиск внутри самого маркетплейса.

Ограничения и практические моменты
Маркетплейсы работают пока только в ЕС, Японии и Бразилии на iOS 17.4+. Для пользователей из других стран остаются PWA (standalone-манифест и service worker) и сайдлоад IPA через AltStore Classic со своим source. Главная проблема не техническая — конверсия: нужно объяснить пользователю, что вообще такое маркетплейс. Весь наш трафик теперь идёт на страницу с инструкцией.

Итого
Дополнительных расходов сверх аккаунта разработчика — ноль. По времени ушло около недели, большую часть заняли как раз недокументированные тонкости. Если App Store для вашего приложения закрыт или просто не хочется отдавать 15–30%, этот путь работает уже сейчас. Наше приложение — Rate Me (rateme.lv/ios).

Ссылка на основную публикацию