Per decision to use common industry practice now and tune later: - structures: standard layouts (go cmd/internal/pkg, python src-layout, rust cargo, ts pnpm workspaces, kotlin Gradle modules, swift SwiftPM) - linters: default rulesets (golangci base, clippy -D warnings, ruff+mypy, typescript-eslint+prettier, ktlint+detekt, swiftlint+swiftformat) - test runners: TS=vitest; coverage soft targets (~70-80%) marked '(пороги уточним)' - swift deps: SwiftPM (Package.resolved), CocoaPods legacy-only - reworded intros: values are industry defaults to be tuned, no raw TODO markers left Verified: no TODO markers remain in *-standards; all six skills load via pi.
3.4 KiB
3.4 KiB
name, description
| name | description |
|---|---|
| swift-standards | Используй при написании, ревью и проверке кода на Swift (iOS/macOS) — структура проекта, запуск swiftformat/swiftlint, сборка и тесты, формат коммитов и merge request. Применяй всегда, когда пишешь или правишь Swift-код, готовишь MR, а также в командах /bugfix, /feature и /review для Swift/iOS-репозиториев. |
Стандарты Swift
Один из наших языков — Swift (iOS/macOS). Ниже — общепринятые дефолты экосистемы; значения под M.Video заполнены дефолтами индустрии — тюним позже.
Структура
Ориентир (уточняется под компанию):
Package.swift # SwiftPM, или *.xcodeproj / *.xcworkspace
Sources/<Target>/...
Tests/<Target>Tests/...
Ориентир: SwiftPM-пакет (
Package.swift),Sources/+Tests/. Эталон уточним.
Линтеры и форматирование
- Форматирование: swiftformat —
swiftformat --lint .(автоформатswiftformat .). - Линтер: swiftlint —
swiftlint(конфиг.swiftlint.yml), в CIswiftlint --strict. Дефолт: SwiftLint + SwiftFormat (дефолтные конфиги). Корпоративный пресет уточним.
Тесты
- SwiftPM:
swift test. - Xcode-проект:
xcodebuild test -scheme <Scheme> -destination 'platform=iOS Simulator,name=iPhone 15'. - Покрытие:
swift test --enable-code-coverage, мягкий ориентир. (пороги уточним)
Сборка и зависимости
- Сборка:
swift build(илиxcodebuild build -scheme <Scheme>). - Зависимости: SwiftPM (
Package.resolvedкоммитим); CocoaPods — только для легаси.
Коммиты и MR
- Формат коммитов: Conventional Commits (
feat:,fix:,chore:,docs:,refactor:,test:…). - Ветки и деплой: фича-ветки — от
main(в имя ветки желательно включать ключ тикета). Деплой управляется ветками/тегами: веткаrelease-*→ раскатка на stage; тегv*→ раскатка в прод. Веткиrelease-*и тегиv*без необходимости не пушь —permission-gateпереспросит. - MR обязателен (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение
permission-gateдополнительно переспросит. - Перед MR:
swiftformat --lint .,swiftlint --strict, тесты — всё зелёное. - Описание MR: что и зачем, как проверено, ссылка на тикет (скилл
jira-workflow).
Чек-лист перед MR
swiftformat --lint .чистоswiftlint --strictчисто- тесты зелёные, есть тесты на новую логику / фикс
- нет секретов и закоммиченных ключей/
.env - описание MR со ссылкой на тикет