[CocoaPods] Podfile 설치 방법과 설치하면서 발생했던 Sandbox: rsync.samba deny(1) 에러 해결방법

2023. 10. 15. 00:27Framework, Library

💡 CocoaPods (Podfile)을 설치해주는 과정을 간단하게 훑어보자!


1. sudo gem install cocoapods 명령어를 터미널에 입력한다.
    ✔️ CocoaPods (iOS 개발에서 외부 라이브러리를 쉽게 불러오게 해주는 대표적인 의존성 관리 도구)를 설치하는 명령어.
    ✔️ 터미널에 자물쇠🔒 모양이 나오면 맥북 비밀번호를 입력하면 되고, 지정해 둔 비번이 없으면 그냥 enter를 누르면 된다.
    ✔️ 비밀번호를 입력해도 아무것도 입력되지 않는 것처럼 보이는 게 정상이니, 그냥 비밀번호 상관하지 말고 입력하면 된다!
    ✔️ pod --version 명령어를 이용해서 이미 설치되어 있거나, 정상적으로 설치되었는지 확인해 줄 수 있다.

2. 터미널에서 프로젝트가 있는 폴더로 이동해서 pod init 명령어를 입력한다.
    ✔️ Podfile을 생성하는 명령어.

    ✔️ 여기서 말하는 프로젝트가 있는 폴더의 기준은, ls 명령어를 입력했을 때 나오는 파일 목록이 프로젝트 이름으로 된 폴더 하나와 .xcodeproj가 보이면 정상적으로 들어왔다고 생각하면 된다.
    ✔️ 폴더 이동은 cd 명령어를 이용해줄 수도 있지만, 간편하게 해당 위치의 폴더를 터미널에 그대로 드래그해주는 방법이 더 편하다.

3. 생성된 Podfile이라는 파일을 열어, 추가하고자 하는 라이브러리를 입력하고 저장한다.
    ✔️ 라이브러리 이름만 입력하면 가장 최신 버전이 들어가고, 원하는 버전으로 지정해주는 방법도 있다.
    ✔️ 입력 방식은 아래 캡쳐본 참고.

4. 터미널로 다시 돌아와서 pod install 명령어를 입력하면 라이브러리 설치가 완료된다!
    ⚠️ pod install을 설치한 이후부터는 반드시 이전까지 사용했던 파란색 .xcodeproj 파일이 아니라, 새로 생긴 흰색 .xcworkspace 파일로 실행해줘야만 정상적으로 작동하게 된다!

3번 과정 -> Podfile은 이와 같은 형태로 입력해주면 된다.

 

💡 Podfile을 설치할 때 생겼던 에러 발생 상황


이 과정을 거치고, 라이브러리를 적용해서 프로젝트를 빌드하려고 하니까 에러가 발생했다. 

"Sandbox: rsync.samba(number) deny(1) 파일 경로"가 나오는 이상한 알 수 없는, 예전에는 없던 에러에 나는 당황하게 된다.

 

💡 에러 해결법


조금 정보를 찾아보니, Apple Developer Forum에서 힌트를 얻을 수 있었다.

빌드를 설정하는 ENABLE_USER_SCRIPT_SANDBOXING이라는 녀석이 Xcode 14에서 추가되었고,
Xcode 15에서는 이 설정을 (반드시) 권장하도록 업데이트되었다는 소식이었다. (build setting ENABLE_USER_SCRIPT_SANDBOXING was added in Xcode 14 but enabled in the update to recommend setting in Xcode 15 )

💡 샌드박스(App Sandbox)가 뭔데?
: 커널 수준에서 강제 적용되는 맥 OS의 접근 제어 기술이다.
쉽게 말해, 프로젝트의 소스 루트 내부에 있는 모든 파일에 대한 액세스를 차단하는 기술이므로, sandbox가 활성화된 경우에 스크립트 단계가 선언되지 않은 종속성을 읽거나 쓰려고 하면 샌드박스 위반으로  잘못된 빌드를 방지하기 위해 빌드를 막는 것이다.

즉, Xcode 15부터 업데이트된 sandbox의 설정을 disable 해줘야
추가로 불러오는 라이브러리 파일에 대해 액세스가 허용되는 것이 가능해지는 것이다.

해결 방법은 간단하다.
프로젝트 Build Settings에 들어가 Build Options에 있는 User Script Sandboxing을 Yes에서 No로 바꿔주면 해결된다.

 

지금은 이렇게 권한을 끄는 선에서 문제를 해결하지만,
사실 Apple이 굳이굳이 번거로움을 감수하며, Sandbox 권한을 필수로 지정하도록 만든 것은 이유가 있을 거라고 생각한다.

"App SandBox를 적용하지 않는다"는 것은 해당 앱이 앱을 실행하는 사용자의 모든 권한을 가지며 사용자가 액세스 할 수 있는 모든 리소스에 접근할 수 있다는 것을 의미하고,
이는 앱을 통해 접근할 수 있는 사용자의 모든 데이터나 시스템 리소스에 접근해서 익명의 해커가 무작위로 바이러스를 퍼뜨릴 수도 있다는 뜻이 된다.

즉, Apple은 해당 기능을 "보안 측면의 강화"라는 점에서 업데이트한 것이므로,
개발자의 입장에서 우리는 파일 접근 권한 측면의 중요성을 리마인드 해볼 필요가 있다는 결론이 나온다.