Connect with us

Разработка

Уроки нового: Как переписывалось приложение Comedy Central для iOS

Нет слова страшнее в мире программирования, чем «переписать». Так что вы можете представить восторг в глазах руководства, когда наша техническая команда захотела сделать именно это.

AppTractor

Опубликовано

/

     
     

Аурели Гаудри написал о том, как создавалось новое приложение Comedy Central. Мы предлагаем вам русский перевод его статьи.

Инвестиции в переписывание

Нет слова страшнее в мире программирования, чем «переписать». Так что вы можете представить восторг в глазах руководства, когда наша техническая команда захотела сделать именно это.

Но, как и картинка, эмодзи иногда стоят тысяч слов…

1

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

Некоторые из устаревших поставщиков кода, который мы поддерживаем, сидят на Restkit и XML фидах. Некоторые полагаются на NSURLConnection, класс, от которого отказались в пользу NSURLSession в iOS 9. Если вы планируете наперед и ваше приложение поддерживает хороший уровень абстракции, вы можете справиться с проблемами, вроде этих. Но это не всегда так.

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

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

Эти важные факторы, в сочетании с новым, современным и гибким API, укрепили нашу позицию. Мы получили «добро» от всех заинтересованных сторон для того, чтобы начать все с начала. Мы начали работать с разработчиками внутреннего API и продуктовыми менеджерами для создания чего-то, что будет устойчиво в будущем. Чего-то, что будет соответствовать нашим собственным технологическим, продуктовым и бизнес требованиям.

To Swift or Not to Swift?

Примерно неделю назад, в рассылке Swift Evolution мне попалась на глаза любопытный тред. Он вопил в своей теме: «Серьезно! Заморозьте Swift после выпуска версии 3.0».

Мы начинали наш проект на Swift 1.1. Сейчас есть Swift 2.3, а версия «больших переименований» 3.0 находится в бете.

Каждый релиз был болезненным. Изменения часто выбивали почву у нас из-под ног. Отладка и рефакторинг становились все более сложными. Время компилирования увеличивалось из-за удаления обращений к нативным методам

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

И все мы можем согласиться, что Swift гораздо легче воспринимается на глаз, чем его монструозный предшественник Objective-C.

Эксперименты с современными концепциями и фреймворками

2

Большинство iOS приложений используют MVC архитектуру. Наши требования привели нас к MVVM (Model View ViewModel) шаблону.

Мы также ввели Функциональное Реактивное Программирование в наш код. По большей части, мы использовали его на уровне работы с данными. И мы использовали Обещания (Promises), концепцию, используемую в языках параллельного программирования, вроде Scala.

Две библиотеки для нас незаменимы – PromiseKit и ReactiveCocoa. PromiseKit это реализация и коллекция вспомогательных функций. Она привносит концепцию Обещаний в iOS и разъясняет намерения сложного кода. С ее помощью легко управлять последовательностью и/или параллельным выполнением единиц работы с помощью понятного синтаксиса. Библиотека безопасна для потоков и идет с прекрасными утилитами для управления параллелизмом.

ReactiveCocoa это реализация Функционального реактивного программирования для iOS. Мы использовали ее для связи данных и UI. И также мы использовали ее для упрощения абстрагирования от основных механизмов событий в iOS. Мы выбрали ReactiveCocoa, а не RxSwift, так как члены команды уже работали с ней. Кроме того, RxSwift был слишком молодым в то время.

При работе с замыканиями и добавлением слушателей, в PromiseKit могут возникать проблемы с управлением памятью. Мы кроме того обнаружили, что PromiseKit может создавать проблемы с отладкой.

Все эти концепции могут иметь крутую кривую обучения, но все они стоят инвестиций времени в долгосрочной перспективе.

Не слишком полагайтесь на других

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

3

Вы можете двигаться настолько быстро, насколько вам позволяют библиотеки, которые вы выбрали для интеграции в ваш код.

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

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

Используйте инструменты, которые работают на вас

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

Сториборды могут замедлить iOS разработку. Они вызывают проблемы в Xcode и конфликты при слиянии. Они путают действия пользователей, экраны и бизнес-логику в одном месте. А это плохо масштабируется.

Мы решили создать приложение, в котором большая часть UI определяется данными и динамична. Сториборды не были подходящим решением для этого. Мы использовали библиотеку PureLayout. Мы создаем наши экраны и модули в многократно используемых, динамичных кусках кода.

Знайте лучшие практики Apple

4

Бизнес-требования и другие ограничения иногда мешают делать вещи правильно. Но вы должны быть осведомлены о лучших практиках компании Apple и следовать им как можно чаще.

Ограничивайте обратную совместимость. Apple требует поддержки текущей версии и предыдущей. В настоящий момент это означает поддержку 9.3 и 8.4, а осенью, когда выйдет iOS 10, вы должны будете поддерживать только 9.3.

Устраняйте все предупреждения и ошибки до выпуска приложения. Это было доступно в Xcode для Objective-C и будет доступно в Swift для Xcode 8.

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

Переходите к Каталогам Ресурсов (Asset Catalog). Убедитесь, что вы включили изображения для всех разрешений, что вы поддерживаете. Масштабирование изображений в 3 раза для старых устройств может вызвать пиковые потребления памяти. А вам еще надо загрузить изображение, чтобы уменьшить его. Apple на WWDC в этом году наглядно показала как лучше использовать Каталоги Ресурсов (посмотрите «Улучшаем существующие приложения с новыми лучшими практиками»).

Переходите на TLS. До сих пор Apple давала разработчикам возможность выключить App Transport Security. Теперь его использование обязательно. К концу 2016 от разработчиков будут требовать объяснений по каждому случаю.

Следуйте вашим лучшим практикам

5

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

Используйте самый высокий уровень абстракции, доступный для вас. Управляйте асинхронностью с помощью абстракций типа Promises. Управляйте событиями, связями и потоками с помощью абстракций типа ReactiveCocoa. Разделяйте основную функциональность, используйте, например, слой данных. Разделяйте функции и реализации. Поддерживайте минимально возможное количество состояний и делайте каждый вид без состояний.

Будьте динамичными. Потоки данных обеспечивают работу большей части нашего приложения. Это дает нашим продюсерам невиданную гибкость и возможности управления.

Следуйте Gitflow. Используйте теги для ваших релизов и закрывайте pod-версию в pod-файле до релиза. Примите участие в обсуждении архитектуры дизайна до начала выполнения нетривиальных задач. Участвуйте в целенаправленной проверке кода после этого.

Примите правильную тактику развертывания. Используйте Crashlytics в качестве обзорного инструмента и тщательно рассматривайте все возможные проблемы. Любой простой сбой в вашем QA цикле потенциально может разнести всё тогда, когда приложение выйдет на рынок. Проверяйте повторные установки приложения для того чтобы убедиться, что настройки пользователя сохраняются, когда нужно.

6

И, конечно, тестируйте.

Тестируйте и автоматизируйте, чтобы вы могли делать новое

MVVM хорошо тестируемая архитектура. В ней легко создаются и глушатся объекты. Вы можете представлять экраны для автоматизированных UI тестов. А индивидуальные ViewModel методы для обработки данных и представления так же легко протестировать.

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

Мы создали набор тестов на Python для проверки схемы данных бэкенда. Мы кроме того сделали простую автоматизацию для перехвата и воспроизведения данных сервисов. Далее, мы сделаем сравнение скриншотов текущего билда и последней хорошей версии. И используем DVR воспроизведение для удаления живых данных из уравнения.

Так как мы разделили приложение на секции и сделали многократно используемые библиотеки и pod-ы, мы сделали больше юнит-тестов. Цель в достижении большого покрытия для этих компонентов. Наконец, мы работаем над правильным отображением результатов для системных администраторов и программистов. Только после этого мы можем быть уверены, что все хорошо, и приступить к играм с расширением для iMessage. Это и другие вещи уже стоят в наших планах для iOS.

Вы сами можете проверить наше новое приложение в App Store.

 

AppTractor
Комментарии Facebook
Продолжить чтение
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Новости

Интересные материалы: 21.11

Лучшие материалы о разработке и маркетинге технологических продуктов.

Леонид Боголюбов

Опубликовано

/

Весь день мы собираем лучшие материалы о разработке и маркетинге технологий, стартапов, мобильных приложений и игр для iOS и Android из самых разных источников:

Леонид Боголюбов
Комментарии Facebook
Продолжить чтение

Мероприятия

Avito iOS Meetup Winter Edition: 2 декабря в Москве

Зима близко! Уже второго декабря состоится традиционный Avito iOS Meetup.

AppTractor

Опубликовано

/

Автор:

Мы обсудим Data Driven подход, практическое применение Mach-O, lldb и dSYM, возможности расширения lldb, методологию Type Driven, а также концептуальные различия архитектур. В мероприятии примут участие представители Avito, Badoo, Туту.ру и Яндекс.

Программа:

  • Метрики всему голова
    Вадим Смаль (Avito)
    Поговорим о Data-driven подходе к разработке. Вадим продемонстрирует, какие метрики можно собирать, как они помогут быть эффективным и как следить за качеством разрабатываемой функциональности. Подробно рассмотрим, как замерять время компиляции отдельных фреймворков, размер приложения, время запуска приложения, CrashFree, OOM. Если вы до сих пор думаете, что метрики это только для менеджеров и аналитиков — будете приятно удивлены.
  • Расширения lldb
    Сергей Лем (Badoo)
    Все хотят писать код без багов. Но, к сожалению, пока что мало у кого это получается.И почти всегда отладка приложений занимает львиную долю времени при разработке.Поэтому важно иметь наиболее совершенные инструменты в своем арсенале и не тратить время не ерунду. Сергей Лем расскажет о том, как прокачать lldb при помощи  расширений на Python и сделать отладку приятнее и быстрее.
  • Mach-O, lldb, dSYM на практике
    Владислав Алексеев (Avito)
    В докладе речь пойдёт о бинарном формате исполняемых файлов Mach-O, об отладочной информации и объектных файлах. Рассмотрим, как работают брейкпоинты и символизация крешлогов. Поймем, когда и зачем нам нужны файлы dSYM, а в каких случаях их создавать совершенно не требуется. Также изучим случаи непрямого использования dSYM-файлов для анализа содержимого скомпилированного бинарного файла.
  • Type Driven Development
    Валерий Попов (Yandex)
    В докладе Валерий рассматривает строгую типизацию, которая может стать еще одним рубежом обороны надежного приложения от ошибок разработчика. На примерах будет показано, как дополнительная информация, переданная на этапе компиляции, поможет отловить ряд ошибок, не доводя систему до падения в runtime. Расскажет, что мобильный разработчик может почерпнуть из языков, которые ставят типы во главе процесса разработки.
  • Architecture overdose
    Стас Цыганов (Туту.ру)
    Стас Цыганов предлагает поговорить о разных архитектурах: как верхнего слоя, так и всего приложения. Речь не о баззвордах и сравнениях, у кого больше букв: цель —  понять, чем же они концептуально отличаются. Разберемся, почему появляется по архитектуре в неделю и почему в них нет ничего нового. Ну и в конце посмотрим, на что надо будет обратить внимание при выборе архитектуры следующего приложения.

Участие в мероприятии бесплатное, регистрация обязательна. Сбор участников: 12:00. Начало докладов: 12:30. Адрес: офис компании Avito, Лесная 7.

AppTractor
Комментарии Facebook
Продолжить чтение

Новости

Эксперты выяснили, для чего Google форкнул Swift

Теоретически, добавление Swift позволит быстро портировать приложения c платформы Apple.

Леонид Боголюбов

Опубликовано

/

На прошлой неделе Google на GitHub форкнул Swift, язык программирования, который создала Apple для разработки iOS/macOS/tvOS/watchOS приложений.

Эксперты полагали, что Google сможет вносить дополнения в открытый язык или использовать его для разработки внутренних инструментов для iPhone и iPad.

Однако последние коммиты в репозиторий Swift показывают, что Google работает над поддержкой Fuchsia OS. На GitHub вы уже можете посмотреть на “Hello World” приложение на Swift для. Fuchsia

Fuchsia: новая операционная система от Google

Fuchsia поддерживает Dart, C++ и Go. Теоретически, добавление Swift позволит быстро портировать приложения c платформы Apple.

Леонид Боголюбов
Комментарии Facebook
Продолжить чтение

Разработка

AR стала частью реальности: что дальше?

Сегодня мы поговорим о важном событии в истории Apple (и это не запуск iPhone X) – мы поговорим о том, благодаря чему дополненная реальность (AR) стала чем-то большим, чем несбыточной мечтой маркетологов.

Джей лаб

Опубликовано

/

Автор:

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

На сегодняшний день практически все эти препятствия исчезли. С помощью ARKit любой разработчик может создавать приложения в интерактивном формате, которые будут работать на новых iPhone, а также на некоторых предыдущих версиях (6 и выше) с iOS 11. Сотни миллионов пользователей iPhone, а также 100 миллионов устройств Android, которые теперь используют ARCore SDK от Google, означают, что настал переломный момент в переходе технологии AR на массовый рынок.

И как всегда, когда поведение потребителей начинает меняться, каждый хочет знать: «Что это значит для брендов? Как маркетологи могут использовать эту новую, интересную технологию для привлечения внимания потребителей?». С появлением оптимизированного оборудования у компаний появилось больше возможностей. Но как ими правильно воспользоваться?

Почему ARKit лучше альтернатив?

Ждите и наблюдайте

Помните, когда появился 3D Touch? Многие разработчики полагали, что он предоставит совершенно новый уровень навигации по мобильному приложению и что «долгое нажатие» станет таким же общепринятым действием, как «свайп». Но так ли это на самом деле? Вы, например, им пользуетесь? :) У меня есть доступ к этой функции уже более двух лет, и я только недавно обнаружил, что на обычном фонарике на iPhone есть три разных степени интенсивности, которые доступны только при глубоком нажатии на значок в Настройках. Теперь я постоянно использую уровень «низкого света» – но, согласитесь, два года – это совсем не быстрый уровень принятия новой функции.

То же самое касается AR. Все предсказания о том, что дополненная реальность войдет в повседневную жизнь пользователей, не подтвердятся, если на то не будет веской причины.

Конечно, демо-версия игры The Machines выглядит круто, но достаточно ли круто для ежедневного использования большим количеством юзеров? Для того, чтобы AR действительно стала частью нашей повседневной жизни, она должна создавать ценность, выходящую за пределы развлечения. Демо-версия приложения Главной лиги бейсбола выглядит гораздо интереснее, потому что информация о ходе игры и командах, отображающаяся прямо во время матча – это ценная информация, которую пользователи хотят видеть.

Сфера туризма и путешествий также готова к буму AR: приложения, которые накладывают указатели направлений на реальные улицы, отображают перевод надписей на реальных поверхностях, выдают информацию о достопримечательностях в непосредственной близости от них, – все они расширяют границы нашего восприятия мира. Мало кто знает, что до того, как Niantic запустили Pokémon Go, они создали Field Trip для Google Glass, которые уже поддерживали эту функцию.

Начните с малого – затем совершенствуйте, адаптируйте и переориентируйте

У нас есть отличная возможность, но все, что требуется, чтобы испортить ее – это плохая рекламная концепция или некачественное исполнение. Конечно, мы должны попробовать разные подходы и экспериментировать, чтобы в итоге все получилось, но я рекомендую начинать с малого. Для начала внедрите AR опыт, который меньше относится к вашему бренду и больше к вашей отрасли и аудитории. Например, ресторан может виртуально поместить на пустую тарелку вкусный, сочный бургер, но без логотипа на булочке и подписи «2 по цене 1». Для начала соберите данные о том, как потребители используют функциональность AR и как реагируют на нее.

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

Внедряйте лучшие методы и практики

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

На данный момент AR – это все еще «новая модная вещь», но стоит потратить немного своего времени и энергии, и мы действительно сможем понять, как мы можем эффективно ее использовать и устанавливать свои стандарты, создавая при этом новое рекламное пространство.

Джей лаб
Комментарии Facebook
Продолжить чтение

november

24novallday26What the hack?!

25novalldaySmart Taler 2017

25novalldayLadies Code: время технологий

30novalldaySmart Cars & Roads 2017

december

02decalldayAvito iOS Meetup Winter Edition

05dec18:3022:00Яндекс изнутри: глазами iOS-разработчика

08decallday09Кубок СTF России

09decallday10Games Gathering 2017

09decalldayЛекционный день по игровой индустрии

Наша рассылка

Каждому подписавшемуся - "1 час на UI аудит": бесплатный ускоренный курс для разработчиков веб и мобильных приложений!

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Наш Facebook

Популярное

X

Спасибо!

Теперь редакторы в курсе.