2011-12-23 119 views
1

我在App Store中有一個Mac應用程序,並且正在尋求在沙箱成爲強制性要求之前採用沙箱。我碰到兩個問題,並希望能在這裏發表了一些見解最好的做法,在以下幾種情況:OS X沙盒問題

  • 在我的應用程序使用NSOpenPanel提示用戶加載一個專有的文件格式。加載文件後,我的應用程序將解析它並收集NSURL到本地文件的列表。這些本地文件然後傳遞給NSImage的initWithContentsOfURL:方法。不幸的是,加載圖像文件的行爲會導致沙箱取消操作。我知道發生這種情況是因爲用戶已經給我的應用程序顯式權限來打開由NSOpenPanel選擇的文件,但不是用於我的專有格式中引用的文件。我該如何處理這個(據說相當普遍)的情況?
  • 我有一個unix可執行文件包含在我的應用程序捆綁包中,我想使用NSTask執行。考慮到腳本包含在我的包中,這在沙盒中是合法的嗎?

如果有人可以澄清以上幾點,那將不勝感激。

回答

1

1)根據我的理解,NSURL對象包含稍後重新訪問文件所需的權限,因此如果您使用硬編碼路徑,則可以使用歸檔的NSURL對象替換它們。這也假定用戶在較早的時間點在NSOpenPanel內選擇了那些filies。

2)您可以運行NSTask,但它會繼承您的主應用程序的權限。

希望其他人能聽到更多的信息。我發現Mac Developer Boards,特別是「應用程序沙箱」論壇是有幫助的,因爲蘋果員工經常投入。到目前爲止,我發現沙箱是一個無法使用的混亂。

0

首先簡單:您可以使用NSTask運行您的助手,它會繼承應用程序的沙箱。

這些URL:不容易/可靠/根本。有一種方法可以將NSURL保存到您有權訪問的文件中,以便隨後運行應用程序並重新加載它們並重新獲得訪問權限,但它被認爲是脆弱的,不被推薦。閱讀蘋果開發者論壇,這是蘋果公司正在「努力」的公認問題;鑑於這種使用脆弱解決方案的做法可能是不值得的,如果你真的想破解某些現在的作品,可以搜索開發者論壇尋找脆弱的解決方案。