[iOS] SwiftLint 적용하기

Han's·2023년 6월 29일
0
post-thumbnail

오늘은 SwiftLint를 적용하는 방법에 대해서 알려드리겠습니다.

SwiftLint란

SwiftLint는 Swift 코드 스타일과 관련된 정적 분석 도구입니다.

SwiftLint 사용하는 이유

협업을 하다 보면 서로 다른 코드 스타일로 인해 코드의 가독성이 떨어지는 경우가 있습니다.
이때 SwiftLint를 사용하면 Swift 언어에서 규칙에 어긋나는 코드를 찾아내서 경고 또는 빌드 에러를 반환해 주기 때문에 일관된 코드 스타일을 유지하고 코드 품질을 향상시킬 수 있어서 사용하는 것입니다.


사용법

Homebrew를 사용하는 경우와 CocoaPods을 사용하는 경우, 두 가지의 방법이 있는데 저는 CocoaPods을 통해 설치했습니다.

CocoaPods 사용법은 알고 있다는 가정하에 진행하겠습니다.


적용하기

CocoaPods을 통해 SwiftLint를 설치한 후 적용하려면 위와 같이 TARGETS -> Build Phases에서
좌측 상단의 + 버튼을 클릭하여 New Run Script Phase를 선택하면 아래와 같이 Run Script가 추가된 것을 확인할 수 있습니다.
여기서 Run Script의 이름을 SwiftLint로 변경해 주시고 주석 처리된 부분에 아래의 스크립트를 넣어주시면 됩니다.

${PODS_ROOT}/SwiftLint/swiftlint

이제 빌드를 하게 되면?
SwiftLint가 적용이 되어 규칙에 맞지 않게 작성된 코드들에 대해 경고문을 보여주는 것을 볼 수 있습니다. (현재 경고문이 나오는 게 SwiftLint가 잘 적용되었다는 뜻입니다.)
경고문은 Swift 규칙에 맞지 않아서 생기는 것이기 때문에 규칙에 맞게 수정한 후 빌드 하시면 해결됩니다.


현재 나오고 있는 많은 경고 메시지들 중에 몇 개를 확인해 보면
첫 번째 경고는 한 줄에 120자가 넘어가서 경고를 주는 것이고,
두 번째 Trailing에 공백이 있어서 생기는 경고입니다.

SwiftLint를 적용하고 규칙에 맞게 바로 사용하셔도 상관없지만 저는 두 번째 나오는 경고문은 너무 불편하여 규칙을 커스텀 해보려고 합니다.


규칙 커스텀

SwiftLint는 자신의 스타일에 맞게 규칙 커스텀이 가능합니다. (프로젝트를 진행하는 팀원, 회사의 스타일에 맞도록 커스텀 하면 됩니다.)

규칙을 커스텀 하는 방법은 아래와 같이 프로젝트에서 New File을 클릭한 후

Empty 파일을 생성하면 됩니다.
‼️ 주의‼️해야 하는 건 파일명은 무조건 .swiftlint.yml로 만들어야 합니다.

파일명을 .swiftlint.yml로 설정하면 아래와 같은 메시지가 나오는데 Use "."을 선택하면 됩니다.

여기까지 따라오셨다면 아래와 같이 비어있는 .swiftlint.yml 파일이 생성된 것을 볼 수 있습니다.
이제 여기에 커스텀 하려는 규칙을 넣으면 되는데
아래 링크에서 어떤 규칙들이 있는지 확인하시고 원하는 규칙을 넣으면 됩니다.

SwiftLint 규칙 - https://realm.github.io/SwiftLint/rule-directory.html

커스텀 옵션에는 여러 가지가 있지만 대표적으로 아래와 같은 4가지가 있습니다.
1. disabled_rules (기본 활성화된 룰 중에 비활성화할 룰 지정)
2. opt_in_rules (기본(default) 룰이 아닌 룰들을 활성화)
3. included (SwiftLint 과정에 포함할 파일 경로)
4. excluded (SwiftLint를 적용하지 않게 설정할 파일 경로, 'included'보다 우선순위가 높음)

저는 아래와 같이 커스텀 규칙을 설정했습니다.
이렇게 커스텀 규칙을 적용한 후 빌드 하면 커스텀 된 룰을 기반으로 SwiftLint가 적용되는 것을 볼 수 있습니다.


커스텀 규칙 코드(예시)

disabled_rules: # 기본 활성화된 룰 중에 비활성화할 룰을 지정
    - trailing_whitespace

#opt_in_rules: # 기본(default) 룰이 아닌 룰들을 활성화
#    - empty_count
    
#included: # swiftlint 과정에 포함할 파일 경로
#    - Source
    
excluded: # swiftlint를 적용하지 않게 설정할 파일 경로, `included`보다 우선순위 높음
    - Pods
profile
 iOS Developer

0개의 댓글