让macOS沙盒应用写入由我的非沙盒应用创建的文件

时间:2019-01-24 19:37:31

标签: macos cocoa sandbox

我有一个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-锁定”。编辑文档会给我“您确定要在适当位置修改文档吗?”对话。我选择“覆盖”,但尝试保存时给我“无法保存文档“ filename.txt”。您没有权限。”

但是,这会将“ filename.txt.sb-a69dcdc5-7V6D2g”(或类似名称)文件写入“我的文档”目录。从bash shell在同一目录中使用“ echo blablabla> filename.txt”创建的文件打开就可以了。

我在这些属性上尝试了多种变体。我看不到工作的文件和使用“ ls -la @ filename.txt”或“ xattr”显示“ ...-锁定”的文件之间的任何区别,即使在同一目录中并排显示。

很明显,我在创建文件时遇到了一些沙箱问题,但是我所有的搜索结果都与此问题有关。

1 个答案:

答案 0 :(得分:0)

啊。我发现了这一点:Why does TextEdit open HTML files as locked。显然是由于我的.txt文件的内容,TextEdit将其解释为HTML文档,并根据此文档对其进行了不同的处理。用看起来不像HTML的东西替换了文件的内容,现在我可以编辑文档了。