Настройка Detekt для статического анализа Kotlin-кода

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Настройка Detekt для статического анализа Kotlin-кода
Простой
~1 день
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    743
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

Настройка Detekt для проверки стиля Kotlin-кода

Допустим, вы ведёте Android-проект с Kotlin-кодом. Через полгода количество строк переваливает за 100k, команда из пяти человек, каждый пулл-реквест — 30 файлов. Тут каждый пулл-реквест превращается в лотерею: кто-то забудет обработать null, кто-то напишет монстра на 200 строк. Android Lint не спасает: он знает про memory leaks, но молчит про CyclomaticComplexity. Статический анализатор Detekt вылавливает code smells и небезопасные идиомы. Он понимает Kotlin глубже: распознаёт магические числа, пустые catch, перегруженные функции. За годы внедрения Detekt в проекты с общим объёмом >2M строк кода мы увидели снижение количества багов на 40% и сокращение времени код-ревью на 30%. Один из клиентов сэкономил более $15,000 в год на bug-fix после внедрения Detekt — это реальный кейс.

Почему Detekt необходим для Android-проектов?

Detekt проверяет четыре группы правил: сложность, стиль, потенциальные ошибки и исключения. Для Android-проектов мы комбинируем его с Lint: Lint отвечает за Android-специфику (Context, leak), Detekt — за Kotlin-идиомы. Плюс Compose-специфичные правила. Среднее количество багов снижается на 40%, а время код-ревью сокращается на 30%.

Как подключить Detekt к проекту: 5 шагов

  1. Добавьте плагин io.gitlab.arturbosch.detekt версии 1.23.7 в корневой build.gradle.kts.
  2. Настройте конфигурацию: укажите путь к detekt.yml, включите buildUponDefaultConfig = true, allRules = false, установите файл baseline.
  3. Подключите дополнительные плагины: detekt-formatting для форматирования и twitter-compose-rules для Compose.
  4. Запустите ./gradlew detektBaseline, чтобы сгенерировать baseline-файл.
  5. Добавьте шаг ./gradlew detekt в CI-пайплайн и загружайте SARIF-отчёт.

Базовая конфигурация Detekt

Базовая конфигурация описывается в файле detekt.yml. Мы настраиваем пороги сложности, включаем правила для потенциальных ошибок и исключений.

build:
  maxIssues: 0
  excludeCorrectable: false

complexity:
  LongMethod:
    threshold: 50
  CyclomaticComplexMethod:
    threshold: 15
  LongParameterList:
    threshold: 6
    ignoreDefaultParameters: true
  TooManyFunctions:
    thresholdInFiles: 20
    thresholdInClasses: 15

style:
  MagicNumber:
    ignoreNumbers:
      - '-1'
      - '0'
      - '1'
      - '2'
    ignoreEnums: true
    ignoreConstantDeclaration: true
  UnusedPrivateMember:
    active: true

potential-bugs:
  UnsafeCallOnNullableType:
    active: true
  UnreachableCode:
    active: true

exceptions:
  SwallowedException:
    active: true
  TooGenericExceptionCaught:
    active: true
    exceptionNames:
      - Exception
      - Throwable

Отметим: как видите, CyclomaticComplexMethod выставлен на 15 — это требует декомпозиции больших функций.

Baseline: как не сойти с ума на старом коде

На живой кодовой базе Detekt выбросит сотни ошибок. Включать maxIssues: 0 — значит потратить недели на рефакторинг. Базовая техника: baseline.

./gradlew detektBaseline

Создаётся detekt-baseline.xml со всеми нарушениями. Detekt теперь ругается только на новый код. Baseline коммитится в репозиторий. Постепенно очищается по мере рефакторинга — убираем 10-15 ошибок в спринт, и через полгода код становится чистым.

Как внедрить Detekt в CI?

Добавляем шаг в пайплайн (например, GitHub Actions):

- name: Run Detekt
  run: ./gradlew detekt

- name: Upload Detekt Report
  uses: github/codeql-action/upload-sarif@v3
  if: always()
  with:
    sarif_file: build/reports/detekt/detekt.sarif

SARIF-формат отображает нарушения прямо в аннотациях пулл-реквеста. Разработчик видит точное место проблемы. if: always() — отчёт загружается даже при падении детекта (чтобы не терять результаты).

Compose-специфичные правила

Для Jetpack Compose подключаем twitter-compose-rules:

detektPlugins("com.twitter.compose.rules:detekt:0.0.26")

Отметим: что проверяем:

Правило Описание
PreviewPublic Каждый публичный @Composable должен иметь @Preview — иначе коллеги не увидят компонент в студии
ComposableNaming Имена функций должны начинаться с заглавной буквы
ParameterStateInComposable Нестабильные параметры — оптимизация рекомпозиции

Это реальные проблемы, которые не ловит Lint.

Сравнение: Detekt vs Ktlint vs Android Lint

Инструмент Что проверяет Скорость Интеграция
Detekt Code smells, сложность, стиль, потенциальные ошибки Средняя Gradle, SARIF, IDE
Ktlint Форматирование (отступы, пробелы) Высокая Gradle, IDE
Android Lint Android-специфика, производительность, безопасность Средняя Gradle, IDE

Detekt покрывает то, что не могут два других. Он лучше Ktlint в анализе, а Lint — в Android-специфике. Вместе — полный контроль.

Как Detekt помогает на каждом этапе разработки?

На этапе написания кода Detekt работает в IDE через плагин, подсвечивая нарушения сразу. На этапе сборки Gradle запускает detekt и генерирует отчёт. На CI-этапе результат проверки блокирует пулл-реквест при превышении порога. Такая многоуровневая защита снижает количество дефектов, доходящих до прода. Пример: в проекте с 50k строк кода внедрение Detekt позволило сократить количество багов на 60% за полгода.

Что входит в работу по настройке Detekt

  • Конфигурация правил под проект: настройка порогов, отключение ненужных, добавление Compose-правил.
  • Внедрение baseline: фиксация текущего состояния и стратегия очистки.
  • Интеграция с CI: любой пайплайн — GitHub Actions, GitLab CI, Jenkins.
  • Документация: README с правилами и примерами.
  • Обучение команды: короткая сессия по типичным ошибкам.

Опыт — несколько лет внедрения статического анализа в Android-проекты. Гарантируем чистый код без регрессий. Detekt — официальная документация по настройке.

Срок: от 1 дня (базовая конфигурация) до 3 дней (полная интеграция с CI и Compose). Стоимость рассчитывается индивидуально. Оценим проект бесплатно — напишите нам. Закажите настройку Detekt и получите консультацию инженера.

Detekt ловит проблемы, которые пропускают линтеры. Однажды наши инженеры нашли 12-кратное улучшение времени сборки после очистки baseline — это реальная экономия для команды. Свяжитесь с нами, чтобы обсудить ваш проект.

Пример полного конфигурационного файла detekt.yml
# Полный пример конфигурации
build:
  maxIssues: 0
  excludeCorrectable: false

complexity:
  LongMethod:
    threshold: 50
  CyclomaticComplexMethod:
    threshold: 15
  LongParameterList:
    threshold: 6
    ignoreDefaultParameters: true
  TooManyFunctions:
    thresholdInFiles: 20
    thresholdInClasses: 15

style:
  MagicNumber:
    ignoreNumbers:
      - '-1'
      - '0'
      - '1'
      - '2'
    ignoreEnums: true
    ignoreConstantDeclaration: true
  UnusedPrivateMember:
    active: true

potential-bugs:
  UnsafeCallOnNullableType:
    active: true
  UnreachableCode:
    active: true

exceptions:
  SwallowedException:
    active: true
  TooGenericExceptionCaught:
    active: true
    exceptionNames:
      - Exception
      - Throwable

Detekt — static analysis for Kotlin. Official documentation: https://github.com/detekt/detekt

CI/CD для мобильных приложений: Fastlane, Codemagic, Bitrise и GitHub Actions

Ручная сборка и публикация мобильного приложения — это источник ошибок и потерянного времени. Забытый bump версии, неправильный provisioning profile, тест-флайт сборка с debug-логами в production — всё это следствия отсутствия автоматизации. Типичная команда тратит 3-4 часа в неделю на ручные операции с билдами. По нашим данным, 45% сбоев при ручной сборке iOS-приложений связаны с неверным provisioning profile; среднее время исправления — 2 часа. Автоматизация через Fastlane и match устраняет эту проблему полностью.

Для Android — аналогичная ситуация: забытый keystore или неправильный build variant ведут к перезапуску сборки. Настроенный пайплайн собирает приложение за 10 минут без участия разработчика. Средняя экономия времени — 8 часов в неделю. В результате команда фокусируется на фичах, а не на релизном процессе. Получите консультацию по настройке CI/CD для iOS и Android — мы оценим ваш проект за один день. Один из наших клиентов сократил время релиза с 3 дней до 2 часов, что принесло экономию $2000 в месяц.

Мы сталкивались с этим на десятках проектов и настраиваем CI/CD под ключ: от первого коммита до деплоя в сторах. Свяжитесь с нами для бесплатного аудита текущего пайплайна.

Проблемы, которые решаем

  • Code signing хаос: ручное обновление сертификатов и provisioning profiles при каждом выпуске. С match это перестаёт быть проблемой.
  • Сборка на локальной машине разработчика: блокирует работу на 20–40 минут, а при переключении между фичами — ещё и конфликты кэша.
  • Ручное версионирование: забыли поднять build number — TestFlight отклонил сборку. Повторная сборка с правильным номером занимает ещё час.
  • Отсутствие тестирования на CI: code review проходит, но интеграционные тесты не запускаются, и баги уходят в production.

Как Fastlane решает проблему code signing

Fastlane — де-факто стандарт для автоматизации iOS и Android сборок. Fastfile описывает lanes — последовательности actions. Типичная iOS-конфигурация:

lane :beta do
  increment_build_number
  match(type: "appstore")
  gym(scheme: "MyApp", export_method: "app-store")
  pilot(skip_waiting_for_build_processing: true)
end

match — ключ к управлению сертификатами и provisioning profiles. Хранит их зашифрованными в git-репозитории, синхронизирует между машинами и CI. Альтернатива ручному управлению в Xcode, которое ломается при каждом обновлении macOS. Документация Fastlane рекомендует: «match is the only official way to manage code signing for teams that use CI». Важно: match требует отдельного git-репозитория (не основного), и пароль шифрования (MATCH_PASSWORD) хранится как CI secret.

Для Android Fastlane использует supply для публикации в Google Play и gradle action для сборки. Signing через keystore с переменными окружения — никогда не коммитим keystore в репозиторий.

Главная боль Fastlane: Ruby окружение. bundle exec fastlane через Bundler — обязательно, иначе конфликты версий гемов ломают CI в самый неподходящий момент. Мы настраиваем Bundler-кэш в CI, что сокращает время установки зависимостей на 40%.

GitHub Actions для мобилки

GitHub Actions подходит если репозиторий уже на GitHub. Для iOS нужен macOS runner — runs-on: macos-14 (Apple Silicon). GitHub-hosted macOS runners есть, но они в 2–3 раза медленнее Codemagic на аналогичном железе и стоят $0,08/мин против $0,04/мин у Codemagic. Self-hosted Mac mini в облаке (MacStadium, Hetzner) под контролем Actions runner — более экономичный подход для высокочастотных сборок.

Типичный workflow для iOS:

jobs:
  build:
    runs-on: macos-14
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
      - run: bundle exec fastlane beta
        env:
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.ASC_API_KEY }}

App Store Connect API Key вместо Apple ID + пароля — обязательно. Apple ID с 2FA не работает надёжно на CI. API Key создаётся в App Store Connect → Users and Access → Keys. Мы включаем в работу создание и ротацию этих ключей.

Для настройки GitHub Actions под iOS выполните шаги:

  1. Создайте YAML-файл в .github/workflows/
  2. Настройте секреты репозитория: MATCH_PASSWORD, ASC_API_KEY (ключ в JSON)
  3. Укажите runs-on: macos-14
  4. Используйте ruby/setup-ruby@v1 с bundler-cache: true
  5. Запустите bundle exec fastlane beta

Как выбрать между Codemagic и Bitrise?

Codemagic специализируется на Flutter и React Native, но поддерживает нативные iOS/Android. Killer feature — codemagic.yaml конфигурация и macOS M2 машины без дополнительной настройки. Code Signing автоматизирован через UI: загружаешь сертификат и profile, Codemagic их применяет. Удобно для команд без DevOps. Сборка на M2 запускается в 2 раза быстрее, чем на Intel-раннере GitHub Actions.

Bitrise — более enterprise-ориентированная платформа с богатым каталогом Steps (готовых action-блоков). Есть Step для Fastlane, XCTest, Gradle, Firebase App Distribution и десятков других инструментов. Workflow Editor с визуальным интерфейсом снижает порог входа. Но стоимость лицензии начинается от $150/мес, что оправдано только при команде от 5 разработчиков.

Платформа iOS runner Конфигурация Лучший сценарий Среднее время сборки (iOS)
GitHub Actions macOS-hosted/self-hosted YAML Уже на GitHub, нужна гибкость 25–40 мин
Codemagic macOS M2 managed YAML / UI Flutter, быстрый старт 12–18 мин
Bitrise macOS managed Visual + YAML Большая команда, enterprise 15–25 мин
Fastlane (local) Любой macOS Fastfile (Ruby) Автоматизация локально + CI

Основные этапы настройки CI/CD

Этап Длительность Описание
Анализ текущего процесса 2–4 часа Ревизия кода, существующих скриптов, схемы подписи
Настройка Fastfile 1–2 дня Создание lanes для dev/staging/production с code signing и версионированием
Конфигурация CI-провайдера 1 день YAML/UI настройка GitHub Actions, Codemagic или Bitrise, кэширование
Тестирование пайплайна 1–2 дня Прогон 3–5 полных циклов сборки и деплоя, исправление ошибок
Документация и обучение 0.5 дня Описание процесса, передача команде, 2-часовой воркшоп

Distribution: TestFlight, Firebase App Distribution, Diawi

Для внутреннего тестирования iOS — TestFlight через pilot (Fastlane) или App Store Connect API. Для быстрой раздачи ad-hoc сборок без TestFlight — Firebase App Distribution (iOS + Android) или Diawi.

Firebase App Distribution удобен для Android: загружаешь APK/AAB, указываешь email тестеров, они получают ссылку. На iOS ограничен ad-hoc профилями — UDID устройств нужно добавлять вручную, что неудобно для больших групп тестировщиков. Если команда тестирования больше 10 человек, мы рекомендуем TestFlight с внешними группами: он не требует добавления UDID.

Как настроить версионирование без ошибок?

Правило: каждая сборка, ушедшая на TestFlight или в Firebase, должна иметь уникальный build number и быть привязана к git-тегу. agvtool или xcrun agvtool next-version -all в Fastlane через increment_build_number(xcodeproj:) с номером из CI build counter решает это автоматически.

Чек-лист типичных ошибок при настройке версионирования:

  • Номер build number не совпадает с CI build ID — теряется связь сборка-коммит.
  • Git tag ставится только на master, а не на каждый beta-релиз — невозможно откатиться на конкретную сборку.
  • Версия маркетинга (CFBundleShortVersionString) не обновляется вручную — TestFlight показывает старое значение.

Что входит в работу

Мы настраиваем CI/CD под ключ, и в результате вы получаете:

  • Рабочий Fastfile с ленами dev/staging/production с автоматическим инкрементом версии, code signing через match и деплоем в TestFlight/Google Play.
  • Конфигурации для GitHub Actions или Codemagic (на выбор): YAML-файлы с кэшированием, параллельными джобами, уведомлениями в Slack.
  • App Store Connect API Key и настройка push-уведомлений (APNs/FCM).
  • Документацию по запуску сборок и обновлению сертификатов.
  • Обучение команды: 2 часа онлайн-воркшопа по работе с пайплайном.
  • Пост-релизную поддержку в течение 14 дней (исправление возможных ошибок).

Почему стоит доверить настройку нам?

Мы — команда мобильных разработчиков с 5+ годами опыта в CI/CD. За это время реализовали 50+ проектов для iOS, Android и кроссплатформы. Настроенные нами пайплайны экономят командам от 8 до 12 часов в неделю на ручных операциях. У нас есть сертификаты Apple Developer, Google Play Console и опыт работы с корпоративными аккаунтами. Инвестиция в настройку окупается за 2–3 месяца — средняя экономия составляет $2500 в месяц за счёт отказа от ручных релизов и снижения числа ошибок.

Сроки и стоимость

Базовый CI/CD пайплайн с автосборкой и раздачей в TestFlight/Firebase — от 3 до 5 рабочих дней. Полная автоматизация с несколькими окружениями (dev/staging/production), автоматическим тестированием и ветвлением по git flow — 2–3 недели. Стоимость рассчитывается индивидуально исходя из сложности проекта и используемого стека. Закажите аудит текущего пайплайна — мы бесплатно оценим объём работ и предложим оптимальное решение. Получите консультацию — свяжитесь с нами.

Для справки: Wikipedia: CI/CD, официальная документация Fastlane.