Сэкономьте время на разработке и тестировании приложений, написав повторно используемый код. iOS оптимизирует процесс для вас с помощью фреймворков, встроенных прямо в Xcode. Фреймворки — это проекты, специально предназначенные для интеграции в другие приложения.

Во время моей летней работы в Hootsuite моей целью было создание компонента, похожего на скользящее меню в Apple Maps и Apple Music. Я создал структуру для отображения представления в выдвижном ящике, расположенном в нижней части экрана. «Нижний ящик», который я запрограммировал, может отображать любой вид в выдвижном ящике, расположенном в нижней части экрана. Компонент представляет собой собственную структуру, поэтому его можно использовать в любом приложении iOS или даже в других средах. Моим первым приложением для Bottom Drawer была новая структура, позволяющая пользователям Hootsuite выбирать социальные профили. Средство выбора социального профиля в конечном итоге будет интегрировано во флагманское приложение Hootsuite для iOS.

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

Текст, выделенный курсивом, описывает способ Hootsuite для написания фреймворков для iOS. Стандартный текст рассказывает мою историю в Hootsuite, иллюстрируя описанные идеалы.

1. Разделите фреймворк на отдельный проект Xcode и репозиторий GitHub.

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

Команда iOS в Hootsuite использует Carthage для управления нашими зависимостями. Когда я запрограммировал изменение в существующем фреймворке, распространение обновления было таким же простым, как создание новой версии на GitHub.

2. Создайте демонстрационное приложение для взаимодействия с вашей структурой во время работы.

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

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

3. Напишите тесты для вашего фреймворка

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

Когда я присоединился к своей команде в Hootsuite, первое, на что я обратил внимание, — это их приверженность высокому охвату тестами. В первую неделю работы моя команда научила меня тестированию моментальных снимков с помощью бесплатной библиотеки Uber. Тесты моментальных снимков делают снимок экрана представления и сравнивают его с сохраненным снимком экрана. Тест не пройден, если два скриншота каким-либо образом отличаются. Эти тесты действительно полезны для защиты от непреднамеренных изменений в вашем интерфейсе. Еще лучше то, что написание тестов моментальных снимков быстрое и легкое в освоении.

4. Ограничьте количество общедоступных файлов

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

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

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

Рекомендации, изложенные в этой статье, — это то, что я наблюдал во время работы в Hootsuite. Большинство компаний работают в разных отраслях и могут иметь разные рекомендации. Придерживайтесь руководящих принципов вашей компании превыше всего. Эффективная работа с вашей командой важнее, чем написание кода «наилучшим образом».