SwiftLint 란?
Swift 언어로 앱을 개발하다보면 코드의 스타일, 컨벤션을 맞추는데 어려움이 있다. 이때 SwiftLint 를 사용하여 코드의 스타일과 컨벤션을 효과적으로 맞출수 있다. SwiftLint 를 적용하여 코드를 작성하면 SwiftLint 에서 적용한 스타일과 맞지 않는다면 아래와 같이 Warning 이 뜨게 된다. 빌드와 프리뷰는 되지만 아주아주 거슬리기 때문에 스타일에 맞게 고칠 수밖에 없게 된다.
상단 SwiftLint 홈페이지에 적용방법이 자세히 나와있지만 그중 적용하는 간단한 방법을 소개해 보려고 한다.
1. SwiftLint 설치
우선 터미널을 켜고, 어디 들어가고 할 필요없이 SwiftLint 를 설치해준다.
// Homebrew
brew reinstall swiftlint
2. Xcode Project 에 Run Phase 추가
Xcode 에서 Target → Build Phases → + → New Run Script Phase 경로로 들어가서 New Run Script Phase 를 만들어 준다.
3. 스크립트 추가
아래 코드를 스크립트에 추가해준다.
if [[ "$(uname -m)" == arm64 ]]; then
export PATH="/opt/homebrew/bin:$PATH"
fi
if which swiftlint > /dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
Run Script 를 SwiftLint 로 이름을 바꿔주고 Compile Sources 위에 위치시킨다.
4. .swiftlint.yml 파일 추가
프로젝트 상위에 .swiftlint.yml 파일을 추가해준다. 우선 Empty 파일을 추가해준다.
그리고 .swiftlint.yml 로 파일명을 만들어 준다.
.이 앞에 붙으면 파일이 숨겨진다라는 문구가 뜨는데 그냥 Use "." 버튼을 눌러 파일을 추가해준다.
4. Build 해보기 (트러블 슈팅)
그리고 빌드를 해보자! 역시 오류가 뜨는데 나는 아래의 문구와 함께 Sandbox: swiftlint(6688) deny(1) file-read-data... 오류가 발생하였다.
warning: The file “.swiftlint.yml” couldn’t be opened because you don’t have permission to view it. – Falling back to default configuration
이것은 Target → Build Settings → sandbox 검색 → User Script Sandboxing 을 No 로 변경 하면 된다. 그리고 빌드하면 끝! 이러고 빌드를 해보니 오류가 51개가 떠버렸다...
5. swiftlint.yml 파일에 내용 작성하기
.swiftlint.yml 파일에 내용을 넣지 않으면 기본 룰이 적용된다. 기본 룰에 대해서는 상단의 Github 링크로 가면 자세히 볼 수 있다. swiftlint.yml 파일에 내용을 넣어서 스타일을 결정할 수 있다. 나는 아래와 같이 간단하게 룰을 설정해 보았다. 무작정 룰을 넣을게 아니고 하나하나 룰을 살펴보면서 이 룰이 왜 생겨났는지도 파악하면서 swiftlint 를 적용해보면 재밌을 것 같다.
disabled_rules: # 실행에서 제외할 룰
- trailing_whitespace
- comment_spacing
- identifier_name
opt_in_rules: # 일부 룰은 옵션이라 아래에 추가해야 한다
6. Run Script... 오류 해결
Xcode 14 부터 아래와 같은 오류가 뜬다고 한다. 하지만 정말 간단하게 Target → Build Phases → SwiftLint 선택 → Based on depenency analysis 체크 해제 로 간편하게 해결 되었다.
Run script build phase 'SwiftLint' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase.
'→ Xcode' 카테고리의 다른 글
[Xcode] nw_connection_copy_connected_local_endpoint... 오류 (0) | 2024.02.06 |
---|---|
[Xcode] Thread Sanitizer (0) | 2024.01.11 |
[Xcode] 내 Xcode 프로젝트는 몇줄일까? (0) | 2024.01.07 |
[Xcode] 원하는 폰트가 적용되지 않을때 (1) | 2023.11.24 |