Git workflow для Swift разработчиков: как не сойти с ума и не сломать продакшн
Признайся честно: сколько раз ты видел коммит с сообщением «fix» или «правки» в общей ветке? А сколько раз merge конфликт забирал час твоей жизни, потому что кто-то забыл сделать pull перед коммитом? Если ты Swift-разработчик, работающий в команде — от хобби-проекта до крупного приложения уровня «Тинькофф» или «Яндекс.Карты» — рано или поздно ты столкнешься с хаосом в Git.
Хорошая новость: правильный git workflow для Swift разработчиков превращает репозиторий из поля боя в стройную систему. В этой статье мы разберем, какие подходы реально работают для iOS и macOS проектов, как настроить code review без боли и почему CI/CD должен быть встроен в твой процесс с первого дня.
Поехали!
1. Почему стандартный git workflow часто ломается под Swift
Swift-проекты имеют свою специфику: Xcode проекты, сториборды (или SwiftUI), Podfile / SPM зависимости, а также бинарные ассеты (картинки, шрифты). Если в обычном веб-проекте merge конфликт решается за 30 секунд, то в iOS он может занять полчаса из-за .xcodeproj или .xcworkspace.
Основные проблемы, которые решает грамотный git workflow для разработчиков Swift:
- Конфликты в .xcodeproj — при добавлении файлов двумя разработчиками одновременно;
- Грязная история коммитов — «WIP», «правки», «еще правки»;
- Отсутствие code review — баги, которые попадают в main и ломают сборку;
- Сломанный CI — тесты не проходят, а никто не замечает до релиза.
2. Git Flow vs GitHub Flow: что выбрать для Swift-проекта?
Классический Git Flow (ветки develop, release, hotfix, feature) — это мощный, но тяжеловесный подход. Он идеален для крупных проектов с четкими релизными циклами, например, когда ты делаешь приложение для банка с версиями 1.0, 1.1, 2.0 и строгим QA.
С другой стороны, GitHub Flow (все изменения через feature-ветки и Pull Request в main) — это легковесный вариант для стартапов и команд, которые делают деплой каждый день. Для Swift-проектов он тоже работает, но с оговорками: если у тебя есть сториборды или XIB, merge в main должен быть максимально чистым.
Когда использовать Git Flow в Swift
- Крупные enterprise-проекты с длинными релизными циклами (например, банк, телемедицина);
- Несколько параллельных версий (v1.0 в поддержке, v2.0 в разработке);
- Жесткие требования к стабильности main ветки.
Когда использовать GitHub Flow в Swift
- Стартапы и средние проекты с быстрым деплоем;
- Команды до 10 человек;
- Проекты на SwiftUI (меньше конфликтов в референсах).
Лично я рекомендую гибрид: Git Flow с упрощенной develop-веткой — это идеальный баланс для Swift-проектов средней сложности.
3. Настройка feature-ветки: правила, которые спасут нервные клетки
Каждая новая фича — это отдельная ветка от develop (или main, если используешь GitHub Flow). Вот простой шаблон, который я использую в своих проектах:
git checkout develop
git pull --rebase origin develop
git checkout -b feature/SPT-123-login-screen
Важно: всегда делай rebase перед созданием ветки, чтобы не тащить за собой старые коммиты. И не забывай про префиксы: feature/, bugfix/, hotfix/, release/. Это упрощает поиск в истории.
Как часто синхронизироваться с develop
Делай rebase раз в день или перед коммитом. Это минимизирует конфликты. Команда:
git checkout feature/SPT-123-login-screen
git rebase develop
Если конфликты неизбежны (например, из-за .xcodeproj), используй git mergetool или вручную разрешай конфликты в Xcode, открыв проект.
4. Code review в Swift: как не убить время на пустые комментарии
Pull Request — это не бюрократия, а инструмент качества. Чтобы code review для Swift был эффективным, следуй этим правилам:
- Размер PR — не более 200-300 строк кода. Если фича большая — разбивай на несколько PR;
- Описание PR — обязательно укажи, что сделано, ссылку на задачу (Jira / Trello) и скриншоты (для UI-изменений);
- Проверяй не только код, но и логику — смотри на архитектуру (MVVM, VIPER, TCA).
Пример хорошего описания PR на Swift
## Описание
Добавлен экран логина с анимацией кнопки.
## Изменения
- Добавлен LoginViewController (MVVM)
- Создана LoginViewModel с тестами
- Обновлен .xcodeproj (новые файлы)
## Скриншоты

## Jira
[SPT-123](https://jira.example.com/browse/SPT-123)
5. CI/CD для iOS: автоматизация, которая реально экономит время
Ручной запуск тестов и сборки — это прошлый век. CI/CD для iOS должен быть настроен с первого дня. Минимальный набор:
- Автоматический запуск unit-тестов на каждый PR;
- Линтер (SwiftLint) — проверка стиля кода;
- Сборка .ipa для тестирования (TestFlight или Firebase App Distribution).
Пример конфигурации GitHub Actions для Swift
name: Swift CI
on:
pull_request:
branches: [ develop, main ]
jobs:
build-and-test:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: xcodebuild build -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator
- name: Test
run: xcodebuild test -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator
Важно: не давай мержить PR, если CI упал. Это железное правило.
6. Merge стратегии: merge commit vs rebase vs squash
В Swift-командах часто спорят, как именно мержить feature-ветки. Вот три подхода:
Merge commit
Сохраняет всю историю ветки. Плюс: видно, кто и когда делал изменения. Минус: граф становится «рогатым». Подходит для больших команд.