June 5

122. Автоматизируем рутину в iOS-проекте

В статье 55 рассказывал как настроить автоматическое форматирование кода, а в статье 109 была памятка по генерации скриншотов. Тут расскажу как автоматизировать установку этих штук (и не только) с использованием Makefile.

Предыстория

Мне нравятся swiftformat и fastlane, и в целом их несложно установить и настроить, но делать это с нуля в новом проекте или на новом ноутбуке мне не очень нравится - этот процесс тратит время и нервы, т.к. что-то забывается, и потом что-то не работает.

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

Важно: в проекте уже был настроен fastlane, и осталось настроить его на ноуте.

Makefile

Makefile — это текстовый файл, который содержит набор команд для автоматизации рутинных задач, а самое классное, что эти команды работают в macOS по умолчанию 🤯

Почему Makefile — это удобно

  • Всё в одном месте: не нужно держать в голове или искать в README список команд для установки Homebrew, Ruby, Bundler, fastlane, swiftformat и т.д.
  • Минимум ручных действий: один раз написал Makefile — и дальше просто запускаешь нужную команду (make setup, make format, make fastlane), а скрипт сам проверит, что уже установлено, и что нужно доустановить.
  • Легко поддерживать: если что-то поменялось (например, обновилась версия Ruby), достаточно поменять одну строчку в Makefile, и все новые установки будут с правильной версией.
  • Удобно делиться с командой: любой, кто клонирует проект, сразу получает готовый сценарий для настройки окружения.
  • Не нужно делать самостоятельно: просто обратись в нейросеть и попроси сделать/доработать Makefile с командами, которые тебе нужны в проекте.

Подробно на примере

Разберём основные команды на примере приложения «Счётчик дней».

help

Показывает справку по доступным командам. Просто набираешь make help, и видишь список всех возможностей скрипта.

setup

Главная команда для установки всех инструментов. Она:

  • проверяет, установлен ли Homebrew (если нет — устанавливает)
  • проверяет, есть ли rbenv (менеджер версий Ruby) и нужная версия Ruby (3.2.2) - если чего-то не хватает, установит
  • создаёт или обновляет файл .ruby-version, чтобы все в проекте использовали одну и ту же версию Ruby
  • проверяет наличие Bundler нужной версии (это менеджер Ruby-зависимостей) и устанавливает, если нужно
  • устанавливает Ruby-гемы из Gemfile (в том числе fastlane)
  • проверяет, установлен ли swiftformat (утилита для форматирования кода) - если нет — устанавливает
  • проверяет, установлен ли fastlane - если да, то проверяет установку fastlane snapshot (для генерации скриншотов) и устанавливает, если в проекте еще нет файла Snapfile (там настройки для fastlane snapshot); а если fastlane не установлен - предлагает либо установить с нуля fastlane snapshot, либо ничего не делать (можно установить все вручную)

Всё это с подсказками на русском языке и выделяется желтым, зеленым или красным цветом — понятно, где что происходит и что делать дальше.

format

Запускает автоматическое форматирование кода через swiftformat. Если вдруг swiftformat не установлен, команда сама вызовет make setup и доустановит всё необходимое.

screenshots

Запускает fastlane snapshot для генерации скриншотов приложения. Если fastlane не найден, вызывается make setup_snapshot, чтобы всё нужное появилось.

update

Проверяет наличие обновлений для fastlane и swiftformat и обновляет при необходимости до последних версий. Если обновился fastlane, то обновляет файл Gemfile.lock. После этого достаточно закоммитить обновлённый файл — и все в команде будут использовать одни и те же версии зависимостей.

Примеры использования

  1. Только что клонировал проект или пересел за новый ноутбук? Просто набираешь в терминале make setup — и через несколько минут всё готово к работе
  2. Нужно отформатировать код перед коммитом? make format
  3. Пришло время обновить fastlane или другие Ruby-гемы? make update
  4. Нужно сгенерировать скриншоты приложения? make screenshots.

Уточнение про скриншоты

Для генерации скриншотов недостаточно просто установить fastlane snapshot, и выполнить команду make screenshots.

Сначала нужно написать ui-тесты, и об этом я рассказывал в статье 77.

Заключение

Makefile — это как твой личный помощник по настройке проекта. Он экономит время, снижает вероятность ошибок и делает процесс установки зависимостей максимально прозрачным и простым, даже если ты только начинаешь путь в iOS-разработке.

С появлением нейросетей такие штуки несложно изучить и реализовать 😎

Код для этой статьи можно посмотреть тут, а другие статьи — тут.