Xamarin iOS: почему необходимо вызвать StartAccessingSecurityScopedResource и выпустить его в примере DocPicker

Я использую Document Picker в Xamarin iOS. В образце DocPicker они вызывали что-то вроде StartAccessingSecurityScopedResource с комментарием вверху.

// ВАЖНЫЙ! Вы должны заблокировать область безопасности, прежде чем // сможете получить доступ к этому файлу.

Почему они должны заблокировать этот файл? Это предотвращает изменение файла откуда-то еще при доступе к файлу.

1 ответ

В iOS (и изолированных приложениях MacOS) для доступа к внешнему документу, который находится вне изолированной программной среды вашего приложения, требуется специальное разрешение, отслеживаемое ОС. Поэтому, если у вас есть NSUrl, который указывает на внешний файл, вы фактически не имеете доступа к нему, пока вы окончательно не попросите его, поскольку при этом возникают дополнительные проблемы безопасности / ресурсов,

Примечание: убедитесь, что вы звоните StopAccessingSecurityScopedResource в противном случае ваше приложение пропускает ресурсы ядра (try/finally это мудрый шаблон кодирования здесь)

В iOS приложения, которые открывают или перемещают документы с использованием UIDocumentPickerViewController, также получают URL-адреса безопасности.

Чтобы получить доступ к защищенному URL-адресу, необходимо вызвать метод startAccessingSecurityScopedResource() (или его базовый эквивалент, функцию CFURLStartAccessingSecurityScopedResource(_:)). Для приложений iOS, если вы используете UIDocument для доступа к URL, он автоматически управляет безопасным URL для вас.

Ссылка: URL-адреса безопасности

Другие вопросы по тегам