Pull to refresh

Путь новичков-оптимистов в лабиринте iOs разработки. Дорогу осилит идущий

Development for iOS *
Sandbox
image
15 июля 2010 года. За утренним чаем весь коллектив нашей конторы с восторгом рассматривал интерактивную книгу “Alice in Wonderland” от Atomic Antelope на iPad'е.

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

  • детский писатель;
  • художник;
  • программист;
  • переводчики (мы сразу решили делать английскую и испанскую версии нашей книги).


Техническая база у нас на работе и дома уже была — техника Apple в наличии имелась.

Надо сразу сказать, что по роду деятельности к разработке приложений мы не имели ни малейшего отношения, поэтому весь процесс создания книги представляли себе крайне смутно.

Теперь, спустя год, когда мы уже работаем над новыми книгами, мы сразу добавляем в список следующие пункты:
  • много-много терпения;
  • очень много свободного времени (потому что в рабочее время нужно  работать на основной работе);
  • четкое понимание того, для детей какого возраста будет предназначена книга.

Осознание таких вещей приходит только с опытом, а тогда двое наивных энтузиастов были преисполнены светлого оптимизма и желания сделать красивую и интересную вещь.

С первыми двумя позициями списка мы разобрались довольно легко — Екатерина Оковитая, детская писательница, была нашей хорошей знакомой. Она уже издала несколько своих успешных детских книг, которые сама же и иллюстрировала. Наша затея ей очень понравилась и она начала работать над текстом и картинками. Всю изобразительно-литературную часть работы мы доверили ей. Иногда только собирались вместе и обсуждали какие-то спорные моменты.

image

Наивных, но работящих энтузиастов стало трое.

Сейчас понятно, что на этом этапе мы тоже были немного неправы — не стоило все творческие моменты оставлять одному человеку, так как коллективным разумом можно найти более интересные и оптимальные решения (особенно для анимации и интерактива). Черновики, конечно, лучше делать всем вместе. И веселее и продуктивнее. А уже когда наброски текста и скетчи иллюстраций готовы и примерно продумана анимация, тогда каждый может доводить до совершенства свою часть работы.

С программистом было сложнее. Знакомые программисты у нас были, но все они были абсолютно не знакомы с iOS и вообще мало себе представляли класс устройств, под который планировалась разработка. Но мы все же решили поискать среди друзей и тех, кто был бы готов за некоторый гонорар оказать нам помощь.

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

Окончание проекта запланировали на декабрь — чтобы успеть к Новому Году. Наивность трех энтузиастов не знала предела.

Разработка концепции

Со стилистикой иллюстраций определились практически сразу — мы запланировали примерно 35 страниц, из которых только 7-10 предполагалось сделать анимированными, на остальных должен был быть просто текст со статичными иллюстрациями. Также мы решили добавить несколько простых мини-игр, чтобы детям было веселее читать. Для этой книжки мы отдали предпочтение вертикальной ориентации страниц (так электронная книжка была больше похожа на классические бумажные), а анимацию решили делать не очень сложную, чтобы можно было качать, двигать, бросать какие-нибудь объекты, речь о которых идет на конкретной странице.

image

Тогда нам показалось, что больших сложностей с этим возникнуть не должно. Выводи себе статичную картинку с фоном и текстом, и еще один объект, который будет реагировать на нажатия — ничего сложного; да процедуру перелистывания страниц напиши. И все — дальше повторить этот код 35 раз, и книжка готова.

Из нескольких черновых набросков страниц в pdf-формате было собрано техзадание, по которому программист мог бы собирать книгу.

Параллельно с поиском нужных людей мы решили осваивать objective-c  самостоятельно, чтобы просто иметь общее представление о том, как пишутся программы для iOS-устройств. Накачали себе целую библиотеку учебников по objective-c и начали сами собирать простые примеры типа hello world. Да-да! Не смейтесь! Одиннадцать лет назад кроме delphi и турбопаскаля у меня в университете ничего не было, и о Сишных языках я вообще представления не имел. Примеры кода искали, само собой, через поисковики. Главное открытие пришло по ключевым словам “page turn transition iOS objective-c”. Google вывел меня на страничку форума cocos2d — надстройки над Xсode, которая очень сильно облегчала жизнь при работе с графикой и анимации спрайтов.

Мы сейчас не откроем Америку, но cocos2d нас просто спас! Обнаружилось, что для него есть огромное количество примеров и видеоуроков, в которых на пальцах объяснялось, как  с его помощью писать всякие интересные  мелочи. Так, вдохновившая нас Алиса тоже оказалась собрана на cocos2d, правда, с использованием физического движка под названием chipmunk.

Перед моим отъездом в отпуск мы купили себе годовой аккаунт
разработчика и почувствовали себя настоящими iOS-девелоперами. Шел сентябрь. Мы толком даже не начали разработку.

Первые проблемы и их решения

Поиск программистов все более разочаровывал. Понятно, что больших денег профессионалам мы заплатить не могли, а друзья как-то не горели энтузиазмом осваивать новые направления программирования. Один знакомый все же согласился нам помочь за скромное вознаграждение, но так как работать у него получалось довольно редко, то прогресс шел очень медленно.

Однажды вечером, вернувшись от программиста домой, я решил, что если самому не форсировать события, то дело затянется до бесконечности. Открыл сайт с мануалами по cocos2d и начал последовательно проходить уроки для самых начинающих. Просто по шагам — lesson1-lesson2-lesson3…

За тот вечер я научился подгружать спрайты и листать страницы. Так как черновики страниц у нас уже были, то на следующее утро мы имели прототип книжки из трех страничек, которые состояли из бэкграунда с текстом и спрайта, который двигался, хотя и не реагировал ни на нажатие, ни на акселерометр. Но для нас это был настоящий прорыв. Произошло это уже в середине осени. Примерно в октябре. Да, в начале работы мы страшно буксовали.

Постепенно Екатерина собрала черновую верстку всей книги.

image

Мы добавили к первоначальному проекту еще несколько страниц с иллюстрациями на весь разворот, и теперь можно было собрать полноценный прототип приложения. А дальше просто подменять страницы с черновиками чистовыми рисунками и делать на них анимацию. Полный прототип книжки был готов в ноябре. К этому времени процесс работы был уже налажен и имел следующий вид: примерно раз в неделю мы получали от Кати новую иллюстрацию, усилиями коллективного разума придумывали для нее анимацию, потом, пока рисовалась следующая картинка, реализовывали все задуманное.

Готовую иллюстрацию мы нарезали на отдельные спрайты, верстали в Xcode, терзая интернет в поисках ответов на заковыристые вопросы, возникавшие при программировании новых страниц. Если ответов так и не находилось, то я обращался к знакомому программисту, и мы вместе думали, что можно сделать.

В поисках решений для программирования анимации были найдены замечательные сайты с прекрасными уроками для самых начинающих. Почти «Учебник за первый класс, вторую четверть. Для младшего программистского возраста». Если кому будет интересно, дам ссылки. Так же были куплены пара электронных книг по cocos2d. И почти  каждый  вечер я зависал на форумах в поисках ответов на свои вопросы.

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

Аппетит приходит во время еды

Программирование стало настолько интересным (да и времени между получением новых иллюстраций было достаточно много), что постепенно мы стали добавлять анимацию на все страницы, отходя от первоначального замысла. Довольно часто это приводило к тому, что часть объектов приходилось дорисовывать или перерисовывать совсем, что в свою очередь увеличивало время работы над книжкой. Но мы уже не могли остановиться.

То, что мы не могли реализовать либо технически (из-за нехватки знаний по objective-c), либо по причине отсутствия свободного времени, мы записывали в wish-лист, чтобы реализовать эти идеи в апдейтах или в следующих книгах. Сейчас примерно раз в месяц мы выпускаем апдейты для книжки, совершенствуя и усложняя анимацию.

Очень хотелось добавить красивой и интересной анимации, основанной на физических движках. Пытался поизучать движок сhipmunk, однако он оказался сишным, а изучать еще и С параллельно с objective-с — это было уже выше моих сил. В какой-то момент ситуацию спас урок по space manager — надстройке над cocos2d, которая позволяет писать chipmunk'овские фишки на objective-c. Какие-то простые вещи мы смогли реализовать подобным способом. Но идею сотрудничества с профессиональным программистом мы не оставили. Сложные вещи делать своими силами абсолютно нерационально. Профессионал справится с такими задачами значительно быстрее и правильнее. И сейчас, работая над новыми книгами, мы продолжаем искать программиста в свою команду.

Страшный баг

image

В процессе разработки в программе обнаружился страшный баг, от
которого мы никак не могли избавиться. После перелистывания примерно 10-15 страниц приложение вылетало. Были какие-то проблемы с переполнением памяти, и мы никак не могли сами разобраться в чем было дело. Не хватало опыта разработки под iOS.

Дедлайн сдвинули сначала на середину февраля, потом на март… В итоге, с учетом собственных отпусков и других дел, после парочки качественных коллективных истерик мы установили окончательную дату релиза на 15 апреля.

Спасение пришло неожиданно и внезапно

Однажды на Хабре мы, давно не наивные энтузиасты, обнаружили анонс конференции ADCSpb для iOS-разработчиков в Санкт-Петербурге. Среди заявленных докладов был и доклад про написание игр в cocos2d. Естественно, такое мероприятие пропустить мы просто не могли. Нам нужно было как-то решить проблему нашего бага с вылетом книжки.

Конференция оказалась просто спасением для нас — мы познакомились со Станиславом Краснояровым, докладчиком по интересовавшей нас теме. И он согласился нам помочь! Примерно через неделю мы встретились в кафе, и за пару часов он нашел решение нашей проблемы. Это так здорово, когда есть люди, готовые поделиться опытом!

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

Релиз приближается… и приближается...

С конца февраля мы стали давать книгу для тестов друзьям и знакомым для того, чтобы определить, насколько наши представления о книге соответствуют впечатлениям объективных и вменяемых людей.

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

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

image

Обычно после каждого такого теста появлялось минимум 10-15 поправок. За несколько дней я вносил исправления в книгу. Затем мы снова находили податливую жертву и, после новых тестов, снова появлялось 10-15 поправок. Нам начало казаться, что этот день сурка будет длиться бесконечно. Но к середине марта число поправок начало постепенно снижаться и книжка приняла практически готовый вид.

Ой! Мы забыли про озвучание!

Еще один важный элемент интерактивной книжки, который я пока не затронул — это озвучка! Для книжки требуются мелодии для меню и
некоторых страниц, озвучание героев, шелест перелистываемых страниц… Что делать? Композитор бы обошелся нам крайне недешево, и надо было как-то решать очередную возникшую проблему. Мы обреченно вздохнули, засучили рукава и начали работать.

Как оказалось, родное эппловское программное обеспечение вполне позволяет сделать звуковое сопровождение приложения практически на коленках. Конечно, мы понимаем, что то, что мы записали, далеко от работы профессионального композитора, но другого выхода на тот момент у нас не было.

Часть звуков на этапе программирования я записывал сам на встроенный в мой MacBook Pro микрофон. После некоторой доработки в SoundtrackPro они звучали довольно неплохо, и мы решили, что если записать все необходимые нам аудио-эффекты в хорошо звукоизолированном помещении, то с озвучкой мы справимся сами.

Договорившись с друзьями, у которых есть своя маленькая
звукозаписывающая студия, в одну из мартовских суббот мы собрались в тесном душном помещении и хором принялись издавать нечеловеческие звуки.

Как оказалось, многие предметы звучат совсем не так, как мы обычно слышим их в кино или играх. Например, звон ключей крайне тяжело записать, пользуясь настоящими ключами. Они просто не звучат так, как надо! Фабрика грез совсем испортила рядовым зрителям слух. То же касается и звуков захлопывающихся дверей, топота ног и зловещих криков.

Что-то потом пришлось дорабатывать в звуковом редакторе, а что-то писать, искажая звук прямо на лету. Например, смех, доносящийся из
телевизора, мы писали с мобильного телефона. Позвонили подруге, голос которой очень подходил для этих целей и она нам в трубку посмеялась. Мелодии для меню и некоторых страниц мы собирали в замечательной маковской программке Garage Band. Что-то даже писали в версии Garage Band для iPad, от которой мы просто в восторге! Конечно, в дальнейшем мы думаем обращаться к профессиональным композиторам, но на данном этапе хорошо сами справились. Вроде неплохо.

И вот релиз!

Итак… Апрель 2011. Мы завершили работу над русской версией книжки и 23 числа отправили ее на релиз в App Store. Процесс отправки занял у нас… больше шести часов! Мешала масса всяких мелких проблем, решение которых приходилось долго искать по различным форумам. Поздним вечером, наконец, мы смогли отправить приложение в Apple.

image

Примерно через неделю нам пришел ответ, а точнее отказ, так как наше приложение не соответствовало высоким стандартам Apple Human Interface Guidelines… Правда, по не самой страшной причине — в свое время я отключил изменение ориентации экрана в зависимости от положения устройства (во многих других книжках, кстати, тоже так сделано). Пререкаться с Apple не хотелось, а хотелось как можно скорее увидеть свою книгу в App Store. Поэтому я вернул изменение ориентации, и мы отправили приложение во второй раз. Ожидание длилось еще примерно неделю. Мучительно долго… И, наконец, 10 мая мы были в App Store! Через несколько дней отправили и английскую версию, которую одобрили 19 мая.

Релиз свершился, что дальше?

С этого момента у нас начался следующий квест под названием «Продвижение приложения». Но об этом я расскажу когда-нибудь в следующий раз.

Резюмируя вышенаписанное, хочу заметить, что если бы каждый из нас попытался собрать что-то подобное в одиночку, то с вероятностью 99% проект бы не удалось довести до конца. У кого-то в процессе работы опускались руки от того, что что-то не получалось, кто-то впадал в ужас от все нарастающего объема неожиданной работы, иногда было просто лень что-то делать и требовалось, что бы кто-нибудь подтолкнул к работе или просто подбодрил. Работа в команде позволила легко преодолеть все эти трудности и проблемы. Да и наличие разных точек зрения на тот или иной элемент книги всегда помогало находить оптимальное решение или избегать ошибок, которые были незаметны каждому из нас по отдельности.

То что мы, не имея опыта разработки приложений, смогли начать и, главное, довести проект до конца, уже является для нас огромным достижением. А положительные отзывы покупателей — это самая лучшая награда. А для чего мы писали эту статью? Для того, чтобы люди, у которых есть идеи, не боялись браться за их воплощение, заранее пугаясь возможных сложностей. Реализованная собственными руками идея дарит огромное моральное удовлетворение добавляет немного уверенности в собственных возможностях. Да пребудет с нами (и с вами) сила!
Tags:
Hubs:
Total votes 137: ↑134 and ↓3 +131
Views 16K
Comments Comments 63