Начиная с OS X 10.7.3, мой текстовый редактор устанавливает бит "карантин" для любого файла, к которому он обращается.
Мой текстовый редактор предназначен для работы со сценариями оболочки, и если установлен бит карантина, сценарий оболочки не может быть выполнен из командной строки, пока вы дважды не щелкнете его в Finder и не пройдете через «Это приложение было загружено из предупреждение "Интернет" (или удалите бит карантина с помощью 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 также устанавливает бит карантина для любого сценария оболочки, который он создает.
Я использую простой NSDocument
подкласс для создания файла:
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
return [self.textStorage.string dataUsingEncoding:self.stringEncoding];
}
Как я могу удалить бит карантина из файлов, созданных в моем приложении? Другие текстовые редакторы, такие как TextWrangler , не устанавливают бит карантина.
UPDATE
Немного больше информации, это происходит только при создании файла "приложения-скрипта", который представляет собой что угодно, от сценариев Perl до HTML.
И это происходит только тогда, когда мое приложение находится в песочнице. Отключение песочницы решает проблему, но это не является долгосрочным решением.
Я сообщил об ошибке в Radar, похоже, что ничего не поделаешь, кроме как ждать / надеяться, что Avenue исправит это.