自从OSX10.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如果我移除隔离位,脚本就会工作:
$ xattr -d com.apple.quarantine foo
$ ./foo
hello world根据一些论坛帖子,TextEdit还在它创建的任何shell脚本上设置隔离位。
我使用一个简单的NSDocument子类来创建文件:
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
return [self.textStorage.string dataUsingEncoding:self.stringEncoding];
}如何从我的应用程序中创建的文件中删除隔离位呢?其他文本编辑器,如TextWrangler,不设置隔离位。
更新
更多的信息是,只有在创建“脚本应用程序”文件(从perl脚本到html )时才会出现这种情况。
只有当我的应用程序被沙箱封存时才会发生这种情况。禁用沙箱解决了问题,但这不是一个长期的解决方案。
我已经向雷达报告了一个错误,看起来可能没有什么可做的,只是等待/希望这条路能修好。
发布于 2012-03-03 10:46:49
尝试确保您的Info.plist中的Info.plist设置为false (这应该是默认的)。如果该属性仍在设置中,则建议提交错误报告并使用removexattr(2)/fremovexattr(2)编程删除它
发布于 2012-04-15 11:27:47
很高兴知道我不是唯一一个有这个问题的人--这个问题一直很难追踪到信息。我发现这个问题发生在我的程序保存的数据文件中(这些不是脚本,它们只是XML数据.)。
我确认LSFileQuarantineEnabled并没有造成任何影响。
我还试图在写完文件后,使用removexattr http://hints.macworld.com/article.php?story=20071029151619619删除该属性,但这也不起作用--沙箱阻止了调用的工作。
作为背景,我还发现了对这个问题的讨论:http://reviews.cnet.com/8301-13727_7-57374676-263/workarounds-for-quarantine-bug-in-os-x-lion/
为了记录在案,我分别向苹果公司提出了一个错误。
编辑:我已经找到了问题的根源,并找出了解决办法.
问题是,如果文件数据是纯XML格式数据,MacOS错误地显示了报告的消息(我认为这是因为它错误地假定文件是脚本)。如果我将文件格式更改为一种显然不是XML的替代方式,则警告将消失。但是,文件仍然保存在设置隔离位的情况下!
因此,这肯定是由于MacOS的一个问题,但有一个相对容易的工作-周围-只要改变您的文件格式!
https://stackoverflow.com/questions/9544874
复制相似问题