Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Опыт разработки
мобильных приложений
      в Applifto
       Анатолий Шарифулин
    Yet another Conference 2012
www.applifto.ru
       2
Опыт разработки мобильных приложений в Applifto
Опрос аудитории


#yac2012 #yamobile
                     4
Applifto — не Яндекс,
    но мы тоже делаем
собственные приложения :-)

#yac2012 #yamobile
                     5
Наши приложения




       6
Хорошо знакомо Яндексу? :-)
             7
Это первое и самое
     провокационное
       приложение

#yac2012 #yamobile
                     8
Но сейчас не об этом
        Тогда мы были молоды, только тсс...




#yac2012 #yamobile
                         9
Как только в команде
       больше, чем...

#yac2012 #yamobile
                     10
1 приложение


#yac2012 #yamobile
                     11
1 приложение
   1 версия приложения


#yac2012 #yamobile
                     12
1 приложение
  1 версия приложения
     1 программист

#yac2012 #yamobile
                     13
1 приложение
   1 версия приложения
      1 программист
      1 тестеровщик
#yac2012 #yamobile
                     14
Возникает потребность
  в автоматизации или
  упрощении процесса
       разработки
#yac2012 #yamobile
                     15
Возникает потребность
  в автоматизации или
  упрощении процесса
      тестирования
#yac2012 #yamobile
                     16
Возникает потребность
  в автоматизации или
  упрощении процесса
       публикации
#yac2012 #yamobile
                     17
Возникает потребность
  в автоматизации или
 упрощении получения
       статистики
#yac2012 #yamobile
                     18
Возникает потребность
  в автоматизации или
 упрощении получения
       аналитики
#yac2012 #yamobile
                     19
Возникает потребность
  в автоматизации или
 упрощении получения
       бла-бла-бла
#yac2012 #yamobile
                     20
Чем больше
        пользователей,
          тем выше
       ответственность
            Почти Сент-Экзюпери


#yac2012 #yamobile
                     21
• Качество и стабильность
   • Периодичные обновления приложений
   • Пользовательский фидбек
   • Безопасность приложения
   • ...
#yac2012 #yamobile
                     22
«Разработка» приложений
      превращается

#yac2012 #yamobile
                     23
Опыт разработки мобильных приложений в Applifto
Кодинг
Кодинг




         ...
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      27
1. Работа со сборками
       и профилями
       приложений

#yac2012 #yamobile
                     28
Cпособы установки
       приложения
   • Добавить в iTunes профиль и сборку,
     синхронизировать с девайсом
   • Выложить на сервер по FTP/SFTP,
     отправить письмо со ссылкой
     itms-services://?action=...&url=...

   • Веб-сервис для работы с профилями и
     сборками
#yac2012 #yamobile
                             29
Мы разработали свой
       веб-сервис
         Готовые решения не используем:
             TestFlight, HockeyApp, ...




#yac2012 #yamobile
                       30
31
• Простой и удобный сервис для
     разработчиков и бета-тестеров

   • Загрузка профилей и сборок приложений
   • История всех изменений и быстрый
     доступ к любой версии приложения

   • Свой, бесплатный и быстрый
     (в отличии от готовых решений)

#yac2012 #yamobile
                      32
• Автообновление приложений при
     выходе новой сборки

   • Всего сборок: 949+
   • Количество сборок:
     2010 — 8, 2011 — 526, 2012 — 415+



#yac2012 #yamobile
                     33
Автосборки проектов
      не используем
           Привет, Роман Бусыгин! :-)
          http://events.yandex.ru/talks/4/




#yac2012 #yamobile
                         34
Почему?
  • Один аккаунт разработчика,
    100 устройств — вполне достаточно
  • Приложение подписывается одним
    сертификатом (Dev и Distr), нет такой
    проблемы как в Яндексе
  • Не используем CI server-а,
    1 программист — 1 приложение (реже 2:1)

#yac2012 #yamobile
                      35
Почему?

  • Честно, я подходил несколько раз
    к программистам и спрашивал, нужно ли
    что-нибудь автоматизировать? :-)
  • Если мы были бы Яндексом, то тоже
    использовали автосборки, но пока нет


#yac2012 #yamobile
                      36
Была идея
         использовать
       разные профили
       для приложений:
        Dev и не-Dev
#yac2012 #yamobile
                     37
Есть ограничения:
   • Нужны новые Push-сертификаты
   • Нужно регистрировать отдельные
      «инаппы»
   • Синхронизация через iCloud работает
      для Dev-a
   • ...
#yac2012 #yamobile
                     38
Решили пока
         использовать
        разные иконки:
         Dev и не-Dev
#yac2012 #yamobile
                     39
Зачем?

   • При тестирование видно, что это
     Dev-версия или нет
   • Новые супер-фичи и NDA
   • У Dev-сборок может неожиданно истечь
     сертификат и приложение не будет
     запускаться

#yac2012 #yamobile
                      40
Главное: не забыть
      поменять иконку
      перед релизом :-)

#yac2012 #yamobile
                     41
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      42
2. Стандартное
      серверное API для
      всех приложений

#yac2012 #yamobile
                     43
Любое наше
   приложение работает
       с Applifto API

#yac2012 #yamobile
                     44
Applifto API
   • start — базовая информация про устройство
     (тип, модель, версия ОС, локаль, ...) и token,
     построение различных статистик и отправка
     «пушей»



   • stderr
#yac2012 #yamobile
                       45
Applifto API
   • start
   • stderr — отправка всех крешей с
     устройства (CrashReportSender),
     уведомление разработчика по почте,
     веб-интерфейс для просмотра всех крешей


   •s
#yac2012 #yamobile
                      46
Applifto API
   • start
   • stderr
   • feedback — в каждом приложение есть
     форма связи с нами, оперативное
     решение проблем


   •ы
#yac2012 #yamobile
                      47
48
Applifto API
   • start
   • stderr
   • feedback
   • about — страница информации или FAQ
     по приложению, текст меняется из админа
   • verify inapp
#yac2012 #yamobile
                     49
50
Applifto API
   • start
   • stderr
   • feedback
   • about
   • verify inapp — защита от взлома «инаппов»,
     проверка, рекомендованная Apple
#yac2012 #yamobile
                       51
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      52
3. Клиент-серверное
       взаимодействие

#yac2012 #yamobile
                     53
Почти все
  приложения работают
   с серверной частью

#yac2012 #yamobile
                     54
Стандартная модель API
     Подписанные запросы (md5 от параметров),
                  api_id и secret




#yac2012 #yamobile
                        55
Стандартная модель API
           Формат данных — JSON,
                иногда Plist




#yac2012 #yamobile
                     56
Стандартная модель API
          Никогда не забываем про gzip!
                (клиент-сервер)




#yac2012 #yamobile
                       57
Удобное тестирование
       методов API
      через браузер
        Без генерации подписи (Dev-режим)




#yac2012 #yamobile
                       58
Обязательно: мониторинг
  клиент-серверного
    взаимодействия
      Легко найти ошибку на любой стороне,
                лишние запросы, ...



#yac2012 #yamobile
                       59
Частая ошибка:
длительная или неверная
 синхронизация данных

#yac2012 #yamobile
                     60
Для анализа данных
     или протокола
 сторонних приложений

#yac2012 #yamobile
                     61
Мы используем
 самописный форвардер
   запросов и ответов

#yac2012 #yamobile
                     62
А вдруг rocket science? :-)


#yac2012 #yamobile
                     63
Иногда совсем
          не «рокет»
      «На коленке» написанная серверная часть,
      безопасность данных вообще отсутствует




#yac2012 #yamobile
                         64
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      65
4. Управление
        приложениями

#yac2012 #yamobile
                     66
Единый админ для
      управления всеми
       приложениями

#yac2012 #yamobile
                     67
68
Работа с обратной
          связью

#yac2012 #yamobile
                     69
70
Reviews в App Store
       только бесят
       Колы и единицы vs. пятёрки и восторг
             Нет двусторонней связи




#yac2012 #yamobile
                        71
Очень часто
  пользователи «тупят»
    и ставят «плохие»
         оценки
#yac2012 #yamobile
                     72
Если возникла проблема,
   появился вопрос, ...


#yac2012 #yamobile
                     73
Сообщать нужно
   через обратную связь
      в приложении
       или на сайте
#yac2012 #yamobile
                     74
Во-первых, мы будем
    знать какой девайс,
       версии ОС и
       приложения
#yac2012 #yamobile
                     75
И быстро локализуем
       проблему

#yac2012 #yamobile
                     76
Во-вторых,
     вам точно ответят

#yac2012 #yamobile
                     77
В-третьих,
     Review в App Store
       для пятёрок :-)

#yac2012 #yamobile
                     78
Разбирая запросы в
      обратную связь,

#yac2012 #yamobile
                     79
Легко найти бета-
   тестеров, волонтёров
  и полезные знакомства

#yac2012 #yamobile
                     80
Cтатистика
       по приложениям

#yac2012 #yamobile
                     81
Мини-статистика
       по скачиваниям
         и продажам
          По данным из iTunesConnect




#yac2012 #yamobile
                      82
83
Плюс AppAnnie.com


#yac2012 #yamobile
                     84
Статистика по
  активным* устройствам
  * token устройства для приложения действительный




#yac2012 #yamobile
                         85
86
Плюс Localytics.com


#yac2012 #yamobile
                     87
Подробная статистика
            У «крутых» приложений есть
    собственный админ и расширенная статистика




#yac2012 #yamobile
                        88
Различные графики,
   хит-парады и разрезы
          данных

#yac2012 #yamobile
                     89
90
91
92
Важно: сразу
    продумывайте какая
     статистика нужна
       приложению
#yac2012 #yamobile
                     93
Бонус: если
     приложение часто
       бывает в топе
        «кассовых»,
#yac2012 #yamobile
                     94
То можно оценить
      оборот $ раздела
          в день

#yac2012 #yamobile
                     95
Рассылка
      Push-уведомлений

#yac2012 #yamobile
                     96
Типы «пушей»

   • Открытие приложения
   • Написать в обратную связь
   • Оставить отзыв в App Store
   • Переход на пункт меню или единицу
     контента

#yac2012 #yamobile
                     97
Фильтрация при отправке

   • Всем
   • Только тестовым устройствам
   • Выборочно
    • учитывая локализацию
    • определенной версии ОС и приложения
#yac2012 #yamobile
                     98
Чем чаще отсылаешь
    «пуши», тем число
   активных устройств
         точней
#yac2012 #yamobile
                     99
Не забывать:
        про поддержку
       «тихого режима»
        в приложении
#yac2012 #yamobile
                     100
101
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      102
5. Новые девайсы,
         версии ОС и
         приложений

#yac2012 #yamobile
                     103
Каждые полгода
  выходит новый девайс

#yac2012 #yamobile
                     104
Либо нужно увеличивать
 размеры приложений
       в 2 раза

#yac2012 #yamobile
                     105
Либо нужно увеличивать
 размеры приложений
    в 1.127 раза :-)

#yac2012 #yamobile
                     106
Либо исправлять глюки
       На new iPad появился «голубой экран»




#yac2012 #yamobile
                        107
108
Каждый год выходит
    новая версия iOS
    с новыми фичами

#yac2012 #yamobile
                     109
и иногда без обратной
      совместимости

#yac2012 #yamobile
                     110
В iOS 4.3 испортилась
      запись треков,
  добавилось шипение
  Apple без уведомления увеличил размеры буфферов
                    в два раза :-)



#yac2012 #yamobile
                        111
В iOS 5 запись
   полностью перестала
         работать

#yac2012 #yamobile
                     112
#yac2012 #yamobile
                     113
Минимальная
       поддерживаемая
         версия iOS?

#yac2012 #yamobile
                     114
Долго поддерживали
       все версии,
     начиная с 3.1.2

#yac2012 #yamobile
                     115
Чем дальше, тем
      больше костылей

#yac2012 #yamobile
                     116
Большое количество
       комбинаций:
    девайс и версия iOS

#yac2012 #yamobile
                     117
Везде протестировать
    нет возможности,
   о проблемах узнаём
   только после релиза
#yac2012 #yamobile
                     118
По статистике: в
       основном это
    < 7% пользователей

#yac2012 #yamobile
                     119
Так они ещё и колы
         ставят :-)

#yac2012 #yamobile
                     120
В итоге: решили
     поддерживать
последнюю объявленную
 и предыдущую версии
#yac2012 #yamobile
                     121
То есть сейчас
         iOS 5 и выше

#yac2012 #yamobile
                     122
Cледовательно,
     iPhone 3Gs и новее

#yac2012 #yamobile
                     123
Каждый месяц мы
  выпускаем обновления
      приложений

#yac2012 #yamobile
                     124
На самом деле — чаще
      В этом году мы выпустили 33 «апдейта»,
         половина — минорные обновления




#yac2012 #yamobile
                        125
Разработать «апдейт»
        несложно,

#yac2012 #yamobile
                     126
Легко всё разломать
у текущих пользователей

#yac2012 #yamobile
                     127
Цена ошибки — велика
     Исправить получится только после проверки
          приложения, а это от 5—10 дней




#yac2012 #yamobile
                        128
Обновление приложений
  — очень важный и
  сложный процесс!

#yac2012 #yamobile
                     129
Когда версия
 исправляет обновление
  предыдущей версии,

#yac2012 #yamobile
                     130
Это печально...


#yac2012 #yamobile
                     131
Хотя, судя по iOS 6,
     ошибки в новой
      версии — это
      «Apple way» :-)
        При Стиве Джобсе такого не было!


#yac2012 #yamobile
                       132
Раньше тестировали
      приложения все
     Программисты, менеджеры, бета-тестеры, ...




#yac2012 #yamobile
                         133
Это отнимало очень
      много времени
          И совершенно неэффективно!




#yac2012 #yamobile
                      134
Пытались работать
      с бета-тестерами
        Но они очень ленивые и медленные




#yac2012 #yamobile
                       135
В итоге: решились
     на «тестировщика»
  Это было сложное и кардинальное решение для нас :-)




#yac2012 #yamobile
                         136
Если в Яндексе
         работают
      «тестировщикИ»,

#yac2012 #yamobile
                     137
То у нас он один и
     универсальный :-)

#yac2012 #yamobile
                     138
• Он совсем не программист!
   • Тестирует на всех девайсах и
     поддерживаемых версиях ОС

   • Разбирает фидбек от пользователей
   • Есть список тестов и план тестирования
     по каждому приложению

#yac2012 #yamobile
                      139
Опыт разработки мобильных приложений в Applifto
Версионность


#yac2012 #yamobile
                     141
x.x — мажорный
           «апдейт»
      Важное обновление, новый функционал,
             разработка от 2х недель




#yac2012 #yamobile
                       142
x.x.x — минорный
          «апдейт»
        Исправление ошибок и улучшения,
              разработка 1—5 дней




#yac2012 #yamobile
                      143
x.x.x.x — Dev-версия,
     не для публикации
        Исправление ошибок и улучшения,
        в активной фазе каждые 1—2 дня




#yac2012 #yamobile
                      144
x.x.x.x — Dev-версия,
     не для публикации
        Обработка таких версий на сервере,
     включение дополнительного функционала:




#yac2012 #yamobile
                       145
x.x.x.x — Dev-версия,
     не для публикации
        проверка «инаппов» через sandbox,
         контент для продажи — free, ...




#yac2012 #yamobile
                       146
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      147
6. Безопасность
   приложений и борьба
       с «пиратами»

#yac2012 #yamobile
                     148
Раньше мы выпускали
      только платные
       приложения

#yac2012 #yamobile
                     149
Но их стали оперативно
  ломать и выкладывать
      на торренты

#yac2012 #yamobile
                     150
Из собственной
    статистики запусков
      мы обнаружили,

#yac2012 #yamobile
                     151
что пользователей
        больше, чем
       покупателей :-)

#yac2012 #yamobile
                     152
Некоторые «хакеры»
       тщеславны

#yac2012 #yamobile
                     153
#yac2012 #yamobile
                     154
Мы заблокировали
   версии на серверной
         стороне

#yac2012 #yamobile
                     155
#yac2012 #yamobile
                     156
И просили обновиться
     на новые версии

#yac2012 #yamobile
                     157
#yac2012 #yamobile
                     158
Но новые версии
       тоже ломали и
       выкладывали :-)

#yac2012 #yamobile
                     159
Мы перешли
    на Freemium-модель
       Бесплатные приложения с «инаппами»




#yac2012 #yamobile
                       160
Оказывается,
 «инаппы» можно ломать
  и делать бесплатными

#yac2012 #yamobile
                     161
И мы сделали
     проверку запросов
        на сервере
            Как рекомендует Apple




#yac2012 #yamobile
                     162
#yac2012 #yamobile
                     163
Много проблем возникает
     с Jailbreak-ами
       В одном из приложений нам пришлось
              ввести ряд ограничений




#yac2012 #yamobile
                       164
i-FunBox и подобные
        программы

#yac2012 #yamobile
                     165
#yac2012 #yamobile
                     166
Можно перекинуть в
  *.app файлы и они будут
          доступны
        в приложении
    без покупки «инаппа»
   Старый баг одного из приложений, сообщил нам
               об этом сам «хакер» :-)

#yac2012 #yamobile
                        167
Пара общих
        рекомендаций:

#yac2012 #yamobile
                     168
1. Не забивайте на
   шифрование данных,
       как WhatsApp
              http://clck.ru/2DYSI




#yac2012 #yamobile
                       169
2. Не публикуйте
  базы UDID-ов, если вы
   их ещё собираете :-)
              http://clck.ru/2DYSs




#yac2012 #yamobile
                       170
После запрета Apple
    использовать UDID
       мы перешли
   на md5 от MAC-адреса
#yac2012 #yamobile
                     171
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      172
7. Релиз и проверка
         приложений

#yac2012 #yamobile
                     173
Последний камень
     преткновения —
   проверка приложения

#yac2012 #yamobile
                     174
Обычно занимает
       от 5 до 10 дней

#yac2012 #yamobile
                     175
Время проверки
   приложения можно
  сократить до 24 часов

#yac2012 #yamobile
                     176
Для этого
      нужно написать
     «слёзное» письмо
  App Store Resource Center
              http://clck.ru/2H5Pk


#yac2012 #yamobile
                       177
178
У нас так
     получилось дважды
    Может быть наши заявки одобрили из-за фразы:
     «We trust in Apple and App Store Review Team» :-)




#yac2012 #yamobile
                            179
Кстати, способ загрузить
 одновременно большое
 количество приложений
       не работает
             http://clck.ru/2H8KS


#yac2012 #yamobile
                      180
#yac2012 #yamobile
                     181
Но иногда приложения
     отклоняют :-)

#yac2012 #yamobile
                     182
Documents vs. Caches
     После выхода iOS 5 несколько приложений
      отклонили из-за неправильной структуры
                 хранения данных




#yac2012 #yamobile
                       183
Нельзя явно заставлять
пользователей оценивыть
 приложение в App Store
      Летнее нововедение в App Store Review




#yac2012 #yamobile
                       184
185
Но мы обошли это
       ограничение
       Теперь мы присылаем пуш с просьбой
             оценить приложение :-)




#yac2012 #yamobile
                       186
Чем чаще выпускаете
       обновления
      приложений,

#yac2012 #yamobile
                     187
Тем раньше узнаёте о
  новых ограничениях в
   App Store Review :-)

#yac2012 #yamobile
                     188
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      189
8. Мотивация
     пользователей или
       «белая» магия

#yac2012 #yamobile
                     190
Отлично работает
       следующая
  комбинация действий:

#yac2012 #yamobile
                     191
• Постоянные Push-уведомления
   • Периодичные распродажи
   • Пользователи любят покупать наборы
     типа «All Inclusive»

   • Баннеры-прокачки для контента
     как в приложении App Store

#yac2012 #yamobile
                            192
Ограничение: «инапп»
      не может быть
       бесплатным,

#yac2012 #yamobile
                     193
Решение: на сервере
    можно управлять
    параметром isFree
  для единицы контента
#yac2012 #yamobile
                     194
Вторая часть айсберга
 1.   Работа со сборками и профилями
 2.   Стандартное серверное API
 3.   Клиент-серверное взаимодействие
 4.   Управление приложениями
 5.   Новые девайсы, версии ОС и приложений
 6.   Безопасность приложений
 7.   Релиз и проверка приложений
 8.   Мотивация пользователей
 9.   Кратко про Android

                      195
9. Коротко про
            Android

#yac2012 #yamobile
                     196
Для охвата
     пользователей
Android, конечно, нужен :-)

#yac2012 #yamobile
                     197
Но большинство из
     них не хотят или
    не готовы платить

#yac2012 #yamobile
                     198
Многообразие
    девайсов и размеров
         поражает

#yac2012 #yamobile
                     199
Приложения легко
       декомпилятся

#yac2012 #yamobile
                     200
В общем не-iOS ещё :-)


#yac2012 #yamobile
                     201
При наличии
   iOS-версии Android
 разрабатывается быстро

#yac2012 #yamobile
                     202
Бонусы


#yac2012 #yamobile
                     203
1. При наличии
      успешного опыта
         разработки

#yac2012 #yamobile
                     204
Легко и быстро
      разрабатываются
      вспомогательные
       приложения для
      внутренних нужд
#yac2012 #yamobile
                     205
• Приложение для логистики,
     iPod + сканнер штрих-кодов

   • Мониторинг внутренней статистики
   • Быстрый доступ к данным по компании

#yac2012 #yamobile
                     206
#yac2012 #yamobile
                     207
• Приложение для логистики,
     iPod + сканнер штрих-кодов

   • Мониторинг внутренней статистики
   • Быстрый доступ к данным по компании

#yac2012 #yamobile
                     208
#yac2012 #yamobile
                     209
• Приложение для логистики,
     iPod + сканнер штрих-кодов

   • Мониторинг внутренней статистики
   • Быстрый доступ к данным по компании
     — приложения «для директора» :-)


#yac2012 #yamobile
                     210
2. Запустили переводы
    интересных статей
      про iOS и Apple

#yac2012 #yamobile
                     211
www.applifto.ru/docs
         212
Спасибо
 за внимание!
   Анатолий Шарифулин
        @sharifulin

      Аpplifto Inc.
     www.applifto.ru

#yac2012 #yamobile
                        213
Вопросы?
   Анатолий Шарифулин
        @sharifulin

      Аpplifto Inc.
     www.applifto.ru

#yac2012 #yamobile
                        214

More Related Content

Опыт разработки мобильных приложений в Applifto

  • 1. Опыт разработки мобильных приложений в Applifto Анатолий Шарифулин Yet another Conference 2012
  • 5. Applifto — не Яндекс, но мы тоже делаем собственные приложения :-) #yac2012 #yamobile 5
  • 8. Это первое и самое провокационное приложение #yac2012 #yamobile 8
  • 9. Но сейчас не об этом Тогда мы были молоды, только тсс... #yac2012 #yamobile 9
  • 10. Как только в команде больше, чем... #yac2012 #yamobile 10
  • 12. 1 приложение 1 версия приложения #yac2012 #yamobile 12
  • 13. 1 приложение 1 версия приложения 1 программист #yac2012 #yamobile 13
  • 14. 1 приложение 1 версия приложения 1 программист 1 тестеровщик #yac2012 #yamobile 14
  • 15. Возникает потребность в автоматизации или упрощении процесса разработки #yac2012 #yamobile 15
  • 16. Возникает потребность в автоматизации или упрощении процесса тестирования #yac2012 #yamobile 16
  • 17. Возникает потребность в автоматизации или упрощении процесса публикации #yac2012 #yamobile 17
  • 18. Возникает потребность в автоматизации или упрощении получения статистики #yac2012 #yamobile 18
  • 19. Возникает потребность в автоматизации или упрощении получения аналитики #yac2012 #yamobile 19
  • 20. Возникает потребность в автоматизации или упрощении получения бла-бла-бла #yac2012 #yamobile 20
  • 21. Чем больше пользователей, тем выше ответственность Почти Сент-Экзюпери #yac2012 #yamobile 21
  • 22. • Качество и стабильность • Периодичные обновления приложений • Пользовательский фидбек • Безопасность приложения • ... #yac2012 #yamobile 22
  • 23. «Разработка» приложений превращается #yac2012 #yamobile 23
  • 27. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 27
  • 28. 1. Работа со сборками и профилями приложений #yac2012 #yamobile 28
  • 29. Cпособы установки приложения • Добавить в iTunes профиль и сборку, синхронизировать с девайсом • Выложить на сервер по FTP/SFTP, отправить письмо со ссылкой itms-services://?action=...&url=... • Веб-сервис для работы с профилями и сборками #yac2012 #yamobile 29
  • 30. Мы разработали свой веб-сервис Готовые решения не используем: TestFlight, HockeyApp, ... #yac2012 #yamobile 30
  • 31. 31
  • 32. • Простой и удобный сервис для разработчиков и бета-тестеров • Загрузка профилей и сборок приложений • История всех изменений и быстрый доступ к любой версии приложения • Свой, бесплатный и быстрый (в отличии от готовых решений) #yac2012 #yamobile 32
  • 33. • Автообновление приложений при выходе новой сборки • Всего сборок: 949+ • Количество сборок: 2010 — 8, 2011 — 526, 2012 — 415+ #yac2012 #yamobile 33
  • 34. Автосборки проектов не используем Привет, Роман Бусыгин! :-) http://events.yandex.ru/talks/4/ #yac2012 #yamobile 34
  • 35. Почему? • Один аккаунт разработчика, 100 устройств — вполне достаточно • Приложение подписывается одним сертификатом (Dev и Distr), нет такой проблемы как в Яндексе • Не используем CI server-а, 1 программист — 1 приложение (реже 2:1) #yac2012 #yamobile 35
  • 36. Почему? • Честно, я подходил несколько раз к программистам и спрашивал, нужно ли что-нибудь автоматизировать? :-) • Если мы были бы Яндексом, то тоже использовали автосборки, но пока нет #yac2012 #yamobile 36
  • 37. Была идея использовать разные профили для приложений: Dev и не-Dev #yac2012 #yamobile 37
  • 38. Есть ограничения: • Нужны новые Push-сертификаты • Нужно регистрировать отдельные «инаппы» • Синхронизация через iCloud работает для Dev-a • ... #yac2012 #yamobile 38
  • 39. Решили пока использовать разные иконки: Dev и не-Dev #yac2012 #yamobile 39
  • 40. Зачем? • При тестирование видно, что это Dev-версия или нет • Новые супер-фичи и NDA • У Dev-сборок может неожиданно истечь сертификат и приложение не будет запускаться #yac2012 #yamobile 40
  • 41. Главное: не забыть поменять иконку перед релизом :-) #yac2012 #yamobile 41
  • 42. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 42
  • 43. 2. Стандартное серверное API для всех приложений #yac2012 #yamobile 43
  • 44. Любое наше приложение работает с Applifto API #yac2012 #yamobile 44
  • 45. Applifto API • start — базовая информация про устройство (тип, модель, версия ОС, локаль, ...) и token, построение различных статистик и отправка «пушей» • stderr #yac2012 #yamobile 45
  • 46. Applifto API • start • stderr — отправка всех крешей с устройства (CrashReportSender), уведомление разработчика по почте, веб-интерфейс для просмотра всех крешей •s #yac2012 #yamobile 46
  • 47. Applifto API • start • stderr • feedback — в каждом приложение есть форма связи с нами, оперативное решение проблем •ы #yac2012 #yamobile 47
  • 48. 48
  • 49. Applifto API • start • stderr • feedback • about — страница информации или FAQ по приложению, текст меняется из админа • verify inapp #yac2012 #yamobile 49
  • 50. 50
  • 51. Applifto API • start • stderr • feedback • about • verify inapp — защита от взлома «инаппов», проверка, рекомендованная Apple #yac2012 #yamobile 51
  • 52. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 52
  • 53. 3. Клиент-серверное взаимодействие #yac2012 #yamobile 53
  • 54. Почти все приложения работают с серверной частью #yac2012 #yamobile 54
  • 55. Стандартная модель API Подписанные запросы (md5 от параметров), api_id и secret #yac2012 #yamobile 55
  • 56. Стандартная модель API Формат данных — JSON, иногда Plist #yac2012 #yamobile 56
  • 57. Стандартная модель API Никогда не забываем про gzip! (клиент-сервер) #yac2012 #yamobile 57
  • 58. Удобное тестирование методов API через браузер Без генерации подписи (Dev-режим) #yac2012 #yamobile 58
  • 59. Обязательно: мониторинг клиент-серверного взаимодействия Легко найти ошибку на любой стороне, лишние запросы, ... #yac2012 #yamobile 59
  • 60. Частая ошибка: длительная или неверная синхронизация данных #yac2012 #yamobile 60
  • 61. Для анализа данных или протокола сторонних приложений #yac2012 #yamobile 61
  • 62. Мы используем самописный форвардер запросов и ответов #yac2012 #yamobile 62
  • 63. А вдруг rocket science? :-) #yac2012 #yamobile 63
  • 64. Иногда совсем не «рокет» «На коленке» написанная серверная часть, безопасность данных вообще отсутствует #yac2012 #yamobile 64
  • 65. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 65
  • 66. 4. Управление приложениями #yac2012 #yamobile 66
  • 67. Единый админ для управления всеми приложениями #yac2012 #yamobile 67
  • 68. 68
  • 69. Работа с обратной связью #yac2012 #yamobile 69
  • 70. 70
  • 71. Reviews в App Store только бесят Колы и единицы vs. пятёрки и восторг Нет двусторонней связи #yac2012 #yamobile 71
  • 72. Очень часто пользователи «тупят» и ставят «плохие» оценки #yac2012 #yamobile 72
  • 73. Если возникла проблема, появился вопрос, ... #yac2012 #yamobile 73
  • 74. Сообщать нужно через обратную связь в приложении или на сайте #yac2012 #yamobile 74
  • 75. Во-первых, мы будем знать какой девайс, версии ОС и приложения #yac2012 #yamobile 75
  • 76. И быстро локализуем проблему #yac2012 #yamobile 76
  • 77. Во-вторых, вам точно ответят #yac2012 #yamobile 77
  • 78. В-третьих, Review в App Store для пятёрок :-) #yac2012 #yamobile 78
  • 79. Разбирая запросы в обратную связь, #yac2012 #yamobile 79
  • 80. Легко найти бета- тестеров, волонтёров и полезные знакомства #yac2012 #yamobile 80
  • 81. Cтатистика по приложениям #yac2012 #yamobile 81
  • 82. Мини-статистика по скачиваниям и продажам По данным из iTunesConnect #yac2012 #yamobile 82
  • 83. 83
  • 85. Статистика по активным* устройствам * token устройства для приложения действительный #yac2012 #yamobile 85
  • 86. 86
  • 88. Подробная статистика У «крутых» приложений есть собственный админ и расширенная статистика #yac2012 #yamobile 88
  • 89. Различные графики, хит-парады и разрезы данных #yac2012 #yamobile 89
  • 90. 90
  • 91. 91
  • 92. 92
  • 93. Важно: сразу продумывайте какая статистика нужна приложению #yac2012 #yamobile 93
  • 94. Бонус: если приложение часто бывает в топе «кассовых», #yac2012 #yamobile 94
  • 95. То можно оценить оборот $ раздела в день #yac2012 #yamobile 95
  • 96. Рассылка Push-уведомлений #yac2012 #yamobile 96
  • 97. Типы «пушей» • Открытие приложения • Написать в обратную связь • Оставить отзыв в App Store • Переход на пункт меню или единицу контента #yac2012 #yamobile 97
  • 98. Фильтрация при отправке • Всем • Только тестовым устройствам • Выборочно • учитывая локализацию • определенной версии ОС и приложения #yac2012 #yamobile 98
  • 99. Чем чаще отсылаешь «пуши», тем число активных устройств точней #yac2012 #yamobile 99
  • 100. Не забывать: про поддержку «тихого режима» в приложении #yac2012 #yamobile 100
  • 101. 101
  • 102. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 102
  • 103. 5. Новые девайсы, версии ОС и приложений #yac2012 #yamobile 103
  • 104. Каждые полгода выходит новый девайс #yac2012 #yamobile 104
  • 105. Либо нужно увеличивать размеры приложений в 2 раза #yac2012 #yamobile 105
  • 106. Либо нужно увеличивать размеры приложений в 1.127 раза :-) #yac2012 #yamobile 106
  • 107. Либо исправлять глюки На new iPad появился «голубой экран» #yac2012 #yamobile 107
  • 108. 108
  • 109. Каждый год выходит новая версия iOS с новыми фичами #yac2012 #yamobile 109
  • 110. и иногда без обратной совместимости #yac2012 #yamobile 110
  • 111. В iOS 4.3 испортилась запись треков, добавилось шипение Apple без уведомления увеличил размеры буфферов в два раза :-) #yac2012 #yamobile 111
  • 112. В iOS 5 запись полностью перестала работать #yac2012 #yamobile 112
  • 114. Минимальная поддерживаемая версия iOS? #yac2012 #yamobile 114
  • 115. Долго поддерживали все версии, начиная с 3.1.2 #yac2012 #yamobile 115
  • 116. Чем дальше, тем больше костылей #yac2012 #yamobile 116
  • 117. Большое количество комбинаций: девайс и версия iOS #yac2012 #yamobile 117
  • 118. Везде протестировать нет возможности, о проблемах узнаём только после релиза #yac2012 #yamobile 118
  • 119. По статистике: в основном это < 7% пользователей #yac2012 #yamobile 119
  • 120. Так они ещё и колы ставят :-) #yac2012 #yamobile 120
  • 121. В итоге: решили поддерживать последнюю объявленную и предыдущую версии #yac2012 #yamobile 121
  • 122. То есть сейчас iOS 5 и выше #yac2012 #yamobile 122
  • 123. Cледовательно, iPhone 3Gs и новее #yac2012 #yamobile 123
  • 124. Каждый месяц мы выпускаем обновления приложений #yac2012 #yamobile 124
  • 125. На самом деле — чаще В этом году мы выпустили 33 «апдейта», половина — минорные обновления #yac2012 #yamobile 125
  • 126. Разработать «апдейт» несложно, #yac2012 #yamobile 126
  • 127. Легко всё разломать у текущих пользователей #yac2012 #yamobile 127
  • 128. Цена ошибки — велика Исправить получится только после проверки приложения, а это от 5—10 дней #yac2012 #yamobile 128
  • 129. Обновление приложений — очень важный и сложный процесс! #yac2012 #yamobile 129
  • 130. Когда версия исправляет обновление предыдущей версии, #yac2012 #yamobile 130
  • 132. Хотя, судя по iOS 6, ошибки в новой версии — это «Apple way» :-) При Стиве Джобсе такого не было! #yac2012 #yamobile 132
  • 133. Раньше тестировали приложения все Программисты, менеджеры, бета-тестеры, ... #yac2012 #yamobile 133
  • 134. Это отнимало очень много времени И совершенно неэффективно! #yac2012 #yamobile 134
  • 135. Пытались работать с бета-тестерами Но они очень ленивые и медленные #yac2012 #yamobile 135
  • 136. В итоге: решились на «тестировщика» Это было сложное и кардинальное решение для нас :-) #yac2012 #yamobile 136
  • 137. Если в Яндексе работают «тестировщикИ», #yac2012 #yamobile 137
  • 138. То у нас он один и универсальный :-) #yac2012 #yamobile 138
  • 139. • Он совсем не программист! • Тестирует на всех девайсах и поддерживаемых версиях ОС • Разбирает фидбек от пользователей • Есть список тестов и план тестирования по каждому приложению #yac2012 #yamobile 139
  • 142. x.x — мажорный «апдейт» Важное обновление, новый функционал, разработка от 2х недель #yac2012 #yamobile 142
  • 143. x.x.x — минорный «апдейт» Исправление ошибок и улучшения, разработка 1—5 дней #yac2012 #yamobile 143
  • 144. x.x.x.x — Dev-версия, не для публикации Исправление ошибок и улучшения, в активной фазе каждые 1—2 дня #yac2012 #yamobile 144
  • 145. x.x.x.x — Dev-версия, не для публикации Обработка таких версий на сервере, включение дополнительного функционала: #yac2012 #yamobile 145
  • 146. x.x.x.x — Dev-версия, не для публикации проверка «инаппов» через sandbox, контент для продажи — free, ... #yac2012 #yamobile 146
  • 147. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 147
  • 148. 6. Безопасность приложений и борьба с «пиратами» #yac2012 #yamobile 148
  • 149. Раньше мы выпускали только платные приложения #yac2012 #yamobile 149
  • 150. Но их стали оперативно ломать и выкладывать на торренты #yac2012 #yamobile 150
  • 151. Из собственной статистики запусков мы обнаружили, #yac2012 #yamobile 151
  • 152. что пользователей больше, чем покупателей :-) #yac2012 #yamobile 152
  • 153. Некоторые «хакеры» тщеславны #yac2012 #yamobile 153
  • 155. Мы заблокировали версии на серверной стороне #yac2012 #yamobile 155
  • 157. И просили обновиться на новые версии #yac2012 #yamobile 157
  • 159. Но новые версии тоже ломали и выкладывали :-) #yac2012 #yamobile 159
  • 160. Мы перешли на Freemium-модель Бесплатные приложения с «инаппами» #yac2012 #yamobile 160
  • 161. Оказывается, «инаппы» можно ломать и делать бесплатными #yac2012 #yamobile 161
  • 162. И мы сделали проверку запросов на сервере Как рекомендует Apple #yac2012 #yamobile 162
  • 164. Много проблем возникает с Jailbreak-ами В одном из приложений нам пришлось ввести ряд ограничений #yac2012 #yamobile 164
  • 165. i-FunBox и подобные программы #yac2012 #yamobile 165
  • 167. Можно перекинуть в *.app файлы и они будут доступны в приложении без покупки «инаппа» Старый баг одного из приложений, сообщил нам об этом сам «хакер» :-) #yac2012 #yamobile 167
  • 168. Пара общих рекомендаций: #yac2012 #yamobile 168
  • 169. 1. Не забивайте на шифрование данных, как WhatsApp http://clck.ru/2DYSI #yac2012 #yamobile 169
  • 170. 2. Не публикуйте базы UDID-ов, если вы их ещё собираете :-) http://clck.ru/2DYSs #yac2012 #yamobile 170
  • 171. После запрета Apple использовать UDID мы перешли на md5 от MAC-адреса #yac2012 #yamobile 171
  • 172. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 172
  • 173. 7. Релиз и проверка приложений #yac2012 #yamobile 173
  • 174. Последний камень преткновения — проверка приложения #yac2012 #yamobile 174
  • 175. Обычно занимает от 5 до 10 дней #yac2012 #yamobile 175
  • 176. Время проверки приложения можно сократить до 24 часов #yac2012 #yamobile 176
  • 177. Для этого нужно написать «слёзное» письмо App Store Resource Center http://clck.ru/2H5Pk #yac2012 #yamobile 177
  • 178. 178
  • 179. У нас так получилось дважды Может быть наши заявки одобрили из-за фразы: «We trust in Apple and App Store Review Team» :-) #yac2012 #yamobile 179
  • 180. Кстати, способ загрузить одновременно большое количество приложений не работает http://clck.ru/2H8KS #yac2012 #yamobile 180
  • 182. Но иногда приложения отклоняют :-) #yac2012 #yamobile 182
  • 183. Documents vs. Caches После выхода iOS 5 несколько приложений отклонили из-за неправильной структуры хранения данных #yac2012 #yamobile 183
  • 184. Нельзя явно заставлять пользователей оценивыть приложение в App Store Летнее нововедение в App Store Review #yac2012 #yamobile 184
  • 185. 185
  • 186. Но мы обошли это ограничение Теперь мы присылаем пуш с просьбой оценить приложение :-) #yac2012 #yamobile 186
  • 187. Чем чаще выпускаете обновления приложений, #yac2012 #yamobile 187
  • 188. Тем раньше узнаёте о новых ограничениях в App Store Review :-) #yac2012 #yamobile 188
  • 189. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 189
  • 190. 8. Мотивация пользователей или «белая» магия #yac2012 #yamobile 190
  • 191. Отлично работает следующая комбинация действий: #yac2012 #yamobile 191
  • 192. • Постоянные Push-уведомления • Периодичные распродажи • Пользователи любят покупать наборы типа «All Inclusive» • Баннеры-прокачки для контента как в приложении App Store #yac2012 #yamobile 192
  • 193. Ограничение: «инапп» не может быть бесплатным, #yac2012 #yamobile 193
  • 194. Решение: на сервере можно управлять параметром isFree для единицы контента #yac2012 #yamobile 194
  • 195. Вторая часть айсберга 1. Работа со сборками и профилями 2. Стандартное серверное API 3. Клиент-серверное взаимодействие 4. Управление приложениями 5. Новые девайсы, версии ОС и приложений 6. Безопасность приложений 7. Релиз и проверка приложений 8. Мотивация пользователей 9. Кратко про Android 195
  • 196. 9. Коротко про Android #yac2012 #yamobile 196
  • 197. Для охвата пользователей Android, конечно, нужен :-) #yac2012 #yamobile 197
  • 198. Но большинство из них не хотят или не готовы платить #yac2012 #yamobile 198
  • 199. Многообразие девайсов и размеров поражает #yac2012 #yamobile 199
  • 200. Приложения легко декомпилятся #yac2012 #yamobile 200
  • 201. В общем не-iOS ещё :-) #yac2012 #yamobile 201
  • 202. При наличии iOS-версии Android разрабатывается быстро #yac2012 #yamobile 202
  • 204. 1. При наличии успешного опыта разработки #yac2012 #yamobile 204
  • 205. Легко и быстро разрабатываются вспомогательные приложения для внутренних нужд #yac2012 #yamobile 205
  • 206. • Приложение для логистики, iPod + сканнер штрих-кодов • Мониторинг внутренней статистики • Быстрый доступ к данным по компании #yac2012 #yamobile 206
  • 208. • Приложение для логистики, iPod + сканнер штрих-кодов • Мониторинг внутренней статистики • Быстрый доступ к данным по компании #yac2012 #yamobile 208
  • 210. • Приложение для логистики, iPod + сканнер штрих-кодов • Мониторинг внутренней статистики • Быстрый доступ к данным по компании — приложения «для директора» :-) #yac2012 #yamobile 210
  • 211. 2. Запустили переводы интересных статей про iOS и Apple #yac2012 #yamobile 211
  • 213. Спасибо за внимание! Анатолий Шарифулин @sharifulin Аpplifto Inc. www.applifto.ru #yac2012 #yamobile 213
  • 214. Вопросы? Анатолий Шарифулин @sharifulin Аpplifto Inc. www.applifto.ru #yac2012 #yamobile 214