
👋 들어가기 전
길고 길었던 파이썬 자동화 작업이 끝나고
드디어 iOS 개발에 들어갈 수 있다.
이번 프로젝트 역시 혼자하는 게 아닌 왁뮤 때부터 합을 맞쳐온
구구님과 함께 진행하게 되었다.
많이 바쁘신 관계로 세팅을 할 수 있는 영광이 나에게 주워졌다.
프로젝트 목표는 처음부터 끝까지 최대한 내가 세팅하고 마무리를 짓고 싶다.
그래서 첫번 째 단계는 swiftLint다.
다양한 프로젝트에서 써봤지만 대부분 다른 분이 미리 세팅을 해주셨다.
이번에는 내가 직접 세팅해보자.
✊목적
큰 프로젝트는 아니지만 같이하는 팀원이 있기때문에
코딩 컨벤션을 맞풀 필요가 있다.
나는 강제하는게 좋다.
그렇다면 린트는 좋은 선택이 될 것 같다.
☝️설치
공식 깃헙을 가보면 설치하는 방법이 굉장히 많지만
나는 Homebrew를 좋아하기때문에 Homebrew로 설치한다.
brew install swiftlint
✌️ 제약 조건 만들기
우리가 사용할 제약조건을 명시해야한다.
프로젝트 바로 아래에 .swiftlint.yml 파일을 만들어 제약조건을 명시하자.

공식 문서는 https://realm.github.io/SwiftLint/rule-directory.html 링크를 살펴보고
간단하게 예제 코드를 주석으로 정리해봤다.
disabled_rules: # 기본적으로 활성화된 규칙 중에서 제외할 항목을 지정
opt_in_rules: #기본적으로 꺼져 있는 규칙 중에서 활성화할 항목을 지정
- empty_count # → isEmpty 대신 .count == 0을 사용하는 코드 검사
# only_rules: # 모든 규칙을 명시적으로 지정하려면 disabled_rules 및 opt_in_rules를 삭제하고 사용
# - empty_parameters # 빈 매개변수 목록을 허용하지 않음 ,func someFunction { } // () 없이 함수 선언
# - vertical_whitespace # 불필요한 공백(빈 줄) 사용을 제한
# analyzer_rules: # swiftlint analyze 명령어 실행 시 적용할 규칙을 설정
# - explicit_self # → self를 명시적으로 사용할지 여부 검사
# 포함 / 미포함 여부
# included: 검사할 파일/폴더 경로를 지정 (커맨드라인에서 제공하는 경로보다 우선)
# - Sources → Sources 디렉터리 내의 파일을 검사
# excluded: 검사에서 제외할 파일/폴더 지정
# - Carthage, Pods → 패키지 매니저 관련 폴더 제외
# - Sources/ExcludedFolder, Sources/ExcludedFile.swift → 특정 폴더 및 파일 제외
# - Sources/*/ExcludedFile.swift → 와일드카드(*)를 사용해 특정 패턴의 파일 제외
# allow_zero_lintable_files: false # true로 설정하면 검사할 파일이 없어도 오류 발생 안 함 (false면 오류 발생)
# strict: false # true로 설정하면 모든 경고를 오류로 간주
# baseline: Baseline.json 기존의 린트 위반 사항을 저장하여 무시할 수 있는 기준 파일 설정
# write_baseline: Baseline.json 새로운 린트 위반 사항을 Baseline.json에 저장
# check_for_updates: true로 설정하면 SwiftLint가 실행될 때마다 업데이트 확인
# 규칙별 세부 사항
# 타입 캐스팅
force_cast: warning # 강제 형변환 (`as!`) 사용 시 경고
force_try:
severity: warning # 강제 `try!` 사용 시 경고
# 코드 길이 제한
line_length: 110 # 한 줄 최대 길이 110자로 제한
type_body_length:
- 300 # 경고 (타입 본문이 300줄 초과 시)
- 400 # 오류 (타입 본문이 400줄 초과 시)
file_length:
warning: 500 # 파일이 500줄 초과 시 경고
error: 1200 # 파일이 1200줄 초과 시 오류
# 이름 규칙
type_name:
min_length: 4 # 타입명 최소 4자 (경고)
max_length:
warning: 40 # 타입명 40자 초과 시 경고
error: 50 # 타입명 50자 초과 시 오류
excluded: iPhone # "iPhone"은 예외 처리하여 검사하지 않음
allowed_symbols: ["_"] # `_` 사용 가능
identifier_name:
min_length:
error: 4 # 변수/상수명 최소 4자 (오류)
excluded:
- id # "id" 예외 처리
- URL # "URL" 예외 처리
# 출력 형식 설정
reporter: "xcode" # json, csv, html, emoji, github-actions-logging 등 다양한 포맷 가능
👍 Build Phase
⌨️ 스크립트 생성
Build Phase에서 생성 후 Compile Sources 다음으로 옮겨준다.


스크립트를 다음과 같이 써준다.
if [ -x /opt/homebrew/bin/swiftlint ]; then # Apple Silicon 실행 가능하다면 true
/opt/homebrew/bin/swiftlint
elif [ -x /usr/local/bin/swiftlint ]; then # Intel Mac 실행 가능하다면 true
/usr/local/bin/swiftlint
else
echo "warning: SwiftLint not installed. Please install it via Homebrew (brew install swiftlint)."
fi
먼저 Homebrew로 설치한 swiftlint가 존재하는 지 확인후 존재한다면 실행한다.
❌ 오류잡기
일단 위 과정 끝낸 후 빌들하게 되면 다음과 같은 오류가 나온다.

이 오류는 Xcode 15부터 ENABLE_USER_SCRIPT_SANDBOXING
의 기본값이 YES로 변경되어 생긴 문제이다.
이 때 파일 실행 권한이 부족해서 발생하는 오류이기 때문에
error: Sandbox: swiftlint(19427) deny(1) file-read-data라는 형태로 나타난다.
💡 ENABLE_USER_SCRIPT_SANDBOXING
Xcode의 빌드 설정(Build Settings)에서 사용되는 설정 값으로, 빌드 과정에서 실행되는
사용자 스크립트(User Script)가 샌드박스 환경에서 실행될지를 결정한다.
사진과 같이 Target의 Build Settings에 sandbox를 검색 후 해당 옵션을 꺼준다.

😀 소감 및 마무리

설정했단 empty_count가 잘 오류로 검출된다.
앞으로 자주 사용될 옵션은 이 포스팅에 업데이트 하도록 하자.
출처
GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.
A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.
github.com
'iOS > Setting' 카테고리의 다른 글
.plist 등록 없이 Custom Font 추가 (0) | 2025.03.06 |
---|