如何阻止我的应用程序设置"隔离"位?

Abh*_*ert 7 macos cocoa objective-c osx-lion

从OS X 10.7.3开始,我的文本编辑器就在它接触的任何文件上设置"隔离"位.

我的文本编辑器设计用于处理shell脚本,如果设置了隔离位,则无法从命令行执行shell脚本,直到在Finder中双击它并执行"此应用程序已从Internet下载"警报(或删除隔离位xattr).

例如,我刚在我的应用程序中创建了一个"hello world"脚本,它已被隔离,无法执行:

$ xattr -l foo
com.apple.quarantine: 0006;4f51dd2f;Dux;
$ chmod +x foo
$ ./foo
-bash: ./foo: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

如果我删除隔离位,脚本将起作用:

$ xattr -d com.apple.quarantine foo
$ ./foo
hello world
Run Code Online (Sandbox Code Playgroud)


根据一些论坛帖子,TextEdit还在它创建的任何shell脚本上设置隔离位.

我正在使用一个简单的NSDocument子类来创建文件:

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
  return [self.textStorage.string dataUsingEncoding:self.stringEncoding];
}
Run Code Online (Sandbox Code Playgroud)


如何从我的应用中创建的文件中删除隔离位?其他文本编辑器(如TextWrangler)不设置隔离位.

UPDATE

更多信息,这只在创建"脚本应用程序"文件时发生,该文件是从perl脚本到html的任何内容.

它只发生在我的应用程序是沙盒时.禁用沙盒可以解决问题,但这不是一个长期解决方案.

我已经向Radar提交了一个错误,看起来似乎没什么可做的,只是等待/希望大道能够修复它.

Abh*_*ert 0

据我所知,这个错误已在 OS X 10.8 (Mountain Lion) 中修复。

看来我必须将 10.8 作为我的应用程序的最低操作系统版本。对我来说这并不是什么大问题......但希望苹果在 10.7 的错误修复中修复它(10.8 的系统要求比 10.7 高很多,我知道有人无法升级)。

  • 我在 10.8 中也没有修复。奇怪的是,将“com.apple.security.files.user-selected.executable”添加到权利中可以解决我的问题 (3认同)