Приложение для Mac OS: как разрешить псевдоним и прочитать исходный файл в песочнице

Мое приложение для Mac OS получает псевдоним NSURL при взаимодействии с пользователем (перетаскивание), поэтому у приложения есть разрешение на чтение файла псевдонима, но у него нет разрешения на чтение исходного файла в изолированной программной среде приложения (Mac OS X 10.7). /8).

Я разрешаю псевдоним

NSData* bookmark = [NSURL bookmarkDataWithContentsOfURL:aliasURL error:nil];
origURL = [NSURL URLByResolvingBookmarkData:bookmark
                                    options:NSURLBookmarkResolutionWithoutUI
                              relativeToURL:nil
                        bookmarkDataIsStale:nil
                                      error:&error];

Когда я пытаюсь прочитать файл origURL, я получаю сообщение об ошибке: The file couldn’t be opened because you don’t have permission to view it.

Я также пытался вызвать start/stopAccessingSecurityScopedResource по origURL, но не помогло.

Я также пытался разрешить данные закладок с помощью параметра NSURLBookmarkResolutionWithSecurityScope, но получаю ошибку "The file couldn’t be opened because it isn’t in the correct format." из метода URLByResolvingBookmarkData.

Итак, как это сделать? Спасибо.


person kliu    schedule 12.10.2012    source источник
comment
Был ли исходный NSURL изначально создан с областью безопасности? Если у вас есть код, который генерирует исходный URL-адрес псевдонима, было бы полезно его увидеть. Из каких приложений берутся URL-адреса?   -  person Dov    schedule 16.10.2012
comment
Файл псевдонима создается Finder. Я получаю URL-адрес файла псевдонима из NSPasteboard (NSDraggingInfo), aliasURL = [NSURL URLFromPasteboard:pb]   -  person kliu    schedule 17.10.2012
comment
Начиная с OS X 10.10 появился новый файл + URLByResolvingAliasFileAtURL:options:error:. Однако в нем указано, что параметр NSURLBookmarkResolutionWithSecurityScope не поддерживается. Итак, по-прежнему нет доступа через псевдоним.   -  person user362515    schedule 23.10.2015


Ответы (2)


Я не пробовал это, но я думаю, что могу понять, что происходит. Способ, которым OS X пробивает песочницу с помощью перетаскивания, заключается в предоставлении приложению доступа к удаленным файлам до тех пор, пока приложение не завершит работу. Это работает с использованием простых путей к файлам NSString на монтажном столе, поэтому он не зависит от механизма определения области безопасности.

Ваше приложение, вероятно, имеет доступ к файлу псевдонима, но только к этому файлу, а не к тому, на который оно ссылается. Механизм пробивки отверстий в песочнице, вероятно, не следует псевдониму и не предоставляет доступ к базовому файлу. Если вы можете получить путь к файлу, на который указывает псевдоним (а я не уверен, что это возможно), вы можете обойти песочницу, предложив пользователю выбрать этот файл в NSOpenPanel. Это еще один способ пробиться через песочницу, используя то, что Apple называет «Power Box».

Для получения дополнительной информации о том, как это сделать, ознакомьтесь с ответом, который я написал здесь: https://stackoverflow.com/a/11786156/105717 . Он ссылается на другой ответ, а затем добавляет некоторые полезные тонкости, чтобы сделать происходящее более понятным для пользователя.

person Dov    schedule 17.10.2012
comment
Стоит отметить, что выбор псевдонима в NSOpenPanel также работает, потому что возвращается путь назначения, на который указывает псевдоним. - person user362515; 23.10.2015

Может, просто может поможет моя похожая ситуация и решение:

У вас определенно есть право «com.apple.security.files.bookmarks.app-scope», установленное на «да» в вашем файле прав?

"Не удалось открыть файл, так как он имеет неверный формат". Я получал ту же ошибку при попытке разрешить закладку, которая оказалась тем фактом, что файл был заблокирован в Finder (сделайте «получить информацию» о файле и установите флажок «заблокирован»), поэтому безопасность данные никогда не были созданы в первую очередь.

Надеюсь, там есть чем помочь!

Тодд.

person Todd    schedule 14.10.2012
comment
Спасибо, но я установил для com.apple.security.files.bookmarks.app-scope значение YES, и заблокированный ящик файла всегда отключен. - person kliu; 15.10.2012