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提交了一个错误,看起来似乎没什么可做的,只是等待/希望大道能够修复它.
据我所知,这个错误已在 OS X 10.8 (Mountain Lion) 中修复。
看来我必须将 10.8 作为我的应用程序的最低操作系统版本。对我来说这并不是什么大问题......但希望苹果在 10.7 的错误修复中修复它(10.8 的系统要求比 10.7 高很多,我知道有人无法升级)。
| 归档时间: |
|
| 查看次数: |
3384 次 |
| 最近记录: |