Доступ к NSApplicationScriptsDirectory с помощью NSFileManager в изолированном приложении

У меня возникли некоторые проблемы с доступом к папке по умолчанию для сценариев приложений с использованием этого кода (что я считаю правильным способом сделать это):

NSError* error;
NSURL* scriptsFolderURL = [[NSFileManager defaultManager] URLForDirectory: NSApplicationScriptsDirectory inDomain: NSUserDomainMask appropriateForURL: nil create: YES error: &error];

NSLog(@"%@", scriptsFolderURL);
NSLog(@"%@", [error description]);

Проблема в том, что оба вызова NSLog печатают (null), что означает, что я ничего не получаю. Что я делаю не так?


person Alex    schedule 23.03.2013    source источник
comment
Что вы получите за ошибку, если просто NSLog( @"%@", error)?   -  person gaige    schedule 23.03.2013
comment
Вы уверены, что бегаете в песочнице?   -  person gaige    schedule 23.03.2013
comment
Да, я проверил через Activity Monitor.   -  person Alex    schedule 23.03.2013
comment
Проверьте свой Info.plist. Я провел несколько тестов здесь, и внутри и вне песочницы я все еще получаю хороший URL-адрес, но это зависит от идентификатора пакета приложения в Info.plist. Если я скомпилирую и запущу модульный тест с одним и тем же кодом, это приведет к тому же режиму сбоя, что и вы (nil,nil).   -  person gaige    schedule 23.03.2013
comment
Я только что вспомнил, что, поскольку это казалось новым API, это может быть только 10.8. И это. А у меня стоит 10.7. Это... может иметь какое-то отношение к проблеме, верно?   -  person Alex    schedule 23.03.2013


Ответы (2)


Пока у вас есть действительный Info.plist, содержащий действительный идентификатор пакета приложений, и вы работаете под OS X 10.8, это должно работать нормально.

Однако я могу подтвердить, что API нередко возвращает nil с нулевой ошибкой, что немного выходит за рамки контракта API.

person gaige    schedule 23.03.2013
comment
Что ж, мне все равно придется получить 10.8, так что сейчас самое время... Спасибо за помощь. - person Alex; 23.03.2013
comment
Странный. Я тестирую 10.8.2, и у меня проблема - везде ничего не получается. Однако мое приложение не изолировано — это не обязательное требование для его работы, не так ли? - person Thomas Tempelmann; 27.06.2013
comment
Хорошо, оказывается, это работает только в изолированных приложениях. Это означает, что для моего гибридного приложения мне придется использовать другой способ запуска моих сценариев, когда они не изолированы. Вздох. - person Thomas Tempelmann; 27.06.2013

Комментарий для NSApplicationScriptsDirectory выглядит следующим образом:

// расположение папки пользовательских скриптов для вызывающего приложения (~/Library/Application Scripts/code-signing-id)

Идентификатор подписи кода дает подсказку, что вы ДОЛЖНЫ включить подпись кода. Как только вы включите подпись кода, вы получите правильный URL-адрес.

person Karsten    schedule 25.08.2017