Трудный путь новичка в топ 5 русского App Store
Приветствую всех. Являясь большим поклонником продукции одной известной фруктовой компании, решил попробовать свои силы в разработке под iOS. И вот хочу поделиться своим опытом и трудностями, с которыми я столкнулся, во время написания и публикации своего, фактически первого, приложения в App Store. Может быть, мой опыт окажется кому то полезным. А трудностей было предостаточно. В процессе публикации в App Store приложение было 2 раза отклонено и третий раз висело 6 дней в статусе «In Review». В итоге моя настойчивость победила, приложение опубликовали и оно попало в пятерку русского App Store в категорию Top Free iPhone Navigation Apps. И так все по порядку.
Идея возникла фактически сразу
У меня ребенок ходит в школу, которая далеко от дома. Конечно же хочется после уроков ему позвонить и проконтролировать, как он там добирается. Но вот беда, в школе заставляют переключать мобильный в режим «без звука», а переключить его обратно он всегда забывает. И конечно меня жутко раздражает, когда я ему звоню 10 раз, а трубку никто не берет. Так и возникла идея, для себя и для других родителей, написать приложение, которое будучи установленным, на телефон, в фоновом режиме передавало бы координаты телефона на сервер. А родители могут либо на сайте, либо на своем телефоне в любой момент посмотреть, где находится их ребенок. Другими словами стояла задача написать обычный GPS трекер, работающий в фоновом режиме, для iPhone. Название для приложения пришло сразу Child locator, и я принялся за работу.
Программирование
Да я знаю, что велосипед уже давно изобретен, и GPS трекеры уже есть в App Store и не один. Но чем то они мне все не нравились. Средства разработки у меня имелись. Зарегистрироваться в девелоперской программе Apple никакого труда не составило. Сам процесс программирования был не сложен, у Apple все подробно описано (правда как оказалось в дальнейшем, далеко не все). Сам функционал занял где то всего 20% как по времени написания, так и от общего объема кода. Все остальное время ушло на интерфейс. Начинаю тестировать и вот первая проблема: через десять минут работы фоновый процесс тихо погибает и перестает передавать координаты на сервер. Лезу в документацию и на форумы и выясняю, что Apple дает каждому фоновому процессу 10 минут, чтоб закончить все незавершенные операции и потом «убивает» его. Что бы фоновый процесс работал дольше чем 10 минут, надо явно прописать в файле info.plist что приложение геолокационное. Хорошо прописал, все равно что то не то. То работает то не работает. Начинаю разбираться и выясняю, что Apple очень не любит, когда приложения работают в фоне напрасно. Получается если интервал времени, через который фоновый процесс определяет координаты, меньше 10 минут то все в порядке, все работает. Если вдруг ваш фоновый процесс 10 минут «бездельничал» то iOS «убьет» его, как бы он не был прописан в info.plist. А у меня в настройках максимальный интервал через который определяются координаты 30 минут, по этому пришлось, независимо от настроек сделать таймер и каждые 9 минут опрашивать GPS приемник. И эта проблема решена. Но проблемы, на этом не закончились. Начались проблемы с точностью. Пока приложение активно- точность отличная, иногда погрешность всего 5 метров. Только перевожу в фоновый режим и погрешность сразу почти 1500 метров. А кому нужен GPS трекер с погрешностью полтора километра. Опять читаю форумы оказывается в Apple очень не рекомендуют использовать GPS в фоновом режиме, и при переводе в фоновый режим вместо GPS координат мне подсовываются координаты, определенные по вышкам сотовой связи. Нахожу на форумах какой то «шаманский код», который создает в фоновом режиме фейковый mapview. Заработало, точность значительно улучшилась. Конечно остались сомнения, как к этому отнесется Apple в процессе ревю, но время покажет. Интерфейс приложения сделан на русском языке, предусмотрены удобные настройки, по принципу настроил один раз, перевел в фоновый режим и дальше все работает автономно. Можно задать интервал, через который будут определяться координаты телефона, а также время начала и завершения отслеживания. Другими словами если ребенок идет в школу на 9.00 часов, а приходит в 14.00, то достаточно в настройках указать время старта 8.00 и время завершения 15.00 и каждый день приложение будет автоматически «просыпаться» в 8.00 и завершаться в 15.00, передавая координаты телефона на сервер. А все остальное время программа будет в спящем режиме, экономя заряд аккумулятора и интернет трафик. Местонахождение отслеживаемого телефона можно посмотреть не только на сервере, но и со своего мобильного. Сайт, который показывает местоположение телефона, сделал быстренько и простенько. Признаться, я не большой специалист по сайтам. Работает и ладненько.
Прохождение ревю
Начиналось все как обычно. Залил приложение через Xcode. Через семь дней появился статус «In Review». А проснулся утром, и в почте письмо от Apple, что приложение отклонено. Я где то и рассчитывал на такое. Зная трепетное отношение Apple к «privacy» и недавний скандал, в котором их обвиняли, что они тайно собирали координаты пользователей, я предполагал что придётся объясняться. Наивно было думать, что программа, отправляющая в фоне координаты мобильного на какой то сервер, сумеет быстро пройти ревю. Читаю в чем претензии. Потребовали логин и пароль к тестовому аккаунту с правами администратора и добавить в описание программы, что работа GPS в фоновом режиме плохо закончится для вашего аккумулятора. Хорошо. Текст в описание добавил, логин и пароль выслал. Приложение не перезаливал. В течении суток статус опять стал «In Review», а на следующее утро опять отказ. Опять разбираюсь. Получив логин и пароль они попробовали программу в работе, а там есть такая опция, что местоположение телефона можно найти не только на сайте, но и с другого телефона зная логин и пароль того телефона, который ищется. И когда местоположение телефона выводится на экран, там есть кнопка «закрыть», которая, видите ли, закрывает часть логотипа Google на карте, а это очень плохо, так что переделывайте бинарник дорогой товарищ, а за одно напишите что у вас за прога такая, что ей нужен GPS в фоновом режиме, а без него вы никак не обойдетесь. Бинарник переделываю, заливаю опять, объяснение на ломанном английском пишу. Программа опять переходит в статус «In Review», и висит этот статус 6 дней, хотя обычно одного дня хватает. Я начинаю волноваться, может Apple забыл про меня, но тут приходит долгожданное согласование и программа в App Store.
App Store
Приложение я писал для себя, особо ни на что не рассчитывал, рекламу в него не вставлял и зарабатывать на нем не планировал. Это была, так скажем, проба пера, но, конечно было интересно, как воспримет мой труд аудитория. Приложение опубликовалось 20 сентября. Днем я был занят по работе, а после обеда решил посмотреть как там поживает моя программа. Открыл iTunes и увидел что приложение где то на 78-м месте Top Free iPhone Navigation Apps. Вот и чудненько, подумал я и продолжил работать. Вечером я опять глянул на рейтинг программа была уже на 55-м месте. Вот тут мне уже стало интересно и я начал наблюдать. Вечером 21 сентября приложение вошло в десятку Top Free iPhone Navigation Apps русского App Store, а 25 сентября стало 4-м. Я и не предполагал, что так много школьников имеют iPhone. Хотя, подозреваю, что она используется и для других целей. Кстати 4-е место, если кому интересно, это где то 1000 загрузок в день.
Послесловие
Разрабатывать под iOS мне понравилось. Что было положительного. Понял на практике как устроен App Store, ведь читать статьи и попробовать самому это две большие разницы. Получил несколько предложений о трудоустройстве от известных компаний. В планах написание следующей программы, но уже платной. Идея уже есть. Из отрицательного- техподдержка самая неблагодарная работа в IT. Из писем, присланных мне пользователями, у которых что то не получалось, можно составить целый comedy club. И самое главное, хочется опровергнуть миф о том, что время одиночек в App Store прошло, и настало время монстров с гигантскими рекламными бюджетами. Думаю, что если приложение реально решает проблемы людей оно будет популярно. Хотелось бы всем начинающим разработчикам под iOS, пожелать не бояться пробовать свои силы.
P.S. Конструктивную критику (не переходящую на личности) воспринимаю положительно. Мое приложение отличается от Find My iPhone. Про 95% недостатков моего приложения мне уже написали пользователи. Со следующим апдейтом постараюсь исправить. .