Какие сложности могут возникнуть при публикации в App Store и Google Play?

Публикация мобильного приложения в App Store (для iOS) и Google Play (для Android) является завершающим этапом разработки, но нередко именно здесь возникают сложности, связанные как с техническими требованиями платформ, так и с правилами модерации. Процесс включает подготовку артефактов (иконок, скриншотов, метаданных), настройку конфигураций, загрузку билда и прохождение модерации. Ниже подробно описаны возможные сложности, с которыми сталкиваются разработчики при публикации в оба стора.

Общие сложности для обеих платформ

1. Неверные подписи приложения

  • Требуется правильно сгенерированный сертификат (Android Keystore, iOS Distribution Certificate).

  • Приложения с неподписанными или неправильно подписанными файлами (.apk, .aab, .ipa) не принимаются.

  • На iOS нужен Provisioning Profile, связанный с правильным App ID.

2. Ошибки сборки

  • Использование неподдерживаемых архитектур (например, x86 в релизах).

  • Использование DEBUG-билда вместо RELEASE.

  • Некорректная конфигурация Entitlements, Bundle Identifier, Package name.

3. Неправильные или отсутствующие разрешения

  • Указание разрешений в AndroidManifest.xml и Info.plist обязательно.

  • Например, отсутствие описания NSCameraUsageDescription приводит к отклонению в App Store.

  • Запрос лишних или необоснованных разрешений вызывает отказ.

4. Ошибки в иконках и скриншотах

  • Неправильные размеры или формат (например, PNG вместо JPG).

  • Несоответствие требованиям плотности пикселей (dpi).

  • Скриншоты не соответствуют описанному функционалу.

5. Нарушение политики безопасности

  • Использование небезопасных API.

  • Наличие ссылок на внешние ресурсы без шифрования (HTTP вместо HTTPS).

  • Работа с пользовательскими данными без конфиденциальности или без запроса согласия.

Сложности при публикации в Google Play

1. Формат публикации: AAB вместо APK

  • С августа 2021 года Google требует загрузку .aab (Android App Bundle), а не .apk.

  • Xamarin-проекты должны быть настроены соответствующим образом.

2. Политика конфиденциальности

  • Для всех приложений требуется ссылка на политику конфиденциальности.

  • Отсутствие этого документа, даже если приложение не собирает данные, может привести к отказу.

3. Контент, нарушающий правила Google

  • Алкоголь, насилие, дискриминация, обман — все эти темы могут быть причиной блокировки.

  • Даже случайное использование слов может вызвать автоматический отказ.

4. Ошибка проверки Android App Bundle

  • Ошибки в коде ProGuard или Shrinker, неработающие build-скрипты.

  • Несовместимость с Android App Bundle-архитектурой.

5. Обязательное соответствие целевому API уровню

  • Каждый год Google требует обновления targetSdkVersion.

  • Например, в 2025 году минимальный targetSdkVersion может быть 33 или выше.

  • Слишком старые API вызывают автоматический отказ при загрузке.

6. Учет ограничений Scoped Storage

  • Начиная с Android 10+ необходимо использовать MediaStore и Storage Access Framework.

  • Прямой доступ к ExternalStorage блокируется.

7. Длительная модерация и необоснованные отказы

  • Ручная модерация может длиться от 3 часов до 7 дней.

  • Отказы могут быть без подробного объяснения — нужно подавать апелляции через поддержку.

8. Ошибки Google Play Console

  • Неверно заполненное поле категорий, контента, рейтинга контента (IARC).

  • Некорректные данные о монетизации и подписках.

Сложности при публикации в App Store (iOS)

1. Сложности с сертификатами и provisioning profile

  • Разработчики часто путают Development и Distribution сертификаты.

  • App ID, Bundle Identifier, Team ID должны строго соответствовать.

2. Отклонение при review за несоответствие Human Interface Guidelines

  • Apple строго следит за дизайном интерфейса, UX.

  • Низкое качество UI, а также несоответствие стандартам дизайна может привести к отклонению.

3. Использование частных API

  • Любая ссылка на закрытые API фреймворка (включая через библиотеки) — причина отказа.

4. Отказ из-за сбоя приложения при запуске

  • App Review команда тестирует приложение на реальных устройствах.

  • Отсутствие прав, падения при старте, баги приводят к моментальному отклонению.

5. Отказ из-за нарушения StoreKit или покупки

  • Если в приложении есть доступ к платному контенту, должен быть использован In-App Purchase.

  • Использование сторонних платёжных систем внутри приложения строго запрещено (в большинстве случаев).

6. Запрос ненужных разрешений

  • Если приложение не использует геолокацию, не следует указывать NSLocationWhenInUseUsageDescription — это вызовет подозрения.

7. Ограничения из-за сборов App Tracking Transparency

  • Если используется сторонняя аналитика (Facebook, Google Analytics), необходимо запрашивать согласие пользователя через AppTrackingTransparency.

8. Задержки при публикации

  • Время ревью может составлять 2–10 дней, особенно при первой публикации.

  • Отказы требуют внесения исправлений и повторной загрузки билда.

9. Указание верной информации в App Store Connect

  • Некорректно указанный возрастной рейтинг, отсутствующий URL политики конфиденциальности, или неполные описания — частая причина отказа.

Проблемы, связанные с Xamarin

1. Размер приложения

  • Приложения, собранные на Xamarin, часто весят больше, чем нативные аналоги, что может вызвать претензии со стороны App Store.

2. Поддержка 64-бит

  • Google и Apple требуют обязательной поддержки архитектуры arm64-v8a.

  • Необходимо включать нужные ABI при сборке.

3. Наличие ненужных библиотек

  • Использование неиспользуемых NuGet-пакетов увеличивает размер и может вызывать ошибки во время сборки.

4. Ошибки AOT-компиляции (iOS)

  • Xamarin.iOS использует Ahead-Of-Time компиляцию, и ошибки AOT могут возникнуть при неверном коде, reflection или использовании dynamic.

Специфические правовые ограничения

  • Для определённых стран (например, Иран, Крым) существуют ограничения на публикацию.

  • Приложения с шифрованием (например, мессенджеры) требуют экспортного разрешения в США для App Store.

Советы для успешной публикации

  • Использовать автоматизацию CI/CD (AppCenter, GitHub Actions) для сборки и подписи.

  • Перед публикацией пройти все этапы в TestFlight (iOS) и Internal Testing (Google Play).

  • Проверить все permissions, descriptions, localizations.

  • Убедиться, что используются последние версии SDK, актуальные библиотеки.

  • Подготовить политику конфиденциальности, техническую поддержку и страницу приложения заранее.

Публикация — не просто загрузка файла, а сложный регламентированный процесс, требующий точного соблюдения всех технических и юридических условий платформ.