Отправить приложение в App Store и сразу получить approve — мечта каждого iOS-разработчика. На практике первый реджект получают больше половины новых приложений. Apple не спешит объяснять причины подробно, а Guidelines написаны так, что читать их можно бесконечно. Ниже — конкретный разбор того, что нужно проверить до сабмита, чтобы ревьюеры не завернули приложение обратно.
Почему вообще режут
Apple отклоняет приложения по нескольким крупным категориям. По статистике самой Apple, самые частые причины — это:
- Баги и краши (примерно 40% отказов)
- Неполная или вводящая в заблуждение информация в метаданных
- Нарушение правил конфиденциальности
- Проблемы с оплатой — обход In-App Purchase
- Несоответствие контента возрастному рейтингу
Важно понимать: ревьюеры — живые люди, они тестируют приложение руками. Если что-то сломается на их устройстве, придёт отказ. Если скриншоты не совпадают с реальным интерфейсом — тоже.
Технические требования: базовый чеклист
Прежде чем нажать Submit, пройдитесь по этому списку.
Сборка стабильна. Запустите приложение на реальном устройстве, а не только в симуляторе. Проверьте iOS минимальной версии, которую вы указали. Если написали поддержку iOS 15, а что-то валится на 15.0 — реджект гарантирован.
Нет обращений к приватным API. Apple прогоняет бинарник через автоматический анализ. Даже если вы сами не используете приватные методы, посмотрите, что делают сторонние SDK в вашем проекте. Некоторые старые версии библиотек грешат этим.
IPv6. Ревьюеры тестируют через сеть Apple, которая работает только по IPv6. Если ваш сервер или какой-то endpoint не поддерживает IPv6 — приложение не сможет подключиться. Проверяйте сеть через Network Link Conditioner с IPv6-only профилем.
Размер бинарника. Технического лимита нет, но приложения тяжелее 4 ГБ вызывают вопросы. Разумнее держаться в пределах разумного и использовать On-Demand Resources для тяжёлых ресурсов.
Разрешения. Каждый NSUsageDescription должен объяснять, зачем приложению нужен доступ. «Для работы приложения» — не объяснение. Напишите честно: «Камера нужна для сканирования QR-кодов». Запрашивайте только то, что реально используете. Приложение, которое просит доступ к контактам, но нигде их не применяет — красный флаг.
Метаданные и скриншоты
Это та часть, на которой горят даже опытные разработчики.
Скриншоты должны показывать реальный интерфейс. Никаких устройств, рук, людей поверх скриншота — только экран приложения. Если в скриншоте есть функция, которой нет в приложении, ревьюер это заметит.
Описание не должно упоминать конкурентов. Нельзя писать «лучше, чем X» или «замена Y». Вообще любые сравнения с другими приложениями — рискованная история.
Ключевые слова. Нельзя использовать названия других приложений или брендов как ключевые слова. Это отдельный пункт Guidelines, и его проверяют.
Иконка. Иконка в приложении должна совпадать с иконкой в App Store Connect. Также иконка не может содержать элементы, похожие на интерфейс самой Apple — логотипы, кнопки Home, значки системных приложений.
URL поддержки и политика конфиденциальности. Оба должны работать. Ревьюеры переходят по ссылкам. Политика конфиденциальности — обязательна для всех приложений, даже если вы не собираете никаких данных. Просто напишите, что не собираете.
Конфиденциальность: самая растущая причина отказов
С 2021 года Apple серьёзно закрутила гайки в этой теме. ATT (App Tracking Transparency), Privacy Nutrition Labels, ограничения на IDFA — всё это нужно учитывать.
Privacy Nutrition Labels заполняйте честно. В App Store Connect есть раздел, где вы декларируете, какие данные собираете и для чего. Если заявили «данные не собираем», но в приложении есть Firebase Analytics — реджект или, хуже, удаление после публикации.
ATT-запрос оформляйте правильно. Если используете трекинг для рекламы, нужно запросить разрешение через ATT. Важно: нельзя показывать свой экран с объяснениями до системного запроса так, чтобы он заменял системный диалог. Дополнительный экран «зачем нам это нужно» — можно. Подменять системный диалог — нельзя.
Сторонние SDK. Каждый SDK в вашем приложении — потенциальный источник проблем с конфиденциальностью. С iOS 17 Apple требует Privacy Manifests от сторонних библиотек. Если используете популярные SDK (Amplitude, Adjust, Firebase), убедитесь, что у них есть актуальный .xcprivacy файл. Без него получите предупреждение или отказ.
Монетизация: обход In-App Purchase не прощается
Это один из самых жёстких пунктов. Apple очень болезненно реагирует на любые попытки направить пользователя на оплату в обход App Store.
Что нельзя:
- Давать ссылку на оплату на вашем сайте внутри приложения
- Показывать сообщения вроде «купите дешевле на нашем сайте»
- Использовать кнопки «Подписаться», которые ведут на веб-форму оплаты
Что можно:
- Читалки (Reader Apps) могут не предлагать подписку внутри приложения вообще, но тогда и ссылок на внешнюю оплату быть не должно
- Email-ссылка в профиле пользователя — ок, если это контакт поддержки, а не продажа
С 2024 года в США после решения суда по делу Epic разработчики могут вставлять ссылки на внешнюю оплату, но только с предупреждением от Apple и строго в рамках утверждённого формата. В других регионах это по-прежнему запрещено.
Демо-аккаунт и инструкции для ревьюеров
Это небольшая деталь, которая спасает от реджекта в 20% случаев.
Если в приложении есть авторизация — создайте тестовый аккаунт и укажите логин/пароль в поле «Notes for App Review». Ревьюер не будет регистрироваться сам. Если не может войти — отклонит приложение.
Если функциональность зависит от геолокации, Bluetooth, камеры или других условий, которые сложно воспроизвести — прикрепите видео. В том же поле Notes можно дать ссылку на короткий экранный видеозаписи. Это официально разрешено и реально помогает.
Если приложение работает с реальным оборудованием (например, умный дом), напишите в Notes, что без устройства часть функций недоступна, и покажите скриншоты или видео.
Возрастной рейтинг
Заполняйте анкету рейтинга честно. Если в приложении есть пользовательский контент — форумы, чаты, комментарии — ставьте «17+ Unrestricted Web Access» или хотя бы отмечайте наличие UGC. Приложения с чатом и рейтингом 4+ — красный флаг для ревьюеров.
Если контент может быть чувствительным, добавьте механизм жалоб на контент. Apple это ценит.
Что делать, если всё-таки отклонили
Получить реджект — не катастрофа. Главное — не паниковать и не переспрашивать ревьюера каждые два часа.
Читайте причину внимательно. Apple указывает конкретный пункт Guidelines. Откройте его, прочитайте полностью. Часто проблема чуть шире, чем кажется из описания.
Апелляция работает. Если вы уверены, что приложение не нарушает правил, используйте Resolution Center и объясните свою позицию спокойно, со ссылками на Guidelines. Иногда ревьюеры ошибаются. Апелляция рассматривается другой командой.
Не фиксите лишнее. Исправляйте только то, на что указали. Если начать переделывать половину приложения, может появиться новая причина для отказа.
Expedited Review. Если релиз критически важен по срокам — например, приурочен к событию — можно попросить ускоренное ревью. Злоупотреблять этим не стоит, но один раз сработает.
Когда лучше отдать разработку специалистам
Если приложение коммерческое и времени на итерации с App Store нет, имеет смысл сразу закладывать в разработку знание этих нюансов. Команда REEXY работает с мобильными проектами и понимает требования Apple — не только с технической стороны, но и с точки зрения метаданных, политик конфиденциальности и правильного оформления сабмита.
Это особенно актуально, если вы заказываете не просто разработку, но и последующую поддержку — обновления, новые фичи, реакцию на изменения в Guidelines. Apple регулярно меняет правила, и следить за этим должен кто-то, кто делает это постоянно.
Перед каждым сабмитом: быстрый чеклист
- Приложение не крашится на реальном устройстве минимальной поддерживаемой версии iOS
- Все разрешения объяснены в Usage Description
- Сеть работает через IPv6
- Нет обращений к приватным API
- Privacy Nutrition Labels заполнены честно
- Политика конфиденциальности открывается по ссылке
- Скриншоты соответствуют реальному интерфейсу
- Есть демо-аккаунт для ревьюера
- Возрастной рейтинг выставлен адекватно контенту
- Нет ссылок на внешнюю оплату (если вы не в программе для Reader Apps)
- Privacy Manifests есть у всех сторонних SDK
Пройтись по этому списку занимает час. Зато экономит неделю ожидания реджекта и повторного ревью.