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-адреса безопасности