명령줄 도구 샌드박스화

소개



Xcode에서 직접 만든 명령 줄 도구를 샌드 박스화하는 방법에 대한 메모 기사입니다.

하는 것


  • Info.plist 파일을 준비하고 프로젝트로 불러옵니다(다른 프로젝트에서 생성된 파일을 불러오고 편집하면 편리함).
  • Target의 General 탭의 Identity의 choose Info.plist File..에서 (1)의 파일을 선택한다.
  • Capabilities에서 App Sandbox 추가. 적절하게 설정을 변경.
  • Target의 BuidSettings의 Packaging에서 Create Info.plist Section in Binary를 YES로 변경.


  • 이제 빌드한다.

    샌드박스 설정 확인


    codesign -d --entitlements :- 
    /Users/yoho/Library/Developer/Xcode/DerivedData/commandLineToolTest-fiajznkvauagbcaqcvfqjyprqven/Build/Products/Release/commandLineToolTest
    
    実行結果:
    
    
    Executable=/Users/yoho/Library/Developer/Xcode/DerivedData/commandLineToolTest-fiajznkvauagbcaqcvfqjyprqven/Build/Products/Release/commandLineToolTest
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <true/>
        <key>com.apple.security.files.user-selected.read-write</key>
        <true/>
        <key>com.apple.security.get-task-allow</key>
        <true/>
    </dict>
    </plist>
    
    

    관련 오류



    Info.plist Section in Binary를 YES로 하지 않으면, 빌드 자체는 성공하지만, Xcode에서 이하의 에러가 나와 디버그등을 할 수 없다.
    Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    

    이때 작성된 바이너리를 터미널에서 실행하면,
    Illegal instruction: 4
    

    로 출력된다.

    결론



    App Store에서 여러가지 공개하려고 준비하고 있지만, Sandbox화로 손질하고 있다. 좀처럼 관련 정보를 얻지 못하고 기사로 두기로 했다.

    좋은 웹페이지 즐겨찾기