Быстрее света. ua mobile 2016

Post on 07-Apr-2017

118 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

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” на azimin@me.com

Спасибо за внимание

Зимин Александр azimin@me.com

@ZiminAlex

top related