M1 맥북 + Xcode 15 환경에서 SwiftLint를 적용해보면서 겪은 문제에 대해 정리한 글입니다.
아래 설명된 오류처리와 함께 추가적인 설정과 SwiftLint 설치 및 적용 과정도 정리한 내용을 보고 싶다면 여기를 참고해주세요
SwiftLint 적용하기 | Notion
1. SwiftLint 설치
healthy-degree-cc2.notion.site
‼️ 만약 M1 이상 맥북 + Xcode 15 이상 버전의 개발 환경이라면 아래에서 소개드릴 2가지 문제를 반드시 해결해주어야 SwiftLint를 정상적으로 사용할 수 있는 것 같습니다.
🚧 Homebrew로 설치 시 Apple Silicon에서 SwiftLint를 찾지 못하는 문제
Apple Silicon(M1, M2 등)에서 Homebrew를 통해 SwiftLint를 설치하는 경우, 빌드 시에 아래와 같은 경고가 발생합니다.
warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint
👉 이는 Apple Silicon에서 Homebrew가 기본적으로 /opt/homebrew/bin 폴더에 바이너리를 설치하는데, Xcode가 해당 경로를 몰라서 SwiftLint를 찾지 못하기 때문에 나타나는 경고입니다.
✅ Xcode 프로젝트의 Build Phases 옵션에서 추가해준 SwiftLint 실행 스크립트에서 PATH 환경 변수에 /opt/homebrew/bin 경로를 지정해주면 됩니다.
# 이 코드를 추가
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
🚧 Xcode 15에서 - Failed with a nonzero exit code 또는 error: Sandbox: swiftlint(19427) deny(1) file-read-data. 오류
SwiftLint의 깃허브를 살펴보니 해당 문제는 Xcode 15버전부터 발생하는 것 같습니다.
린트 설정 후 빌드를 하면 아래 사진처럼 스크립트 실행이 실패했다는 오류가 발생합니다.
👉 이는 Xcode 15에서 ENABLE_USER_SCRIPT_SANDBOXING 이라는 빌드 설정의 기본값을 NO에서 YES로 변경했기 때문에 발생하는 오류입니다.
- 이 설정은 빌드 시스템에게 소스 파일이나 중간 빌드 개체에 액세스하는 scripts phases를 차단할지 여부에 대한 내용인데, 이 값이 YES로 되어 있어서 추가한 SwiftLint Script가 소스 파일에 접근하는 것이 차단되는 것입니다.
- 추가적으로 SwiftLint의 깃허브에서도 해당 변경사항으로 인한 문제를 언급하고 있는데, 여기서는 Failed with a nonzero exit code가 아닌 error: Sandbox: swiftlint(19427) deny(1) file-read-data. 라는 에러 메세지가 나올 것이라고 말해주고 있습니다.
- 어쨌든 두 가지 오류 모두 같은 방법으로 해결이 가능합니다.
✅ Xcode에서 ENABLE_USER_SCRIPT_SANDBOXING 설정값을 다시 NO로 변경해주면 됩니다.
- 아래 사진을 따라서 프로젝트 타겟의 Build Settings로 들어간 뒤, ENABLE_USER_SCRIPT_SANDBOXING 설정값을 NO로 변경해줍니다.
이렇게 해주면 정상적으로 빌드가 될 것입니다.
참고 사이트
- SwiftLint 공식문서(깃허브) : https://github.com/realm/SwiftLint/blob/main/README_KR.md
https://github.com/realm/SwiftLint/issues/5130
SwiftLint Run Script Phase fails on Xcode 15 · Issue #5130 · realm/SwiftLint
New Issue Checklist Updated SwiftLint to the latest version I searched for existing GitHub issues Describe the bug Using SwiftLint on Xcode 15 Beta causes an error: "Command PhaseScriptExecution fa...
github.com
How to fix the "The file “.swiftlint.yml” couldn’t be opened because you don’t have permission to view it" issue
When we use swiftlint with Xcode 15 we can get the "The file “.swiftlint.yml” couldn’t be opened because you don’t have permission to view it" error. Here is how to fix it.
thisdevbrain.com
'iOS' 카테고리의 다른 글
[iOS] Core Location 사용해보기 (0) | 2024.04.23 |
---|---|
[iOS] 외국 밈(meme)에서 많이 쓰는 폰트 적용해보기 (SwiftUI) (0) | 2024.04.18 |
[ iOS ] CustomStringConvertible 프로토콜 (0) | 2024.02.13 |
[ iOS ] String → URL 변환 시 nil이 반환되는 문제 (0) | 2024.02.12 |
[ iOS ] 팀 작업 시에 Bundle Identifier 하나로 공유하기 (0) | 2023.08.27 |