Когда я нажимаю файл, поддерживаемый моим приложением, в файловом менеджере iOS, мои приложения делегируют метод
private func open(url: URL, options: [UIApplication.OpenURLOptionsKey : Any]?)->Bool
вызывается, где я читаю файл
do {
try fileData = Data(contentsOf: url)
}
catch {
print(error.localizedDescription)
}
что дает ошибку 257 (не авторизовано). При доступе к тому же файлу с помощью средства выбора документов:
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt URL: URL) {
if controller.documentPickerMode == UIDocumentPickerMode.import {
var fileData : Data
do {
try fileData = Data(contentsOf: URL)
}
catch {
print(error.localizedDescription)
}
}
все работает нормально. Я получаю объект данных, который могу использовать. Я заметил одну вещь: метод AppDelegate получает URL-адрес в виде
/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/Downloads/filename
в то время как обратный вызов documentPicker получает
/private/var/mobile/Containers/Data/Application/7A30D4D7-BD7D-4051-B3DE-143E18F48B23/tmp/myAppIndentifier-Inbox/filename
Добавление - как предлагается здесь -
let result = url.startAccessingSecurityScopedResource()
не имело значения. Мои Поддерживает открытие документов на месте, для ключа plist установлено значение ИСТИНА. Есть идеи?