Site icon AppTractor

Путешествие моего первого приложения: как пережить 5 отказов App Store

Федерико Занетелло из Kimchi Media рассказывает свою непростую историю взаимоотношений с App Store и о трех месяцах отказов от команды Apple.

В прошлом году я наконец решился: я купил Macbook и начал изучать Swift и разработку iOS приложений.

Типичный iOS разработчик в первый день своего обучения

Спустя 3 месяца* я отправил свое приложение в App Store: я был очень горд собой!

* Уточнение: я инженер ПО, у вас это может занять больше времени.

Swift – потрясающий язык и, смирившись с тем, что я не смогу знать в Cocoa Touch всего, никто не мог удержать меня от создания и запуска моего приложения. Как же я был неправ.

Приложение

Краткое описание приложения Stream for Twitter, которое я запустил:

The app was not found in the store. :-(

Stream for Twitter показывает вам новые твиты со всего света в реальном времени: просто добавьте всё, что вам интересно и будьте в курсе событий.

Отказ первый

Видите короткое сообщение выше? Вот таким образом Apple уведомляет вас о своем «нет», и что ваше приложение пока что не попадает в App Store.

Мое приложение довольно простое: я был сильно удивлен, когда проснулся и увидел отказ в своей почте.

Оказывается, review-команде даже не пришлось тестировать приложение, чтобы отклонить его: в описании приложения среди других сравнений я написал: «iOS vs. Android»:

3.1 Описание приложения не должно упоминать названия других мобильных платформ (Android, Windows Phone …).

В App Store Review 3.1 Guideline все предельно ясно: это отклонение – целиком моя ошибка. К счастью, код менять не нужно, меняем описание и снова отправляем приложение!

Отказ второй

На этот раз review-команда сослалась на App Store Review 14.3 Guideline:

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

Мое приложение не позволяет пользователю генерировать контент, оно просто предоставляет контент из Twitter (где вы можете пометить/блокировать всё, что хотите).

Если бы мне пришлось применить то, что было сказано (Stream использует только данные в реальном времени), от приложения не было бы никакого толку.

Если бы пользователь пометил твит, то тот твит бы был уже старым: он бы никогда не отобразился в Stream ещё раз!

Я думал, что правило 14.3 не применимо к моему приложению, поэтому я написал апелляцию, включив в неё все вышеперечисленные причины:

Команда App Review ответила на мою апелляцию в течение нескольких часов.

Ответ на апелляцию:

Усвоенный урок: если ваше приложение показывает пользовательский контент, внедрите механизм пометки сомнительного контента/блокировки/модерирования, даже если контент создается не внутри вашего приложения.

К моему счастью, Twitter API предлагает всё, что мне нужно:

  1. Механизм пометки  контента / сообщения о сомнительном контенте;
  2. Фильтр для правильного контента.

Пришло время для очередной подачи на рассмотрение!

Отказ третий

В ожидании каждой проверки я продолжал добавлять больше и больше функций в приложение, в какой-то момент я даже добавил нерасходуемые встроенные покупки.

Это было ошибкой, потому что встроенные покупки стали причиной нового отклонения из магазина.

Все встроенные покупки Stream были нерасходуемыми: после того, как пользователь покупал однажды, эта покупка могла быть приобретена (снова) сколько угодно раз уже бесплатно.

Я хотел добавить в приложение как можно меньше UI элементов: поскольку эти встроенные покупки могли быть «куплены» много раз бесплатно, я не сделал кнопку Restore.

Сообщение от review-команды:

После объяснения моей вышеизложенной логики, мне ответили:

Усвоенный урок: кнопка Restore должна быть!

На этот раз, вероятно из жалости, рецензент посоветовал мне подать заявку на ускоренную проверку (через форму Expedited Review Request) после того, как я добавил кнопку Restore.

Добавление кнопки Restore было самым быстрым: я просто перетащил кнопку в раскадровку, написал три строчки кода, соединяя UIButton с классом UIViewController.

Похоже, команда Expedited Review не проявила такого же сострадания как предыдущий рецензент. Мне пришлось ждать очередного раунда App Reviews.

Отказ четвертый

Тогда я засыпал с хорошим предчувствием, что я проснусь, а мое приложение одобрено, ха-ха, мечтатель:

На этот раз рецензент думал(а), что ему нужна особая Twitter авторизация, чтобы использовать приложение:

После того как я объяснил, что пойдет любой Twitter аккаунт, приложение снова было отправлено на рассмотрение и… было одобрено!

Это значит…что я, наконец, сделал это?

К сожалению, я передумал насчет названия приложения. Сейчас есть только один способ изменить название:

Поменял название, вперед за новым одобрением!

Отказ пятый

А вы ожидали чего-то иного?

Рецензент (предполагаю, новичок) использовал iPad и заявил, что он не может пройти экран Twitter авторизации: это экран, который возникает, когда вы запускаете Stream в первый раз.

Проблема была неясной, потому что рецензент неаккуратно обрезал скриншоты и написал сомнительное сообщение.

После обмена несколькими письмами я записал работу Stream на iPad на видео: приложение снова отправилось на рассмотрение и затем было принято!

Усвоенный урок: не думайте, что все члены review-команды знают, что делают.

Выводы:

После создания приложения всего лишь за 3 месяца, мне пришлось наслаждаться отказами еще 3 месяца. Это время, которое понадобилось на то, чтобы приложение наконец попало в App Store.

В течение этого времени я многое узнал: я надеюсь, что дал вам общее представление о моих неудачах и азарте, сопровождавших меня в этом путешествии.

Я бы хотел дать вам несколько советов для вашей следующей публикации приложения (<сарказм>после всего этого я  теперь эксперт</сарказм>):

Удачи вам с новой публикацией!

Exit mobile version