App sandbox: как разрешить службе XPC читать файл, открытый Пользователем в Родительском приложении?

у меня есть простое приложение для предварительного просмотра изображений Cocoa. Пользователь выбирает файл с помощью NSOpenPanel и приложение генерирует изображение предварительного просмотра с помощью Quick Look API.

Я хотел бы переместить генерацию предварительного просмотра в отдельную службу XPC. Без приложения sandboxing все работает нормально, но после включения приложения sandboxing для родительского приложения и службы XPC,службе XPC отказано в доступе к выбранному пользователем файлу.

родительское приложение разрешено читать файл (поскольку он был выбран через NSOpenPanel).

Как перенести разрешения "чтение файла" для выбранного пользователем файла из родительского приложения в процесс XPC, чтобы процесс XPC мог прочитать файл для создания предварительного просмотра?

моя служба XPC запрашивает доступ для чтения файлов через свои права, и я добавил следующий ключ к информации о службе XPC.плист, но это не помогло:

JoinExistingSession = YES

1 ответов


Я не уверен на 100%, но я думаю, что Apple рекомендует передав NSFileHandle к процессу XPC в этом случае. Таким образом, процесс XPC может получить доступ к содержимому файла, но не должен знать URL-адрес файла.

изменить: эта тема на форумах разработчиков Apple полезно. Рекомендуется создать обычную (не связанную с безопасностью) закладку для URL-адреса файла. Затем эта закладка может быть передана процессу XPC и доступна ему.