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

让macOS沙盒应用程序写入由我的非沙盒应用程序创建的文件,macos,cocoa,sandbox,Macos,Cocoa,Sandbox,我有一个macOS/Objective-C/Cocoa应用程序。我们希望生成外部应用程序,如TextEdit,以编辑此应用程序创建的文件。我通过将这些文件复制到我的~/Documents目录中来创建这些文件(最终我想将其放在其他地方,但我试图简化): 当我在TextEdit中打开此文件时,窗口标题显示“filename.txt-Locked”。编辑文档时会出现“是否确实要就地修改文档?”对话框。我选择了“覆盖”,但尝试保存时给了我“无法保存文档”filename.txt。您没有权限。” 但是,这

我有一个macOS/Objective-C/Cocoa应用程序。我们希望生成外部应用程序,如TextEdit,以编辑此应用程序创建的文件。我通过将这些文件复制到我的~/Documents目录中来创建这些文件(最终我想将其放在其他地方,但我试图简化):

当我在TextEdit中打开此文件时,窗口标题显示“filename.txt-Locked”。编辑文档时会出现“是否确实要就地修改文档?”对话框。我选择了“覆盖”,但尝试保存时给了我“无法保存文档”filename.txt。您没有权限。”

但是,这会将一个“filename.txt.sb-a69dc5-7V6D2g”(或类似名称)文件写入我的文档目录。从bashshell创建的文件在同一个目录中的“echobala>filename.txt”可以正常打开

我尝试了许多关于这些属性的变化。我看不到工作文件与使用“ls-la@filename.txt”或“xattr”显示“…-Locked”的文件之间有任何区别,即使是并排在同一目录中

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

Argh。我找到了这个:。显然,由于我的.txt文件的内容,TextEdit将其解释为HTML文档,并基于此对其进行不同的处理。用看起来不像HTML的东西替换了文件的内容,现在我可以编辑文档了

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];