2012-10-18 79 views
8

我有一個簡單的unix工具,可以從shell中啓動主可可應用程序。如何沙盒命令行工具?

我需要它沙箱,但是當我運行它,它用錯誤「非法指令:4」崩潰,在console.app我可以看到下面的錯誤消息

沙箱創建失敗:Container對象初始化失敗:NIL沒有錯誤描述 集裝箱信息對象visdiff

文件被正確地協同設計簽名。

我讀過後Mac OS app, sandbox with command line tool?,但它並不能幫助

+0

也許需要更多信息。你的工具與你的應用程序打包在一起怎麼樣你如何執行「從外殼」的工具(代碼,請)。對你提到的其他問題沒有幫助(你遇到問題的地方在哪裏)? –

+0

您是否在編碼簽名時使用了--entitlements參數? – Marius

回答

5

我有這個確切的問題,當我添加一個嵌入的Info.plist時,它就消失了。

嘗試這些鐺標誌(假設你的build目錄有info.plist):

-Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker info.plist

+1

哇。你已經保存了一天。如果可以的話,我會立即捐贈給你所有的SO點。謝謝!!! – Lizza

+0

不客氣:) –

+0

你在嵌入式Info.plist中添加了什麼信息?我相信這個plist是針對unix文件的 – Swati

4

直接從控制檯啓動控制檯應用程序或者是從主沙盒應用程序叫什麼名字?我在嘗試沙箱某些二進制文件時,類似的錯誤,我只是能夠使它只用下面的權利工作:

<dict>                                          
    <key>com.apple.security.app-sandbox</key>                                 
    <true/>                                          
    <key>com.apple.security.inherit</key>                                  
    <true/>                                          
</dict> 

當然,在這之後,你只能調用從父進程的二進制文件已經是沙箱了(這就是爲什麼我問你的二進制文件被稱爲:))。

+0

不,我的命令行工具是從unix shell調用的,它完全獨立於主沙盒應用程序 – dafi

0

,如果你簽訂com.apple.security.inherit可執行似乎只能通過另一種被稱爲已經是沙盒的應用程序。所以你在運行密碼後不能再從cmdline調用它。

+0

是的 - 這個問題一旦我用最小的com.apple.security.app-sandbox + com.apple.security.inherit plist簽署了我的幫助程序可執行文件,有沒有解決方法?或者是否需要爲每個助手可執行文件添加「真實」權利,就好像它是父級應用一樣,例如com.apple.security.network.client?我很擔心文件系統的權利,因爲我的幫手可能需要相當廣泛的訪問權限,遠遠超出了主文件夾的範圍。 – user1475135