Mac Sandboxing和Temp文件

时间:2012-03-21 14:06:17

标签: macos cocoa sandbox

我正在沙盒化我的应用程序而且我遇到了问题,因为我使用的库在修改原始文件时会创建临时文件,例如

当它改变“Hello World.txt”中的内容时,它会在同一目录中创建一个“Hello World_temp.txt”文件,然后当它完成时它将交换这两个文件。

这当然会破坏沙盒规则,因为您只能更改源文件而不是在文件夹中创建其他文件。

我找不到有关如何处理临时文件的任何建议,所以我目前只是在应用程序的容器中创建临时文件,我可以写入然后交换文件。但是,如果应用程序和文件位于不同的磁盘上,那就不太好了,因为它涉及复制而不是移动。

我们是否允许写入临时文件?

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:8)

在10.7.3+上(也在10.6上的沙盒中工作)尝试NSFileManager方法URLForDirectory:inDomain:appropriateForURL:create:error: (docs)。这应该为您提供特定卷上的临时目录。创建后,您可以使用replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:切换文件。

现在有些不确定性:

在10.7 - > 10.7.2上述方法可能在沙箱中不起作用。相反,您可以使用函数NSTemporaryDirectory() (docs)。你可能发现replaceItemAtUrl...在这种情况下在沙箱下也不起作用,在这种情况下编写你自己的代码来读/写临时代码。

答案 1 :(得分:1)

NSTemporaryDirectory()适用于沙盒。 Swift中的示例代码:

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