Swift Lint는 Danger와 결합해야만 진정한 가치를 발휘할 수 있습니다.

TL;DR

  • SwiftLint 설정 방법
  • fastlane의danger 동작
  • Bitrise에 영패 설치
  • Pull Request!
  • 앞말


    Swift 개발뿐만 아니라 집단 개발할 때도 정적 분석 도구(Lint)를 넣겠죠.
    예에서 빠지지 않고 Swift에도 Lint가 존재하지만 Lint를 가져와도 개발을 잠시 닫는 등 효과가 없을 때가 있다.
    그리고 이렇게 PR을 통해 올라왔을 때 원래 Lint에 있을 때 수정해야 할 부분을 논평할 수밖에 없는 상황이 있었어요.
    이거 말하는 쪽이랑 듣는 쪽이 다 싫은 것 같아요, 웃음.
    따라서 홍보할 때 Danger를 사용하여 정신 위생을 유지하는 것이 목적이다.
    ※ 이번에는 Bitrise/fastlane 사용을 전제로

    SwiftLint


    SwiftLint란 무엇입니까?


    다시 한 번 SwiftLint는 Swift에서 사용하는 정적 분석 도구입니다.
    중첩의 깊이, KeyValue의 콜론으로 공간을 여는 등의 규칙은 자신의 개발 환경에 따라 검사할 수 있습니다.
    SwiftLint용 GitHub 저장소
    https://github.com/realm/SwiftLint

    설정 방법


    Gemfile 및 Podfile 우선 설정
    Gemfile
    gem 'danger'
    gem 'danger-swiftlint' 
    
    Podfile
    # Uncomment the next line to define a global platform for your project
    platform :ios, '10.0'
    
    target 'MyApp' do
      use_frameworks!
    
      pod 'SwiftLint'
    end
    
    다음은 응용 프로그램의 디렉터리 바로 아래에 .swiftlint.yml 파일을 준비합니다.
    .swiftlint.yml
    excluded:
      - Carthage
      - Pods
    
    opt_in_rules:
      - empty_count
      - explicit_init
      - closure_spacing
      - overridden_super_call
      - redundant_nil_coalescing
      - private_outlet
      - nimble_operator
      - attributes
      - operator_usage_whitespace
      - closure_end_indentation
      - first_where
      - object_literal
      - number_separator
      - prohibited_super_call
      - fatal_error_message
    
    disabled_rules:
      - trailing_whitespace
      - cyclomatic_complexity
      - function_body_length
      - type_name
      - shorthand_operator
      - multiple_closures_with_trailing_closure
      - closure_end_indentation
      - empty_count
      - identifier_name
      - force_cast
      - file_length
      - type_body_length
      - unused_setter_value
      - function_parameter_count
    # Custom rules
    identifier_name:
      min_length: 1
    force_cast: warning
    force_try:
      severity: warning
    number_separator:
      minimum_length: 5
    large_tuple: 3
    
    Lint에 관한 규칙은 전부 설명할 수 없습니다. 반드시 공식 자료 라이브러리를 보십시오.
    SwiftLint 가져오기는 여기까지입니다.
    개발 중인 구축마다 정적 분석을 하면 Xcode에서 설정하고 이번에는 설명을 생략합니다.
    GitHub의 정적 분석 방법을 설명할 수 있습니다.

    fastlane danger action


    fastlane 기본값은danger를 지원하며 .swiftlint.yml 정적 분석을 사용할 수 있습니다.
    fastlane danger의 공식 문서는 여기.
    Step은 아주 간단합니다.

    1. Dangerfile 준비


    응용 프로그램의 디렉터리 바로 아래에 설정합니다Dangerfile.
    Dangerfile
    # Check and comment on swiftlint only in the range corrected by PR
    github.dismiss_out_of_range_messages
    swiftlint.config_file = '.swiftlint.yml' # ここで.swiftlint.ymlのパスを指定
    swiftlint.lint_files inline_mode: true
    

    2. Fastfile에서 danger 액션을 설명합니다.


    이번에는 Pull Request 때 Danger에 불을 붙이고 싶으니 Pull Request 때 주행하는 lane에 danger action을 기술하세요.
    Fastfile
    desc "Pull Request時に走るlane"
      lane :run_when_pr do |options|
        cocoapods
    
        danger # <- ここでdanger actionを記述!
    
        match
    
        gym
    
        crashlytics
      end
    
    기본적으로 옵션을 지정하지 않아도 이렇게 쓰기만 하면 움직여야 한다.
    danger 이외의 액션은 적당합니다. 적당히 설정하십시오.

    Bitrise로 표시


    Bitrise의 WorkflowSecrets 탭에서 설정DANGER_GITHUB_API_TOKEN합니다.

    GitHub의 영패 획득 방법은 ↓ 기사에서 간단명료하게 정리했다.
    GitHub "인원 access tokens" 설정 방법

    자동 끌기 요청 보기


    다음은 Pull Request를 꺼내보세요.
    정적 분석과 관련이 있다면 이런 느낌을 마음대로 논평할 수 있다!

    총결산


    SwiftLint, 어렵게 가져오면 확실히 효과를 발휘하고 싶어서 Pull Request 때 진행하는 것이 유익합니다.
    우리 자동화 평론을 통해 조그마한 초조함을 줄이고 정신 건강한 개발 생활을 합시다!

    좋은 웹페이지 즐겨찾기