코드 컨벤션을 지키기 위해 추가로 SwiftLint를 사용해보려 합니다.
먼저 SwiftLint github입니다.
한국어 버전의 README도 있습니다.
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)
다음은 룰 종류가 있는 링크인데 종류가 정말 많네요... 적당한 규칙을 골라 커스텀하는 게 중요할 것 같습니다.
'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 |