Настройка SwiftLint для проверки стиля iOS-кода
SwiftLint — статический анализатор Swift-кода от Realm. Проверяет соблюдение Swift API Design Guidelines и кастомных правил команды. На проекте с 5+ разработчиками без SwiftLint через три месяца часть кода будет с trailing whitespace, другая — с force_cast и force_unwrapping разбросанными где попало, а ещё часть — с функциями по 200 строк.
Установка и базовая конфигурация
Через Swift Package Manager (предпочтительно для команд — версия фиксируется):
// Package.swift или через Xcode → Add Package Dependencies
.package(url: "https://github.com/realm/SwiftLint.git", from: "0.57.0")
Запуск в Build Phase:
# Build Phase → Run Script
if which swiftlint > /dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
Файл .swiftlint.yml в корне проекта:
included:
- Sources
- Tests
excluded:
- Sources/Generated
- Pods
- .build
disabled_rules:
- trailing_whitespace # если редактор не чистит автоматически
opt_in_rules:
- array_init
- closure_spacing
- conditional_returns_on_newline
- contains_over_filter_count
- empty_count
- explicit_init
- fatal_error_message
- first_where
- force_unwrapping
- implicitly_unwrapped_optional
- overridden_super_call
- private_outlet
- prohibited_super_call
- sorted_imports
- unneeded_parentheses_in_closure_argument
line_length:
warning: 120
error: 200
function_body_length:
warning: 50
error: 100
file_length:
warning: 400
error: 600
type_body_length:
warning: 200
error: 400
cyclomatic_complexity:
warning: 10
error: 20
custom_rules:
no_print:
name: "No print statements"
regex: "\\bprint\\("
message: "Use Logger instead of print()"
severity: warning
Autocorrect в CI
SwiftLint умеет автоматически исправлять часть нарушений:
swiftlint --fix --format
В CI это используется как отдельный шаг: исправляет, коммитит изменения обратно в ветку. Но обычно надёжнее — запускать --fix локально через pre-commit hook.
Pre-commit hook
#!/bin/bash
# .git/hooks/pre-commit
git diff --cached --name-only --diff-filter=ACM | grep "\.swift$" | while read FILE; do
swiftlint lint --path "$FILE" --quiet
if [ $? -ne 0 ]; then
echo "SwiftLint failed for $FILE"
exit 1
fi
done
Или через lefthook / pre-commit framework — удобнее для управления в команде.
Интеграция в CI
- name: Run SwiftLint
run: |
swiftlint lint \
--reporter github-actions-logging \
--strict
--strict превращает warnings в ошибки. --reporter github-actions-logging выводит нарушения в формате GitHub PR Annotations — они отображаются прямо на строках кода в PR Review.
Срок: 1 день. Стоимость рассчитывается индивидуально.







