오늘은 Swift Format , Swift Lint를 활용해 팀프로젝트 시 혹은 일관된 코드 스타일을 유지하고 좋은 코드 스타일을 유지하는데 큰 도움이 되는 방법을 알게 되어 한번 정리 해보고자 한다!
먼저 SwiftFormat, Swift Lint는 무엇이냐면 코드 스타일과 품질을 관리하는 도구! 라고 생각하면 된다. 각각 다른 성격을 가지고 있다!
- Swift Format : 코드의 일관된 스타일을 유지하고 가독성을 높여줄 수 있도록 자동으로 설정
- Swift Lint : 잘못된 코딩 스타일, 버그, 비효율적인 코드를 찾아 경고 혹은 오류를 통해 일관된 코드 스타일을 유지할 수 있도록 도와준다.
둘 다 비슷하지만 다른 성격을 가지고 있어 나는 두개 다 사용하는 방식을 설정했다.
먼저 이 두가지는 SPM을 지원히지 않기 때문에 Cocoapods 혹은 homebrew를 통해 설치해야한다. 나는 홈브루를 통해 구현했으니 해당 방법으로 정리하는 점 참고!!
먼저 Swift Format을 설치하자!
Homebrew로 설치하는 법 프로젝트의 터미널을 열어 명령어를 작성한다.
brew install swiftformat
swiftformat --version
install을 통해 swiftformat을 설치한 뒤 제대로 설치되었는지 확인하기 위해 version을 출력해본다!
그 다음엔 swiftformat 파일을 생성해준 뒤
touch .swiftformat
생성 된 파일 내 규칙을 설정해준다. 하단에 작성한 규칙 외 본인이 추가하고 싶은 규칙을 추가하면 된다 🙂
--indent 4 # 4칸 들여쓰기
--wraparguments before-first # 함수 인자 줄바꿈
--wrapcollections before-first # 컬렉션 줄바꿈
--self remove # 불필요한 self 제거
--header strip # 파일 헤더 제거
--maxwidth 120 # 한 줄 최대 길이
--allman false # Allman 스타일 비활성화
그 다음 swiftformat을 실행해주면 상기 규칙에 맞춰 코드가 수정된다!!!
swiftforamt .
처음 수정됐을땐 매우매우 신기함.. 사진에서 보는 것과 같이 원래 띄어쓰기가 없던 부분도 규칙에 맞게 자동으로 띄워지고 여러가지 내용이 설정되게 된다.
이렇게 하면 끝이 아니고 이제 이 포맷이 프로젝트가 빌드될 때마다 실행될 수 있도록 Xcode에 통합하는 설정 과정이 남아있다!
프로젝트를 선택해 TARGETS를 들어가 Build Phases에 들어가면 + 를 눌러 Run script를 추가해줄 수 있다!
해당 내용을 추가하고 그 안에 스크립트를 추가해준다.
if [[ "$(uname -m)" == arm64 ]]; then
export PATH="/opt/homebrew/bin:$PATH"
fi
if which swiftformat > /dev/null; then
swiftformat .
else
echo "warning: SwiftFormat not installed, download from <https://github.com/nicklockwood/SwiftFormat>"
fi
이렇게 설정이 완료되면 이제 프로젝트를 빌드하면 자동으로 작동하게 된다.
다음은 Swift Lint 설정 과정을 알아보자!
앞서 설치했던 SwiftFormat 과정과 크게 다르지 않다!
brew install swiftlint
를 통해 swift lint를 설치하고
touch .swiftlint.yml
동일하게 lint 파일을 생성해 준다
생성 된 파일 내 format처럼 본인이 설정한 규칙을 설정해주면 된다!
included:
- ChatBot/
excluded:
- Pods/
- Carthage/
- ChatBotTests/
- ChatBotUITests/
disabled_rules:
- force_cast
- line_length
- function_body_length
- multiple_closures_with_trailing_closure
- opening_brace
- trailing_whitespace
format과는 다르게 자동으로 변경되는 포멧형식이 아닌 규칙에 맞지 않게 구성된 코드에 대해 경고로 알려주어 해당 내용을 수정하도록 방향을 잡아주는 역할을 한다!
동일하게 이 내용이 빌드할때 마다 실행되어 규칙을 준수 할 수 있도록 Xcode와 통합하는 스크립트를 넣어주어야 한다.
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
위에 포멧에서 설명이 되지 않았지만 arm64 관련 스크립트가 들어간 이유는 애플 실리콘 맥으로 넘어오면서 해당 내용이 추가 되어야 원활하게 작동이 되기 때문이라고 한다 🙂
아무튼 이렇게 스크립트까지 다 넣은 뒤 빌드를 실행하니 한가지 문제가 남아있었다. 바로바로..
사진과 같이 파일을 열 권한이 없다는거.. 처음엔 파일 관련 권한이 설정되지 않는 것 같아 664, 777 등 다양한 권한 설정을 하며 터미널과 한바탕 소동이 있었는데 여기가 문제가 되는게 아니었다..
해당 문제를 가지고 열심히 구글링을 해본 결과 스택오브플로우에서 어떤 외국분이 비슷한 경험을 하고 있었고 그 분이 해결하는 방향에 대해서 찾아보니 Xcode 프로젝트 설정 내 User Script SandBox 설정이 YES로 되어있는지 확인해보고 해당 내용이 YES라면 NO로 변경해보라는 글이었다!
NO로 변경하자마자 무수히 많은 경고가 뜨는 것을 보니 SwiftLint가 정상적으로 작동되는 것 같다!!!!! 간만에 막힌거 확 다 뚫린 느낌
그럼 왜 User Script SandBox가 NO로 되어야 하는지 짚어보자면 User Script SandBox 설정은 사용자 스크립트 실행 시 보안 샌드박스 환경에서 동작하도록 제한을 가한다고 한다! 이를 NO로 설정하면 일반 환경으로 실행되게 되고 파일 시스템의 경로에서 자유롭게 접근이 가능해진다는 이유로 별도 권한 내용 오류 없이 실행이 가능했던 것이었다!
이렇게 오늘은 Swift Format과 Swift Lint에 대해서 알아보았다!! 앞으로 이 두가지 툴을 제대로 활용해보면서 코드 규칙을 지키고 일관성을 맞춰 가독성 높은 코드 구현이 가능할 것 같아 계속 사용해 볼 예정이다!!
오늘은 여기까지!
'◽️ Programming > iOS' 카테고리의 다른 글
JWT의 기본 개념과 HaruFit 프로젝트에 적용해보기 (0) | 2025.01.12 |
---|---|
Deadlock에 대해서 알아보자!! (0) | 2024.12.13 |
멀티 쓰레드 환경에서 Race Condition에 대해서 알아보자 (0) | 2024.12.09 |
WKWebView를 사용해 웹페이지 가져오기 (1) | 2024.12.02 |
@AppStorage , UserDefaults의 특징 (0) | 2024.10.18 |