2013-03-05 84 views
4

我正在嘗試使用codesign命令(這是一個常見的lisp應用程序並且不使用Xcode)來清理我的OS X應用程序。我創建了一個非常基本的enitlements的plist,看起來像這樣:嘗試使用密碼命令的沙箱時出錯

<?xml version="1.0" encoding="utf-8"?> 
<plist version="1.0"> 
    <dict> 
     <key>com.apple.security.app-sandbox</key> 
     <true/> 
    </dict> 
</plist> 

和我打電話的codesign命令:

codesign -s - -f --entitlements "/path/to/my/app/MyApp.app/Contents/entitlements.plist" "/path/to/my/app/MyApp.app/" 

但該命令返回以下錯誤:

/path/to/my/app/MyApp.app/Contents/entitlements.plist: cannot read entitlement data 

這個錯誤是否意味着我使用了錯誤的命令?如果是這樣的命令有什麼問題?

+0

你如何創建你的plist。手動使用文本編輯器或使用plist editor.app?應用程序產生的是二進制格式不是直接的XML – 2013-03-09 08:45:17

+0

是的我試過使用文本編輯器和plist編輯器。你會如何建議我創建plist? – Mike2012 2013-03-10 17:11:39

回答

1

Xcode的生成的plist是二進制格式,看起來像這樣一個相當標準的有限的沙箱設置:

<?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.developer.ubiquity-container-identifiers</key> 
    <array> 
     <string>$(TeamIdentifierPrefix)com.company.appanme</string> 
    </array> 
    <key>com.apple.developer.ubiquity-kvstore-identifier</key> 
    <string>$(TeamIdentifierPrefix)com.company.appname</string> 
    <key>com.apple.security.app-sandbox</key> 
    <true/> 
    <key>com.apple.security.assets.movies.read-only</key> 
    <true/> 
    <key>com.apple.security.assets.music.read-only</key> 
    <true/> 
    <key>com.apple.security.assets.pictures.read-only</key> 
    <true/> 
    <key>com.apple.security.files.user-selected.read-write</key> 
    <true/> 
    <key>com.apple.security.network.client</key> 
    <true/> 
    <key>com.apple.security.print</key> 
    <true/> 
    <key>com.apple.security.files.bookmarks.document-scope</key> 
    <true/> 
</dict> 
</plist> 

所有我可以建議是使用Xcode中構建的plist並剝離那些你不手動要鑰匙。在你的情況......

<?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.network.client</key> 
    <true/> 
</dict> 
</plist> 

如果需要出於某種原因被簽名工具和編碼屬性應該是大寫!DOCTYPE元素我只是想知道。

我還留下了一些可能需要的鍵,即使你說它是一個基本的lisp應用程序,特別是com.apple.security.files.user-selected.read-write鍵,它會給你的進程文件訪問權。

+0

非常感謝您,我在使用XCode創建二進制授權列表時能夠正常工作。看起來有點愚蠢,你需要製作一個虛擬的XCode項目來創建這個plist,但是無論什麼作品。非常感謝你的幫助! – Mike2012 2013-03-11 19:33:14

+1

你是對的,它應該沒有任何區別如何創建plist,但在蘋果遊樂場玩意味着通常使用他們的玩具。 :-( – 2013-03-12 11:25:22

相關問題