1. 개요
들여쓰기 칸 수, 공백 등.. 코드를 작성하는 스타일은 사람마다 다를 수 있다.
그런데 협업을 하는 경우에도 한 프로젝트 내에 사람들의 각기 다른 습관들이 나타난다면 코드를 읽기가 참 힘들어질 것이다.
그래서 이런 약속들을 swiftLint, swiftFormat을 사용하여 정해둔다.
물론, 협업을 하지 않는 경우에도 코드 내에 사용되지 않는 등 불필요한 코드들을 관리할 수 있다.
2. SwiftLint
swiftLint는 정한 규칙을 어길 시, warning이나 error를 표시해주는 역할을 한다.
제공되는 규칙과 사용방법은 다음 링크에서 확인할 수 있다.
Rule Directory Reference
realm.github.io
참고로 필자는 프로젝트에서 다음과 같은 규칙을 정하였다.
# 한 라인 길이 제한
line_length:
warning: 180 #default: 120
error: 200
# 강제 형변환
force_cast: error
force_try: error
# 의미없는 공백/줄 바꿈
trailing_newline: warning
trailing_whitespace:
severity: warning
# 함수 길이 제한
function_body_length:
warning: 50
error: 100
# 타입 지정 시, 이름 조건
type_name:
min_length:
warning: 3
error: 0
max_length:
warning: 40
error: 1000
3. SwiftFormat
swiftlint가 경고와 에러표시만 보여주는 기능이라면, SwiftFormat은 정해진 규칙대로 코드를 수정해준다.
하나하나 우리가 직접 코드를 수정해줄 필요가 없다.
제공되는 규칙과 사용방법은 다음 링크에서 확인할 수 있다.
https://github.com/nicklockwood/SwiftFormat/blob/main/Rules.md
참고로 필자는 다음과 같은 규칙을 적용하였다.
기본적으로 추가되는 규칙들이 많아, 따로 선언할 규칙이 많이 없었다.
# 코드 들여쓰기
--indent 4
# 공백 문자 삭제
--trimwhitespace always
# 줄 바꿈 문자 관리
--linebreaks lf #cr, lf, crlf
4. 설정법
다음 블로그들을 참고하여 설정하였다.
[iOS - swift] swiftformat (SwiftFormat, Swift Format, 스위프트 포멧, SwiftLint)
[iOS - swift] swiftformat (SwiftFormat, Swift Format, 스위프트 포멧, SwiftLint)
swiftlint와 swift-foramt 차이 swiftlint는 코드 스타일을 검사하여 .yml파일에 개발자가 미리 정의한 규칙을 사용하여 스타일을 준수하지 못하면 warning이나 error를 보여주는 것 구체적인 swiftlint 사용 방
ios-development.tistory.com
SwiftLint와 SwiftFormat 적용하기 | Hohyeon Moon
SwiftLint와 SwiftFormat 적용하기 | Hohyeon Moon
SwiftLint와 SwiftFormat를 설정해 Swift 코드 스타일링을 편하게 합니다
www.hohyeonmoon.com
5. 주의사항
CocoaPods이 아닌 Homebrew를 사용하여 설치를 하였다면, 다음과 같은 설정을 반드시 해주어야한다.
프로젝트 설정에서 ENABLE_USER_SCRIPT를 검색해서, User Script Sandboxing을 No로 바꾸어야 한다.
또, 추가했던 SwiftLint와 SwiftFormat Script의 Based on dependency analysis 체크를 해제해주어야 한다.
+ 추가: No Swift version was specified
다음과 같이 swift version을 알 수 없다는 에러가 나온다면,
프로젝트 안에 .swift-version 파일을 만들고, 안에 현재 자신의 swift version을 적어주어야 한다.
'🍎 Apple > Swift' 카테고리의 다른 글
[Swift] 정규표현식, 편리하게 쓰세요. (ft. name capture) (0) | 2023.10.28 |
---|---|
[swift] closure [weak self]를 남용하지 말자. (1) | 2023.10.27 |
dequeueReusableCell과 dequeueConfiguredReusableCell, 뭐가 다를까? (0) | 2023.10.26 |
[Swift] defer, 내부 코드를 매우 간단하게 만들고 싶을 때! (0) | 2023.10.24 |
[Swift] Opaque Type: Some을 붙여 타입캐스팅할 필요없이 구체 타입으로 사용하자. (0) | 2023.10.24 |