【发布时间】:2019-01-25 11:44:26
【问题描述】:
我有一个 macOS/Objective-C/Cocoa 应用程序。我们想要生成外部应用程序,比如 TextEdit,来编辑这个应用程序创建的文件。我通过将这些文件复制到我的 ~/Documents 目录来创建这些文件(最终我想把它放在其他地方,但我正在尝试简化):
NSFileManager *defaultManager = [NSFileManager defaultManager];
[defaultManager copyItemAtPath:srcPath toPath:destPath error:&err];
NSDate *sourceModified = [self lastModificationOfFile:srcPath];
NSDictionary * attr = @{ NSFileModificationDate : sourceModified,
NSFileImmutable : [NSNumber numberWithBool:NO],
NSFilePosixPermissions : [NSNumber numberWithUnsignedLong:0666],
};
[defaultManager setAttributes:attr ofItemAtPath:destPath error:nil];
当我在 TextEdit 中打开此文件时,窗口标题显示“filename.txt - Locked”。编辑文档会给我“您确定要修改文档吗?”对话。我选择“覆盖”,但随后尝试保存给我“无法保存文档“filename.txt”。您没有权限。”
但是,这会将“filename.txt.sb-a69dcdc5-7V6D2g”(或类似名称)文件写入我的 Documents 目录。并且在同一目录中使用“echo blablabla > filename.txt”从 bash shell 创建的文件可以正常打开。
我在这些属性上尝试了许多变体。我看不出有效的文件和使用“ls -la@ filename.txt”或“xattr”显示“... - Locked”的文件之间有任何区别,甚至在同一目录中并排显示。
显然,我创建的文件存在沙盒问题,但我所有的搜索结果都与此问题的另一面有关。
【问题讨论】: