【问题标题】:Letting macOS sandboxed apps write file created by my non-sandboxed app让 macOS 沙盒应用程序写入由我的非沙盒应用程序创建的文件
【发布时间】: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”的文件之间有任何区别,甚至在同一目录中并排显示。

显然,我创建的文件存在沙盒问题,但我所有的搜索结果都与此问题的另一面有关。

【问题讨论】:

    标签: macos cocoa sandbox


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      相关资源
      最近更新 更多