Мне нужно загрузить файл iCloud при первом запуске приложения.Я хочу, чтобы приложение отображало последний открытый файл с момента его закрытия, и поэтому, если последний открытый файл является файлом iCloud, я сталкиваюсь с проблемами.
Прежде всего, позвольте мне заявить, чтоесли последний открытый файл находится в моем каталоге документов, а не в iCloud, то я могу открыть его без проблем.Я не могу просто сохранить полный путь URL-адреса, так как каталог песочницы моего приложения может измениться при повторном открытии приложения, поэтому я добавляю путь последнего открытого файла относительно каталога документов последнего открытого файла к моему пути documentDirectory во время выполнения с помощьюделая это:
var myfolder: URL? {
get {
do {
let docsurl = try fileManager.url(for:.documentDirectory,
in: .userDomainMask, appropriateFor: nil, create: false)
return docsurl
} catch {
return nil
}
}
}
, а затем это
if let lastOpenedFile = UserDefaults.standard.string(forKey: "lastOpenedFile") {
let lastOpenedFileURL = myfolder!.appendingPathComponent(lastOpenedFile)
print(lastOpenedFileURL.path)
if (FileManager.default.fileExists(atPath: lastOpenedFileURL.path)) {
documentBrowserViewController.presentDocument(at: lastOpenedFileURL)
}
}
(Если это плохой способ сделать это, дайте мне знать!)
Теперь вернемся кГлавная проблема.Для файла iCloud сохранение URL-адреса является проблемой, но вместо того, чтобы изменить каталог песочницы, это потому, что у меня нет доступа к URL-адресу из-за того, что упомянуто здесь: Как получить доступ к файламв iCloud Drive из моего приложения для iOS? , в котором написано
Средство выбора документов вызывает метод documentPicker: didPickDocumentAtURL: делегата, когда пользователь выбирает место назначения вне песочницы вашего приложения.Система сохраняет копию вашего документа в указанном месте назначения.Средство выбора документа предоставляет URL-адрес копии, чтобы указать успех;однако ваше приложение не имеет доступа к файлу, на который ссылается этот URL.
Поэтому мой вопрос: как мне загрузить этот последний открытый файл, если это файл iCloud?DocumentBrowser имеет к нему доступ, но потому ли это, что пользователь выбрал файл на экране, и я не могу смоделировать это в коде из соображений защиты?Заранее благодарю за любую помощь!