Налаштування 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 день. Вартість розраховується індивідуально.







