новые технологии при разработке нативного I os...

41
Новые технологии при разработке нативного iOS приложения в рамках проекта стажировки "PROVENG" Бойко Андрей Виктория Мацкевич Дмитрий Кулаков

Transcript of новые технологии при разработке нативного I os...

Новые технологии при разработке нативного iOS приложения в рамках

проекта стажировки "PROVENG"Бойко Андрей

Виктория МацкевичДмитрий Кулаков

 

О чем доклад • О проекте • Архитектура • Язык • Внутреннее хранилище • Сетевой уровень • UI (UIKit, Eureka) • Инструменты • Статистика• Демка

Фичи• Авторизация через аккаунт Provectus • Универсальное приложение для Учителя и Ученика• Админ панель• Учитель

• Управление календарем• Управление группами• Управление Материалами

• Ученик• Лента новостей (фид)• Календарь• Материалы• Тестирование

О проекте Proveng

Design• George Frigo• Daria Servatko• Eugene Afanasiev

QA • Alex Zagulaev• Anna Ermolaeva• Anna Kirichenko• Ilona

Demkovskaya• Kirill Karnyshov

Server• Andrey

Kulbatskiy• Alexander Usov• Victor Levchenko

IOS Client• Andrey Boyko• Viktoriya

Matskevich• Dmitriy Kulakov

Android Client• Pasha Shmigol• Alexander

Smityuk

Stuff• Alla Golosenko• Alina

Remeslennikova• Alex Osadchyy

Архитектура• MVC (Apple)• MVC • MVP• MVVM• VIPER•🚲• Services

habrahabr.ru/company/badoo/blog/281162/

Layers

Api

Model

Services

UI UIKit/Eureka

Data Provider

Realm Object-Mapper

Alamofire

Auth Service … Router

habrahabr.ru/company/redmadrobot/blog/246551/

ЯзыкSwift• Новизна• Функциональный подход• Опыт• Перспектива• Поддержка Apple• Простота• Надежность• Сырость и Разочарование

Objective-C• Надежность• Инструментарий• Востребованость

рынком• Наработки

Локальное хранилищеCore Data

Realm

NSUserDefaults

Files

Почему Realm?• Простота• Скорость• Кросс-Платформенность• Документация и Комьюнити• Встроенный маппинг• Популярность /Тренд• Бесплатная

Примеры

Объявление классов

Примеры

Создание объектов

Примеры

Фильтрация и сортировка

Примеры

Нотификации

Обнаруженные недостатки• Создание unmanaged копии объекта  (временные

объекты) • Нет визуализации связей между объектами

Сетевой уровень

Описание запроса

Сетевой уровень

Реализация параметров ApiMethod

Сетевой уровеньNSURLSession

AFNetworking

Alamofire

Почему Alamofire• Написана на Swift• Простота кода• Проверка наличия сети• Хорошая библиотека компонентов• Хорошая документация и поддержка

Примеры

Использование

СериализаторNSDictionary 

SwiftyJSON

Realm (втсроенные средства)

Mantle

ObjectMapper

Почему ObjectMapper

• Написан на Swift• С легкостью преобразует JSON в объект модели и наоборот• Отображение вложенных объектов• Пользовательское преобразование• Возможность наследоваться от других объектов• Использование контекстов

Примеры

Реализация конвертации объекта модели

Примеры

Использование

Примеры

Контексты

UITableView - Eureka• Достойная демо-версия и хорошая документация • Разнообразие готовых ячеек / удобное прототипирование• Возможность кастомизации элементов• Валидация текстовых ячеек• Популярность среди разработчиков

Примеры 

Примеры

Создание элементов

Примеры

Взаимодействие с ячейкой

Примеры

Удобный доступ к элементам

Недостатки• Нечитабельный синтаксис • Неконтролируемая анимация• Нет инструмента для динамического добавления/удаления ячеек

Инструменты. Управление зависимостями

CocoaPods

Carthage

Почему Carthage • Первый менеджер зависимостей для работы с Swift• Легко установить и удалить с проекта• Не изменяет проект и не вынуждает использовать

workspace• Использует исключительно динамические

фреймворки вместо статических библиотек• Легко добавить зависимости в проект

Недостатки• Нет возможности просмотреть исходный код библиотеки• Ограниченна поддержка Carthage • Проект должен поддерживать iOS 8 или более

позднюю версию• Миграция Swift 2.x->3.x 

Инструменты. Сервисы дистрибуции

TestFlight

Fabric

Почему Fabric

• Быстрый• Удобное добавление тестировщиков• Выбор версии для установки• Хороший инструментарий обработки падений • Бесплатный

ИнструментыXCode/Profiler

Jira/ Scrum board

Git / Source Tree/Git Flow

Slack / Join me/ Skype

Avocode / Invision

Что изучили• Структуры данных (обзорно)• Алгоритмы (обзорно)• Паттерны проектирования• Управление памятью (ARC) • Функциональные подходы • Unit тесты• TDD :)• Профайлинг• Swift: Generics, Enums, etc• Objective-C

СтатистикаОписание Количество

Общее количество тикетов (iOS App) 281

Tasks 119

Bugs 63

Tests 93

Improvements 6

СтатистикаОписание Количество Часы

Общее 20 220

Миграция Swift 27

Рефакторинг 121

Митинги 35

Другое 37

API 10 26

Model 7 12

Services 30 211

Screens 59 340

UI 8 5

Статистика