728x90
SwiftLint가 뭘까?
- 회사나 팀에서 정한 스타일 규칙을 따르지 않는 코드를 확인하고 표시하는 것을 도와줘요.
- 일관된 코드를 작성하는데 도움을 주는 역할을 해요.
- 공식 Swift 언어 문서와는 직접적인 관련이 없어요!
SwiftLint를 사용하는 이유는??
1. 신경이 분산되지 않고 중요한 것에 집중
- 모든 Swift 코드가 일관성을 유지하도록 하기 위해서!
- 새로운 개발자가 합류하거나 예전 코드를 읽을 때 읽기 쉽도록 도움을 줍니다.
- 이렇게 일관적으로 코드를 작성하면 어떤 코드가 파일의 다른 부분과 비교해서 문법이 이상한 부분을 찾는 역할을 한다고 해요
2. 프로젝트간 일관성 유지
- 개인 프로젝트, 회사 프로젝트 혹은 전체 Swift 커뮤니티간에도 일관성 유지가 필요해요
- 한 프로젝트에서 SwiftLint를 잘 따라왔다면 다른 프로젝트를 봐도 효과적으로 이해할 수 있다고 해요
- 초보자나 초보 공헌자가 기존의 스타일을 따르도록 돕고, 나쁜 습관은 피하도록 하기 위한 역할도 해요
즉 가독성, 팀간 일관성 유지, 버그 예방, 좋은 코드 품질 등의 장점이 있습니다!
SwiftLint의 규칙
여러 가지 규칙들이 있지만 그 중에서 중요하다고 생각되는 세가지 규칙을 가져왔습니다.
stylistic rules
- @objc이나 @testable과 같은 속성을 어디에 두는 것이 좋은지에 관한 것으로, 프로젝트에서 어떤 동작을 준수하도록 할지 지정할 수 있습니다. 클로저 매개변수를 어디에 둘지, 여는 괄호와 같은 줄에 둘지 다음 줄에 둘지 같은 것도 결정합니다.
- 스타일과 관련된 일관성을 유지하기 위해 이런 규칙을 많이 만들 수 있습니다.
hygienic rules
- 프로젝트가 과중한 범위를 가지고 있거나 단일 파일에 알려진 것보다 더 많은 책임이 지워져서 과부하가 걸리지는 않은지 일반적으로 확인하는 규칙입니다.
- 파일이나 타입 바디가 얼마나 오랫동안 유지돼야 하는지도 결정할 수 있습니다.
- 코드의 안정성, 성능, 확장성 및 유지보수에 관한 중요한 고려 사항 중 하나입니다. 코드가 언제 수정되어야 하는지와 언제 그대로 유지되어야 하는지를 결정하는 것은 프로젝트의 특성과 요구사항에 따라 다를 수 있습니다.
- 단일 타입 내에 여러 책임 영역을 유지하려는 경우 익스텐션을 사용하기를 권장합니다.
- 줄 수나 함수를 얼마나 길게 허용할지와 같은 많은 것에 관련한 규칙들도 모두 구성할 수 있습니다.
convention rules
- Swift 커뮤니티나 Apple에서 선택한 규칙입니다. 예를 들어 최근 Apple은 공식 Swift 문서에서 매개 변수가 없는 클로저를 나타내기 위해 void->가 아니라 ()->를 사용한다고 했습니다. 한편 반환값이 없다는 것을 나타낼 때는 ->() 보다 -> Void를 사용한다고 했습니다.
SwiftLint는 완벽하지 않다.
- SwiftLint가 언제 잘못됐는지, 혹은 언제 이를 무시해야하는지 판단하는 것은 스스로가 결정을 해야한다고 해요
- linter의 역할은 보다 선택적인 것으로, 유효한 Swift 코드 두 개를 놓고 다른 쪽보다 아마 이 쪽이 좋을 겁니다 라면서 제시하는 것라고 합니다
- 자유롭게 규칙을 비활성화하고, 프로젝트의 특정 부분에서 규칙을 비활성화하기 위해 중첩 설정을 구성하세요.
- 필요한 경우 프로젝트의 서브 디렉토리에 .swiftlint.yml를 넣을 수 있고, 이 경우 하위 디렉토리에 적용됩니다. 소스 코드에서 규칙을 비활성화하는 것도 겁내지 말라고 합니다!
SwiftLint 사용법
1. SwiftLint 설치
- Homebrew를 활용해서 설치 ← 설치가 안되었으시면 눌러서 방법 확인하세요.
- 터미널에 brew install swiftlint 입력
2. Script작성
- 왼쪽 최상단 프로젝트 클릭 - Targets에서 프로젝트 명 클릭 - Build Phases 탭 클릭 - + 버튼 클릭 - New Run Script Phase
- 클릭하면 새로운 "Run Script"가 생성되는데 이걸 열어서 아래 코드를 입력해주자.
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
- Run Script 라는 이름을 SwiftLint Script로 바꿔 준 다음, 드래그 하여 위치를 Compile Sources 위로 올려준다. (컴파일 하기 전에 스크립트를 실행히셔컷 SwiftLint를 검사하는 것이 효율적이라서 순서를 이렇게 한다고 한다.)
3. .swiftlint.yml 파일 생성
- 프로젝트에서 command+N을 눌러서 new file 을 만들어준다. Empty 파일을 선택
- 파일이름은 .swiftlint.yml 로 해야만한다. .으로 시작하는 파일이기 때문에 숨김파일로 처리된다고 한다.
SwiftLint 예시
disabled_rules: # Default Rules에서 비활성화할 규칙
# 라인 뒤에 공백이 없어야 합니다. <https://realm.github.io/SwiftLint/trailing_whitespace.html>
- trailing_whitespace
# 강제 캐스팅은 피해야합니다. <https://realm.github.io/SwiftLint/force_cast.html>
- force_cast
# 강제 언래핑은 피해야합니다. <https://realm.github.io/SwiftLint/force_unwrapping.html>
- force_unwrapping
opt_in_rules: # 비활성화 되어있지만 활성화 하고 싶은 규칙
# .count==0 보다는 .isEmpty를 사용하는 것이 좋습니다. <https://realm.github.io/SwiftLint/empty_count.html>
- empty_count
# 빈 String 문자열과 비교하는 것 보다는 .isEmpty를 사용하는 것이 좋습니다. <https://realm.github.io/SwiftLint/empty_string.html>
- empty_string
excluded: # SwiftLint 검사에서 제외할 파일 경로
- Pods
- ProjectName/AppDelegate.swift
- ProjectName/SceneDelegate.swift
728x90
'SwiftUI > 정리' 카테고리의 다른 글
[SwiftUI] Combine - 기본 (0) | 2023.09.16 |
---|---|
[SwiftUI] Combine (0) | 2023.09.16 |
[SwiftUI] NavigationStack (0) | 2023.09.02 |
[Swift] 기본 문법 정리 (0) | 2023.03.19 |
[Swift] 첫 iOS 앱 개발자를 위한 가이드 from Lingo (0) | 2023.03.13 |