본문 바로가기

IOS

iOS build fail User Script Sandboxing sandbox: rsync.samba(12741) deny(1)

 

Xcode의 Build Options에 포함되어 있다.

 

"User Script Sandboxing"

사용자 정의 스크립트가 실행되는 환경을 제한하여, 보안과 안정성을 높이기 위해 도입된 기능이라고 함. 

 

Xcode의 "Run Script" 빌드 단계에서 사용자 스크립트가 실행될 때 사용된다.

이 옵션을 활성화하면 스크립트는 제한된 권한 내에서 실행되며, 시스템에 대한 무제한적인 접근을 막게 된다.

 

 

  1. 제한된 권한:
    • 스크립트가 파일 시스템에 접근할 수 있는 범위를 제한
    • 네트워크 접근을 제한하여 외부로 데이터를 전송하거나 외부에서 데이터를 받는 것을 방지
  2. 리소스 제어:
    • 스크립트가 사용할 수 있는 CPU 및 메모리 리소스를 제한하여, 시스템 과부하를 방지
  3. 보안 강화:
    • 시스템에 치명적인 명령어 실행을 차단하여 악의적인 코드 실행을 방지

 

ios 의 sandboxing 특성과 비슷해보인다. 결국 user defined script 또한 sandboxing을 적용한다? 같은 느낌.

 

기본값 설정은 YES로 되어 있었고, 해당 값을 NO로 변경할 경우, 빌드 문제는 해결됐다.

 

해당 빌드 실패가 발생한 시작은 Cocoapod을 통해 Google에서 제공하는 AppAuth 프레임워크를 추가하고, 발생

 

Xcode의 Report Navigator을 통해서 Run custom shell script를 실행하는 과정에서 Build Fail이 발생된 것을 확인할 수 있었음.

 

 

custom shell script 인 [CP] Embed Pods Frameworks에서

실행된 스크립트 경로를 직접 찾아 들어가서 내용을 확인해봤을 때,

해당 스크립트에서는 Pod에서 통합할 때 사용하는 shell script 파일을 실행

실제 타겟 프로젝트에 추가된 Pods Frameworks에 기재된 쉘 스크립트 경로

 

User Script Sandboxing 옵션이 켜져 있어서

 

file-read-data

file-write-create

 

Pod을 통해 의존하는 Google의 AppAuth에서 파일 시스템의 읽기 및 쓰기 권한이 막혀서 빌드가 실패했다고 생각된다.

 

user script sandboxing 옵션을 NO로 변경해서 build를 진행했으나, 

만약 script sandboxing을 사용한다고 하면 해당 스크립트 내용을 수정해서 제한된 권한을 사용하지 않도록 수정해야할 듯 하다.