2012-01-12 35 views
32

我開發當前沙箱的應用程序。它充當基本的文本編輯器。最近,我想測試在我的應用程序和另一個應用程序中同時打開文件時發生的情況,在一個應用程序中進行更新,然後在另一個應用程序中查看更新。我正在使用CodaBBEdit作爲我的替代編輯。如果我關閉沙盒 - 那麼這個問題不存在。但是,由於應用程序需要在3月1日之前進行沙盒處理,因此我寧願實施解決方案而不是等待和看。Mac的沙盒應用程序丟失文件權限設置爲其他應用程序

當我打開這兩個文件,並進行編輯在我的應用程序,然後切換到其他應用程序,這些變化都反映,使那些編輯們的版本剛剛從我的應用程序保存。但是,如果我從他們的應用程序中進行挽救,然後轉移到我的應用程序 - 沒有喜悅。如果不執行任何操作,控制檯會報告兩個特定錯誤:deny file-issue-extensiondeny file-write-data。該應用程序似乎失去了編輯文檔的權限,因爲文檔在我的應用程序中打開後,由外部編輯器更改。如果我嘗試將文件保存在我的應用程序中,它會要求複製文檔,因爲它無法訪問原始文檔。這種情況不會發生,因爲這些應用程序尚未被沙箱化,因此具有我的應用程序沒有的權限。如果您不想要這種行爲,也不會出現您可以阻止其他應用程序進行更改。

上developer.apple.com的文件沒有提及這種情況的。我不確定這是否是有意的行爲。如果是這樣,那麼我可以告訴我的用戶文檔權限已經丟失,他們應該保存新版本或重新打開文件。如果它不是預期的行爲,那麼NSDocument API中的哪個方法會在文件丟失後授予文件許可權?我假設答案是前者,這是有意的,但任何人都可以證實,並有文件?

+0

我最終編碼解決了這個問題。如果應用程序失去對該文件的許可,那麼我告訴用戶將我的文檔保存爲新文件或關閉。但是,似乎一個應用程序不應該能夠從另一個應用程序「竊取」權限。我想這是你爲沙盒支付的價格。 – 2012-01-13 14:20:49

+0

我發現蘋果的默認消息,該文件是在應用程序之外編輯的。看起來像這是打算。 – 2012-01-13 15:58:01

+3

請提供雷達(也可以在[OpenRadar](http://openradar.appspot.com/)上記錄它) - 沙盒目前存在許多問題,並且蘋果獲得的錯誤報告越多,越有可能他們將修復/推遲/收回沙箱。 – fzwo 2012-01-16 17:53:39

回答

1

如果不執行任何操作,控制檯會報告兩個特定錯誤:拒絕文件問題擴展名和拒絕文件寫入數據。該應用程序似乎失去了編輯文檔的權限,因爲文檔在我的應用程序中打開後,由外部編輯器更改。如果我嘗試將文件保存在我的應用程序,它要求複印這份文件,因爲它已經失去了訪問原始文檔

在像這樣的情況是不覆蓋該文件的正確的行爲,但提示用戶是否希望重新加載文檔,如果是的話重新加載並寫入。

操作系統是不允許在已更改的文件盲寫做正確的事。

見NSFilePresenter - (無效)presentedItemDidChange,看它是否改變。重新讀取文件,然後查看是否可以保存它。你不會說你已經被拒絕閱讀該文件。

此外,由於您未發佈任何代碼,因此可能有助於顯示您使用什麼代碼訪問該文件並將其保存。 NSDocument內置了處理沙箱中某些類型的文件更改。

+0

這個問題更多的是與我的應用程序與文檔交互的特定代碼相關的一般問題。所提供的任何代碼都不能準確地給出發生這種情況的整體問題的背景。我不確定我是否同意「在這種情況下的正確行爲是不覆蓋文件,而是提示用戶是否要重新加載文件,如果重新加載並寫入文件。」事實上,有時候我會使用非沙盒文本編輯器(就像這個問題一樣)來做到這一點。但是,以沙箱爲背景,我同意你的第一句話。 – 2012-08-08 13:34:30

+0

重新加載文檔的建議可能是沙盒環境中唯一真正的解決方案。我不認爲這將永遠是應用程序用戶的最佳解決方案,但沙盒與非沙盒的論點並不是我想要解決的問題。我會將其標記爲答案。感謝您的建議! – 2012-08-08 13:37:40

0

讓我們打電話給你的應用程序ScottEdit和你的競爭對手如StackEdit

可能有幾件事情正在進行。 NSDocument有一個lockDocument方法。 StackEdit可能已經鎖定了文檔,並且在保存後沒有解鎖它。如果您退出該應用程序,該文件應該解鎖並可用於您的應用程序。如果是這種情況,則需要爲使用kqueue或其他文件屬性更改的時間創建通知。

如果其他應用程序被「堵」訪問你的應用程序。您可以向該開發人員發送電子郵件,並要求他更新他的應用程序,以便在保存後解鎖文檔。最後一步是設置通知,因爲另一位開發人員可能會出現並執行相同的操作(打破您的應用)。

+1

「您可以向該開發人員發送電子郵件,並要求他更新他的應用程序,以便在保存後解鎖文檔。」不是一個可行的解決方案。假設使用文本文件和所有文本編輯器 - 這是很多電子郵件。這不是lockDocument問題或應用程序問題。這是一個沙箱權限問題。一旦外部修改了該文件,沙箱將不允許該應用程序編輯該文件。 – 2012-08-03 14:41:47