Mac Sandboxing和Temp文件

Fra*_* R. 5 macos cocoa sandbox

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

当它在"Hello World.txt"中更改某些内容时,它将在同一目录中创建"Hello World_temp.txt"文件,然后在完成后将交换这两个文件.

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

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

我们可以写入临时文件的位置吗?

最好的祝福,

坦率

CRD*_*CRD 9

在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...在这种情况下在沙箱下也不起作用,在这种情况下编写自己的代码来读取/写回临时代码.