Mac песочница и временные файлы - PullRequest
5 голосов
/ 21 марта 2012

Я работаю над песочницей своих приложений, и у меня возникла проблема, потому что библиотека, которую я использую, создает временные файлы, когда она изменяет исходный файл, например,

Когда он что-то изменяет в «Hello World.txt», он создает файл «Hello World_temp.txt» в том же каталоге, а затем, когда он завершает работу, он меняет оба файла.

Это, конечно, нарушает правила песочницы, потому что вам разрешено изменять только исходный файл, а не создавать другие файлы в папке.

Я не могу найти никаких рекомендаций относительно того, что делать с временными файлами, поэтому в настоящее время я просто собираюсь создать временный файл в контейнере приложения, в который мне разрешено писать, а затем поменять файлы ... однако Это не очень хорошо, если приложение и файл находятся на разных дисках, так как это будет копирование , а не перемещение.

Есть ли место для временных файлов, в которые нам разрешено записывать?

С уважением,

Frank

Ответы [ 2 ]

9 голосов
/ 21 марта 2012

На 10.7.3+ (также работает из песочницы на 10.6) попробуйте метод NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error: (документы) .Это должно дать вам временный каталог на определенном томе.После создания вы можете использовать replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: для переключения файлов.

Теперь некоторая неопределенность:

В 10.7 -> 10.7.2 вышеуказанный метод может не работать впесочница.Вместо этого вы можете использовать функцию NSTemporaryDirectory() (документы) .Вы можете обнаружить, что replaceItemAtUrl... также не работает в этом случае, когда находится в песочнице, и в этом случае вы пишете собственный код для чтения / записи временного возврата.

1 голос
/ 08 мая 2015

NSTemporaryDirectory() работает в песочнице.Пример кода в Swift:

let path = "\(NSTemporaryDirectory())temp.txt"
"Hello world".writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil)
...