IOS

프로젝트에 SwiftLint를 달아보자

뭉기~ 2021. 3. 1. 16:53

팀단위 프로젝트 진행시 코드간의 가독성과 일관된 코드를 작성하는데 도움이 되는

일종의 코드 가이드를 잡아주는 Realm 에서 만든 SwiftLint 라이브러리를 사용 해보도록 하자.

 

1. SwiftLint 라이브러리 설치 (pod)

pod 'SwiftLint'

2. Target -> Build Phases -> + -> New Run script Phase

 

2-1. Run Script 에 다음과 같이 추가한다

    - 빌드시 swiftlint 가 작동하며 이제부터는 룰을 따로 추가하여 프로젝트에 맞게 진행 합니다.

"${PODS_ROOT}/SwiftLint/swiftlint"

 

이제 룰을 정해보자


3. 기본 실행 결과

 - 다음과같이 네이밍 규칙이 안맞을경우 에러를 표시해준다


4. 파일을 (파일명은 무조건 .swiftlint.yml) 으로 추가

4-1. 파일을 (파일명은 무조건 .swiftlint.yml) 으로 추가

  - 다음과 같이 프로젝트 안에 해당 파일이 올수 있도록 한다  (프로젝트->앱네임 X)

4-3. rule 예시

  - 아래 내용은 SwiftLint 문서상에 있는 예시 룰이다. 

  - 상세 정보는 -> realm.github.io/SwiftLint/rule-directory.html에서 확인 할수 있다.

disabled_rules: # 실행에서 제외할 룰 식별자들
  - colon
  - comma
  - control_statement
  - trailing_whitespace
opt_in_rules: # 일부 룰은 옵트 인 형태로 제공
  - empty_count
  - missing_docs
  # 사용 가능한 모든 룰은 swiftlint rules 명령으로 확인 가능
included: # 린트 과정에 포함할 파일 경로. 이 항목이 존재하면 `--path`는 무시됨
  - Source
excluded: # 린트 과정에서 무시할 파일 경로. `included`보다 우선순위 높음
  - Carthage
  - Pods
  - Source/ExcludedFolder
  - Source/ExcludedFile.swift

# 설정 가능한 룰은 이 설정 파일에서 커스터마이징 가능
# 경고나 에러 중 하나를 발생시키는 룰은 위반 수준을 설정 가능
force_cast: warning # 암시적으로 지정
force_try:
  severity: warning # 명시적으로 지정
# 경고 및 에러 둘 다 존재하는 룰의 경우 값을 하나만 지정하면 암시적으로 경고 수준에 설정됨
line_length: 110
# 값을 나열해서 암시적으로 양쪽 다 지정할 수 있음
type_body_length:
  - 300 # 경고
  - 400 # 에러
# 둘 다 명시적으로 지정할 수도 있음
file_length:
  warning: 500
  error: 1200
# 네이밍 룰은 경고/에러에 min_length와 max_length를 각각 설정 가능
# 제외할 이름을 설정할 수 있음
type_name:
  min_length: 4 # 경고에만 적용됨
  max_length: # 경고와 에러 둘 다 적용
    warning: 40
    error: 50
  excluded: iPhone # 제외할 문자열 값 사용
identifier_name:
  min_length: # min_length에서
    error: 4 # 에러만 적용
  excluded: # 제외할 문자열 목록 사용
    - id
    - URL
    - GlobalAPIKey
reporter: "xcode" # 보고 유형 (xcode, json, csv, codeclimate, checkstyle, junit, html, emoji, sonarqube, markdown, github-actions-logging)

4-4. rule 파일 제외 예시

  - 빌드할때 SwiftLint를 제외하는 방법이다.

excluded: # 린트 과정에서 무시할 파일 경로. `included`보다 우선순위 높음
- Pods
- SwiftLintProject/AppDelegate.swift
- SwiftLintProject/SceneDelegate.swift
- SwiftLintProject/ViewController.swift

 

제외하면 SwiftLint를 빌드 하지않고 진행한다.

 

참고 : github.com/realm/SwiftLint/blob/master/README_KR.md

 

realm/SwiftLint

A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.

github.com