코드 컨벤션을 지키기 위해 추가로 SwiftLint를 사용해보려 합니다.
먼저 SwiftLint github입니다.
GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.
A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.
github.com
한국어 버전의 README도 있습니다.
GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.
A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.
github.com
SwiftLint를 사용하기 위해선 다음의 순서가 필요합니다.
1. SwiftLint 설치
2. 프로젝트의 Script에 추가
3. .swiftlint.yml 파일 추가 및 커스텀
+ SwiftLint 규칙
설치
문서를 보면 Brew, Pod, Mint를 사용할 수 있는데 저는 Brew를 사용했습니다.
터미널에서 다음 명령어로 설치해줍니다.
brew install swiftlint
프로젝트에 추가
프로젝트 파일에 들어가 Build Phases에 들어갑니다.
+ 버튼을 눌러 New Run Script Phase를 클릭해 Run Script를 만듭니다.
이후 코드 창에 다음을 복사 및 붙여넣기합니다.
(Pod으로 설치했다면 첫번째 줄은 쓰지 않으셔도 됩니다. Brew로 설치시엔 경로를 알려줘야 인식하기에 추가해 주어야합니다.)
export PATH="$PATH:/opt/homebrew/bin"
if which swiftlint > /dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
이름을 Swift Lint Script로 바꾸고 Complile 위로 올려주었습니다.
규칙 설정
기본 규칙이 있지만 원하는 규칙을 설정할 수 있고 원하는 파일에만 지정할 수도 있습니다.
그래서 .swiftlint.yml 파일을 만들고 지정해 주어야 합니다.
프로젝트 경로에 파일을 추가해줍니다.
기본적으로 AppDelegate와 SceneDelegate에 에러가 많이 뜸으로 다음을 .yml 파일에 작성해 Lint에서 제외해 주었습니다.
excluded:
- <프로젝트 이름>/AppDelegate.swift
- <프로젝트 이름>/SceneDelegate.swift
기본적인 설치 과정은 끝났고 커스텀해서 사용하시면 됩니다. 이제 Build시에 Lint에 어긋난 부분에 경고메세지가 뜨게됩니다.
SwiftLint 규칙
- disabled_rules: 기본규칙에서 비활성화합니다.
- opt_in_rules: 기본규칙에 없는 규칙 활성화합니다.
- only_rules: 목록에 지정된 규칙만 활성화. disabled_rules또는 opt_in_rules와 함께 지정할 수 없습니다.
- analyzer_rules: analyze 명령으로만 실행되는 별개의 규칙입니다.
- included: 규칙에 포함할 경로
- excluded: 규칙에서 제외할 경로 (위에서 예제로 사용)
다음은 한국어버전 SwiftLint README에서 가져온 룰 설정 예시입니다.
disabled_rules: # 실행에서 제외할 룰 식별자들
- colon
- comma
- control_statement
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)
다음은 룰 종류가 있는 링크인데 종류가 정말 많네요... 적당한 규칙을 골라 커스텀하는 게 중요할 것 같습니다.
Rule Directory Reference
realm.github.io
'iOS > Swift' 카테고리의 다른 글
[Swift] protocol에 대하여(개념 정리) (0) | 2022.06.30 |
---|---|
[Swift] PS에 유용하게 사용할 것들 정리 (0) | 2022.06.23 |
[Swift] 클로저(closure) 축약 정리 (0) | 2022.05.29 |
[Swift] 구문 레이블 (for문 중첩 제어) (0) | 2022.04.02 |
[iOS] API 사용시 url에 한글을 사용할 수 없는 문제 (0) | 2022.03.25 |