Привет.
Представляю вам очередную историю в духе «Мой первый фонарик в App Store».
![](https://habrastorage.org/r/w1560/storage2/554/5f9/3e6/5545f93e67143bb09ac74f25a16ee8b0.png)
Начну с того, что я давно разрабатываю под .NET. Всякие С#, ASP.NET, Winforms, WPF мне уже снятся. Я вот даже сейчас пишу эту статью и параллельно дебажу очередную формочку на WPF, которой никто кроме заказчика пользоваться не будет.
В итоге, с периодичностью в пару месяцев, меня посещает мысль «Доколе? Надо сделать что-нибудь общественно полезное и интересное!».
Но вот идеи чего-нибудь общественно полезного, нужного и ещё не сделанного меня посещать отказывались.
Всё кардинально изменилось благодаря моей жене, которой настала пора наконец сделать диплом. Мне же это грозило тем, что единственный в семье макбук она на неопределенное время экспроприирует. Что делают айтишники, оторванные от компьютера и от жены? Правильно, пьют пиво и смотрят сериалы. Сериалы я к тому моменту долго и успешно смотрел на soap4.me. И вот меня, оставшегося наедине со своим айфоном, посетила мысль, что я ведь наверняка такой не один. Многим было бы удобно лечь на диван со своим айпадом и, включив новую серию чего-нибудь, отрастить себе лишний сантиметр т.н. пивного живота. Так и появился повод применить полученные из книг, статей, видеоуроков и кучи хэллоуворлдов знания по Objective-C/Cocoa Touch.
Возрадовавшись, я тут же написал парням из soap4.me, что вот он я, альтруистический чел, который напишет вам приложение под iOS. И тут же на меня навалилась гора из WPF, Winforms, SQL и прочего на основной работе, так что с мыслями об общественно полезных делах пришлось на время завязать. Жена тем временем доделала диплом, вернула мне макбук, и жизнь пошла дальше своим чередом. И вот наступил отпуск, который по некоторым семейным обстоятельствам мне предстояло провести не на берегу моря, а у родителей дома. В итоге, вооружившись книгами и видеоуроками, я начал делать свой общественно полезный Hello World, изредка перемежая это удовольствие с помощью родителям в хозяйстве.
Сразу подумав о том, что переведенные сериалы — это самый что ни на есть образец нелицензионного контента, я смирился с тем, что пользу обществу придётся нести через Cydia и только на девайсы с jailbreak. Но т.к. такое приложение очень хотелось использовать мне лично, помехой это не стало — энтузиазма было хоть отбавляй. Быстро было найдено решение, как разрабатывать под устройства с джейлом без участия в iOS Developer Program. Залив пару версий в репозиторий в Cydia, я начал сталкиваться с внезапными проблемами и понимать, что как-то это неудобненько. Мне даже довелось немного поумничать в комментариях к этой статье и поделиться некоторым своим опытом. В итоге, придя к выводу, что распространять обычные приложения, не несущие в себе смысла плотной интеграции с операционной системой, через Cydia не стоит, я решил раздавать приложение в виде простого .ipa файла, который пользователи с установленным AppSync могли устанавливать себе через Installous или iTunes. Так продолжалось довольно-таки долго, пока я не плюнул на всё и не решил попытать счастья в App Store.
Предварительно спросив советов на форумах и на Хабре, несмотря на абсолютное большинство ответов в духе «Да это без шансов, пацан!», я всё же решил попробовать опубликоваться. На случай отказа аргумент у меня был один: куча приложений для просмотра видео из ВКонтакте, которое ничуть не легальнее безобидных сериальчиков. На кону же, по сути, стояло лишь моё время и 100$ за участие в iOS Developer Program. Трактовав это всё как инвестиции в себя любимого, я приступил к делу. К тому времени желающих увидеть приложение в App Store собралось уже приличное количество, что только подогревало интерес к тому, чем же это всё закончится. Собрав армию заинтересованных бета-тестеров через TestFlight, оставалось только радовать их регулярными новыми версиями. Сам тестировал приложение тоже регулярно: если оставались силы, то перед сном смотрел по эпизоду их тех, которые у меня скопились непросмотренными за время разработки. К слову, о бета тесте: несмотря на примерно 30 зарегистрированных UDID, судя по данным TestFlight, пользовалось приложением от силы 40% пользователей. Ценный фидбек был только от пары-тройки пользователей, за что им конечно большое спасибо. Остальные 60% по сути оказались пустой тратой ценных мест для UDID, которых можно добавить только 100 в год.
И это при том, что все пользователи имели премиум-аккаунт на сайте, что в теории автоматически должно выделить из толпы только тех, кому действительно интересно было бы пользоваться приложением. Ну да ладно, бывает.
Получив множество ценных советов и выжав максимум из предоставляемого API, решил, что пора заканчивать бета-тест, и отправил приложение на рассмотрение цензорам. На успех я особо не надеялся, и особо не расстроился, когда увидел письмо о том, что приложение отклонено. Но прочитав причину отказа, я обрадовался. Приложение было отклонено по пункту 11.12 App Store Review Guidelines: т.к. для использования приложения необходим премиум-аккаунт, его покупка должна быть реализована через In-App Purchase. И ни слова об авторских правах на контент! Конечно, существовала вероятность, что это могло быть следующей причиной отказа, но всё равно это здорово замотивировало на дальнейшие действия. In-App Purchase я бросился реализовывать в тот же день ближе к ночи, и успел убедится, что это не так просто в моём случае. Во-первых, нужен был банковский аккаунт для вывода денег, которого у меня не было. Быть вовлеченным в бюрократические банковские процессы не входило в мои планы. Кроме того, не имея доступа к серверной части, реализация серверного кода тоже не обещала быть быстрой. В итоге благодаря одному из моих бета-тестеров было найдено приложение, работающее абсолютно по той же схеме, но при этом опубликованное в App Store.
Оно и было приведено как пример в Resolution Center с вопросом «А почему у них так же, но меня вы не пускаете?». То ли цензор попался вменяемый, то ли все они там такие, но мы сошлись на том, что я уберу из приложения ссылки на страницы сайт, откуда можно прямо или косвенно попасть на страницу покупки премиум-аккаунта, и всё будет ок.
Сделал я это быстро, параллельно добавив пару мелочей, и уже собрался отправить очередную версию на рассмотрение, как случилось очень печальное событие — у меня накрылся свежекупленный SSD, не поработавший и четырёх месяцев. Тогда это меня не особо-то расстроило, т.к. все важное, в том числе весь код вместе с локальным git репозиторием, был синхронизирован с Google Drive. Но следующие события повергли меня в шок, от которого я отходил целый день. В Google Drive лежали очень старые версии файлов, а файлы с описание UI (storyboard) и вовсе отсутствовали. При этом всякие там фоточки были синхронизированы. В общем, сделав для себя вывод, что у Google Drive большая беда с синхронизацией изменений в уже добавленных туда файлах, и громко поругавшись матом, я отменил купленную подписку и приобрёл подписку на Dropbox, куда перенес те 30% кода, которые у меня сохранились. Похандрив немного, решил не бросать всё на полпути, и начал все писать заново. Времени прошло немного, и в памяти оставались целые куски написанного кода, так что за следующих 3 дня всё было переписано с нуля, заодно отрефакторено и готово к очередной попытке публикации.
Неделю назад я отправил приложение на рассмотрение, и в рекордно короткие 6 дней на почту пришла посылка о том, что моё приложение Ready For Sale. Причем произошло это в воскресенье. Видимо цензоры прочувствовали все тяготы, которые мне пришлось пережить в процессе разработки, и вышли поработать в выходной, дабы меня порадовать.
Плодами моих трудов можно сполна насладиться, зарегистрировавшись на soap4.me, заплатив пару баксов в месяц и скачав приложение по ссылке.
Приложение функционирует на всех iOS девайсах с iOS >= 5.0 на борту.
Дизайнер из меня никудышный, поэтому внешний вид относительно спартанский, но людям нравится.
![](https://habrastorage.org/r/w1560/storage2/0a9/3bc/c66/0a93bcc66532e9c39f05bb4306c88f5b.png)
Дальнейших планов много:
— push уведомления о появлении новых эпизодов;
— синхронизация времени остановки эпизода между устройствами и браузером;
— обложки для сезонов;
— интерфейс для iPad.
Так же в планах есть рассказать о некоторых нюансах разработки, т.к. я искренне верю, что мне пришлось столкнуться с чем-то интересным и, опять же, кому-то полезным.
Что можно вынести из этого длинного опуса? Ну например то, что не надо делать поспешных выводов, бояться пробовать и бросать при неудачах на промежуточных этапах. Или то, что не надо скупится на 100$ в год, т.к. разработка и последующее распространение через Cydia — тот ещё геморрой. Или то, что App Store уже не тот. В общем, каждый вынесет что-то своё, но хочется верить, что это окажется полезным.
А пока качайте, регистрируйтесь и смотрите не обсмотритесь.
UPD. Просмотр 3G пришлось отключить из-за требований Apple, гласящих о том, что стриминг видео через сотовые сети должен быть реализован через HTTP Live Streaming, что в свою очередь накладывает много ограничений на формат предоставляемого контента. Поэтому в первой версии я решил сделать всё, что бы исключить лишние риски при публикации. В следующих версиях я «под шумок» попробую это ограничение убрать.
Представляю вам очередную историю в духе «Мой первый фонарик в App Store».
![](https://habrastorage.org/storage2/554/5f9/3e6/5545f93e67143bb09ac74f25a16ee8b0.png)
Идея!
Начну с того, что я давно разрабатываю под .NET. Всякие С#, ASP.NET, Winforms, WPF мне уже снятся. Я вот даже сейчас пишу эту статью и параллельно дебажу очередную формочку на WPF, которой никто кроме заказчика пользоваться не будет.
В итоге, с периодичностью в пару месяцев, меня посещает мысль «Доколе? Надо сделать что-нибудь общественно полезное и интересное!».
Но вот идеи чего-нибудь общественно полезного, нужного и ещё не сделанного меня посещать отказывались.
Всё кардинально изменилось благодаря моей жене, которой настала пора наконец сделать диплом. Мне же это грозило тем, что единственный в семье макбук она на неопределенное время экспроприирует. Что делают айтишники, оторванные от компьютера и от жены? Правильно, пьют пиво и смотрят сериалы. Сериалы я к тому моменту долго и успешно смотрел на soap4.me. И вот меня, оставшегося наедине со своим айфоном, посетила мысль, что я ведь наверняка такой не один. Многим было бы удобно лечь на диван со своим айпадом и, включив новую серию чего-нибудь, отрастить себе лишний сантиметр т.н. пивного живота. Так и появился повод применить полученные из книг, статей, видеоуроков и кучи хэллоуворлдов знания по Objective-C/Cocoa Touch.
Начало.
Возрадовавшись, я тут же написал парням из soap4.me, что вот он я, альтруистический чел, который напишет вам приложение под iOS. И тут же на меня навалилась гора из WPF, Winforms, SQL и прочего на основной работе, так что с мыслями об общественно полезных делах пришлось на время завязать. Жена тем временем доделала диплом, вернула мне макбук, и жизнь пошла дальше своим чередом. И вот наступил отпуск, который по некоторым семейным обстоятельствам мне предстояло провести не на берегу моря, а у родителей дома. В итоге, вооружившись книгами и видеоуроками, я начал делать свой общественно полезный Hello World, изредка перемежая это удовольствие с помощью родителям в хозяйстве.
Cydia.
Сразу подумав о том, что переведенные сериалы — это самый что ни на есть образец нелицензионного контента, я смирился с тем, что пользу обществу придётся нести через Cydia и только на девайсы с jailbreak. Но т.к. такое приложение очень хотелось использовать мне лично, помехой это не стало — энтузиазма было хоть отбавляй. Быстро было найдено решение, как разрабатывать под устройства с джейлом без участия в iOS Developer Program. Залив пару версий в репозиторий в Cydia, я начал сталкиваться с внезапными проблемами и понимать, что как-то это неудобненько. Мне даже довелось немного поумничать в комментариях к этой статье и поделиться некоторым своим опытом. В итоге, придя к выводу, что распространять обычные приложения, не несущие в себе смысла плотной интеграции с операционной системой, через Cydia не стоит, я решил раздавать приложение в виде простого .ipa файла, который пользователи с установленным AppSync могли устанавливать себе через Installous или iTunes. Так продолжалось довольно-таки долго, пока я не плюнул на всё и не решил попытать счастья в App Store.
App Store.
Предварительно спросив советов на форумах и на Хабре, несмотря на абсолютное большинство ответов в духе «Да это без шансов, пацан!», я всё же решил попробовать опубликоваться. На случай отказа аргумент у меня был один: куча приложений для просмотра видео из ВКонтакте, которое ничуть не легальнее безобидных сериальчиков. На кону же, по сути, стояло лишь моё время и 100$ за участие в iOS Developer Program. Трактовав это всё как инвестиции в себя любимого, я приступил к делу. К тому времени желающих увидеть приложение в App Store собралось уже приличное количество, что только подогревало интерес к тому, чем же это всё закончится. Собрав армию заинтересованных бета-тестеров через TestFlight, оставалось только радовать их регулярными новыми версиями. Сам тестировал приложение тоже регулярно: если оставались силы, то перед сном смотрел по эпизоду их тех, которые у меня скопились непросмотренными за время разработки. К слову, о бета тесте: несмотря на примерно 30 зарегистрированных UDID, судя по данным TestFlight, пользовалось приложением от силы 40% пользователей. Ценный фидбек был только от пары-тройки пользователей, за что им конечно большое спасибо. Остальные 60% по сути оказались пустой тратой ценных мест для UDID, которых можно добавить только 100 в год.
И это при том, что все пользователи имели премиум-аккаунт на сайте, что в теории автоматически должно выделить из толпы только тех, кому действительно интересно было бы пользоваться приложением. Ну да ладно, бывает.
Получив множество ценных советов и выжав максимум из предоставляемого API, решил, что пора заканчивать бета-тест, и отправил приложение на рассмотрение цензорам. На успех я особо не надеялся, и особо не расстроился, когда увидел письмо о том, что приложение отклонено. Но прочитав причину отказа, я обрадовался. Приложение было отклонено по пункту 11.12 App Store Review Guidelines: т.к. для использования приложения необходим премиум-аккаунт, его покупка должна быть реализована через In-App Purchase. И ни слова об авторских правах на контент! Конечно, существовала вероятность, что это могло быть следующей причиной отказа, но всё равно это здорово замотивировало на дальнейшие действия. In-App Purchase я бросился реализовывать в тот же день ближе к ночи, и успел убедится, что это не так просто в моём случае. Во-первых, нужен был банковский аккаунт для вывода денег, которого у меня не было. Быть вовлеченным в бюрократические банковские процессы не входило в мои планы. Кроме того, не имея доступа к серверной части, реализация серверного кода тоже не обещала быть быстрой. В итоге благодаря одному из моих бета-тестеров было найдено приложение, работающее абсолютно по той же схеме, но при этом опубликованное в App Store.
Оно и было приведено как пример в Resolution Center с вопросом «А почему у них так же, но меня вы не пускаете?». То ли цензор попался вменяемый, то ли все они там такие, но мы сошлись на том, что я уберу из приложения ссылки на страницы сайт, откуда можно прямо или косвенно попасть на страницу покупки премиум-аккаунта, и всё будет ок.
Nooooo.
Сделал я это быстро, параллельно добавив пару мелочей, и уже собрался отправить очередную версию на рассмотрение, как случилось очень печальное событие — у меня накрылся свежекупленный SSD, не поработавший и четырёх месяцев. Тогда это меня не особо-то расстроило, т.к. все важное, в том числе весь код вместе с локальным git репозиторием, был синхронизирован с Google Drive. Но следующие события повергли меня в шок, от которого я отходил целый день. В Google Drive лежали очень старые версии файлов, а файлы с описание UI (storyboard) и вовсе отсутствовали. При этом всякие там фоточки были синхронизированы. В общем, сделав для себя вывод, что у Google Drive большая беда с синхронизацией изменений в уже добавленных туда файлах, и громко поругавшись матом, я отменил купленную подписку и приобрёл подписку на Dropbox, куда перенес те 30% кода, которые у меня сохранились. Похандрив немного, решил не бросать всё на полпути, и начал все писать заново. Времени прошло немного, и в памяти оставались целые куски написанного кода, так что за следующих 3 дня всё было переписано с нуля, заодно отрефакторено и готово к очередной попытке публикации.
Это успех!
Неделю назад я отправил приложение на рассмотрение, и в рекордно короткие 6 дней на почту пришла посылка о том, что моё приложение Ready For Sale. Причем произошло это в воскресенье. Видимо цензоры прочувствовали все тяготы, которые мне пришлось пережить в процессе разработки, и вышли поработать в выходной, дабы меня порадовать.
Плодами моих трудов можно сполна насладиться, зарегистрировавшись на soap4.me, заплатив пару баксов в месяц и скачав приложение по ссылке.
Приложение функционирует на всех iOS девайсах с iOS >= 5.0 на борту.
Дизайнер из меня никудышный, поэтому внешний вид относительно спартанский, но людям нравится.
![](https://habrastorage.org/storage2/0a9/3bc/c66/0a93bcc66532e9c39f05bb4306c88f5b.png)
Дальнейших планов много:
— push уведомления о появлении новых эпизодов;
— синхронизация времени остановки эпизода между устройствами и браузером;
— обложки для сезонов;
— интерфейс для iPad.
Так же в планах есть рассказать о некоторых нюансах разработки, т.к. я искренне верю, что мне пришлось столкнуться с чем-то интересным и, опять же, кому-то полезным.
Что можно вынести из этого длинного опуса? Ну например то, что не надо делать поспешных выводов, бояться пробовать и бросать при неудачах на промежуточных этапах. Или то, что не надо скупится на 100$ в год, т.к. разработка и последующее распространение через Cydia — тот ещё геморрой. Или то, что App Store уже не тот. В общем, каждый вынесет что-то своё, но хочется верить, что это окажется полезным.
А пока качайте, регистрируйтесь и смотрите не обсмотритесь.
UPD. Просмотр 3G пришлось отключить из-за требований Apple, гласящих о том, что стриминг видео через сотовые сети должен быть реализован через HTTP Live Streaming, что в свою очередь накладывает много ограничений на формат предоставляемого контента. Поэтому в первой версии я решил сделать всё, что бы исключить лишние риски при публикации. В следующих версиях я «под шумок» попробую это ограничение убрать.