Размонтировать USB-устройство в изолированном приложении Mavericks

Я написал приложение для песочницы, которое работает с USB-накопителями в Yosemite (10.10). Когда приложение закончит работу, я хочу предложить пользователю возможность извлечь устройство.

Под Yosemite это не проблема, я успешно использовал

DADiskUnmount() 

и

[NSWorkspace unmountAndEjectDeviceAtURL:error:]

Но в Mavericks (10.9) оба метода не будут работать. Я дважды проверил весь свой код и почти уверен, что конфликтов SDK нет.

Я получаю следующее сообщение об ошибке

Sandbox denied authorizing right 'system.volume.external.unmount' by client <MyApp>

Я получил все права, связанные с USB, использовал закладки в области безопасности (с startAccessingSecurityScopedResource и без), восстановил права доступа к диску на тестовом устройстве, использовал различные типы USB-устройств для тестирования, проверил, есть ли на устройстве открытые файлы, и попробовал kDADiskUnmountOptionForce.

system.volume.external.(adopt|encode|mount|rename|unmount) 

право авторизации появляется только на 10.8 и 10.9. источник: ссылка

Есть ли способ предоставить моему приложению это право?

Было бы неплохо, если бы кто-нибудь помог мне с этим!


person phisto05    schedule 25.06.2015    source источник


Ответы (1)


Aperture использует песочницу "большую красную кнопку". (com.apple.security.temporary-exception.sbpl) сделать system.volume.external.mount/unmount.

Из файла прав Aperture:

<key>com.apple.security.temporary-exception.sbpl</key> <string> (begin (allow authorization-right-obtain (right-name "system.volume.external.mount")) (allow authorization-right-obtain (right-name "system.volume.external.unmount")) (deny network-outbound (with no-log) (regex #"^/private/tmp/launch-")) (allow file-ioctl (literal "/dev/ptmx") (literal "/dev/null") (literal "/dev/tty") (regex #"^/dev/ttys")) (allow file-search) (allow ipc-posix-sem) (allow system-fsctl)) </string>

Не знаю, разрешит ли Apple это в MAS.

person Brendan Shanks    schedule 29.06.2015
comment
Привет! теперь я хочу отправить это в MAS... не могли бы вы объяснить каждую строку или дать мне ссылку на ресурс, где я могу прочитать эту информацию? я хочу правильно объяснить, почему я написал это в своем файле прав, чтобы его могли принять. - person phisto05; 20.08.2015
comment
Хм, я думаю, просто скажу правду, что он находится в файле прав Aperture, и извлечение не работает в Mavericks без него. Вы пытались удалить некоторые из других строк? Например, просто оставить строку «разрешить авторизацию-право-получить» для размонтирования и посмотреть, работает ли она? Они, вероятно, с большей вероятностью одобрят это с меньшим количеством разрешенных. - person Brendan Shanks; 21.08.2015
comment
это работает, когда я просто оставляю разрешить авторизацию-право-получить (право-имя system.volume.external.unmount) ... прямо сейчас я жду обзора :) - person phisto05; 24.08.2015