Быстрее света. ua mobile 2016
TRANSCRIPT
Зимин Александр iOS Developer
Product Designer
План
О себе Uberchord
План
Аналитика и onboarding
Обратно к MVC
Swift в производстве
План
О себе Uberchord Эксперимент
WWDC 2015 Paste
Tricky CircleMotivate Me
CocoaHeads
О себе
Uberchord www.uberchord.com
Uberchord
Onboarding MVC Swift
Uberchord
Onboarding MVC Swift
Onboarding
До onboardingПосле onboarding
Onboarding Конверсия
Onboarding Примеры
Onboarding Что это?
• Первое взаимодействие пользователя с вашим продуктом
• Преследует одну или несколько целей:
• Знакомство
• Нестандартный функционал
• Права доступа
• Авторизация
Onboarding
Onboarding
Onboarding
Onboarding
Onboarding Итоги
• Задачи:
• Аналитика внутри приложения
• Неделя работы и неделя шлифовки
• Результат:
• Featured by Apple
• Конверсия прохождения первого упражнения выросла с 2.59% до 30.19% (больше чем в 10 раз)
Onboarding Аналитика
• Mixpanel
• Дорого?
• 500.000 событий в месяц (150$ или баннер)
• Facebook Analytics
• Бесплатно
• Audience & lookalike
Uberchord
Onboarding MVC Swift
MVC
Controller
ViewModel
MVC
Controller
Model View
MVVM
Controller
View
ModelModel
Controller
View
ViewModel
Model
MVC
struct Person { var firstName: String var secondName: String }s
MVC
struct Person { var firstName: String var secondName: String }s
class ViewController: UIViewController { var person: Person! @IBOutlet var nameLabel: UILabel! }s
MVC
struct Person { var firstName: String var secondName: String }s
class ViewController: UIViewController { var person: Person! @IBOutlet var nameLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() nameLabel.text = "\(person.firstName) \(person.secondName)" } }s
MVVM
struct Person { var firstName: String var secondName: String }s
struct PersonModel { var person: Person var name: String { return "\(person.firstName) \(person.secondName)" } }
class ViewController: UIViewController { var person: Person! @IBOutlet var nameLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() nameLabel.text = "\(person.firstName) \(person.secondName)" } }s
MVVM
struct Person { var firstName: String var secondName: String }s
struct PersonModel { var person: Person var name: String { return "\(person.firstName) \(person.secondName)" } }
class ViewController: UIViewController { var personModel: PersonModel! @IBOutlet var nameLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() nameLabel.text = personModel.name } }s
MVVM Плюсы
• “Чистые” контроллеры
• Гибкость тестирования
• Переиспользование
MVVM Минусы
• Множество дополнительных классов
• Проблема перепроектирования
• Сложность общения
MVVM
MVC Итоги
• Процент crash-free пользователей не изменился
• Скорость итераций повысилась
• Упростился подход
Uberchord
Onboarding MVC Swift
SwiftSwift в производстве
637
77
SwiftSwift в производстве Вопросы
• Переписывание кода после выхода новой версии?
• Команда должна учиться новому языку?
• Использование библиотек на Swift?
Swift в производстве Недостатки
• Работа с Swift в Obj-c
• Скорость компиляции проекта
• Невозможность раскрыться на полную:
• POP
• Enum
• Generic
• …
Swift в производстве Travis & Swift 2.2
• xcode 7.2
• xctool
• xcode 7.3
• xcodebuild
• xcpretty
Swift в производстве Плюсы
• Читаемость кода
• Скорость написания кода
• Опыт использования языка
• POP, Enum, Struct, Generics и прочее
Эксперимент
Motivate Me
Эксперимент Featuring
• WWDC 2015
• Поддерживайте Apple
• Встраивайте новые API
• Разрабатывайте под новые девайсы (watchOS, tvOS)
• Соберите аудиторию
Эксперимент
Эксперимент Featuring (мифы)
• Нужны обновления
• Рейтинг должен быть выше 4 звезд
• Нужно быть уникальным и быть в редкой категории
• Вас уведомят
Эксперимент
Знакомства
Отправь “UAMobile” на [email protected]