Мой дизайн приложения какао представляет собой одно приложение (пользовательский интерфейс) и три службы XPC.
Главному приложению требуется файл только для чтения, чтобы показать powerbox и отобразить выбранный путь в пользовательском интерфейсе
- com.apple.security.app-песочница
- com.apple.security.files.bookmarks.app-scope
- com.apple.security.files.user-selected.только для чтения
Двум службам XPC нужен файл только для чтения.
- com.apple.security.app-песочница
- com.apple.security.files.bookmarks.app-scope
- com.apple.security.files.user-selected.только для чтения
Для одной службы XPC требуется файл чтение-запись
- com.apple.security.app-песочница
- com.apple.security.files.bookmarks.app-scope
- com.apple.security.files.user-selected.read-write
Из-за потока взаимодействия с пользователем основное приложение открывает диалоговое окно Powerbox, позволяющее пользователю выбрать каталог и отобразить его в пользовательском интерфейсе. Затем основное приложение сохраняет это как закладку с областью безопасности. Данные о закладках передаются по соединениям XPC по мере необходимости, и каждый отдельный процесс XPC разрешает закладки, чтобы получить доступ к этим файлам в своей собственной изолированной программной среде.
Проблема в том, что если я не настрою главное приложение (которое открывает блок питания) на доступ к файлу чтение-запись, служба XPC, которой требуется доступ на запись, не получит его, даже если в его файле прав указан файл доступ для чтения и записи. В консоли логируется следующее:
deny file-write-unlink <file path>
Единственный способ обойти это — дать основному приложению, которое открывает файл powerbox, права на чтение-запись или перепроектировать поток пользовательского интерфейса, чтобы процесс, которому требуется доступ для записи, отображал powerbox? Конечная цель состоит в том, чтобы каждый процесс имел как можно меньше разрешений. Идеальным вариантом было бы отсутствие доступа к файлам в основном процессе .app, наличие двух служб XPC с файлами только для чтения и одного служебного файла XPC для чтения и записи. Спасибо!
Изменить:
Доступ к Powerbox и файловой системе за пределами вашего контейнера :
Технология безопасности OS X, которая взаимодействует с пользователем для расширения вашей песочницы, называется Powerbox. Powerbox не имеет API. Ваше приложение прозрачно использует Powerbox, когда вы используете классы NSOpenPanel и NSSavePanel.