Представьте файл iCloud без выбора пользователем из DocumentBrowser - PullRequest
0 голосов
/ 19 октября 2018

Мне нужно загрузить файл 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 имеет к нему доступ, но потому ли это, что пользователь выбрал файл на экране, и я не могу смоделировать это в коде из соображений защиты?Заранее благодарю за любую помощь!

1 Ответ

0 голосов
/ 20 октября 2018

Средство выбора документов используется для копирования файлов в изолированную программную среду приложения и из нее.

Если файлы хранятся на общем диске iCloud, а не в личном контейнере приложения iCloud, вы можете получить к ним доступ.через URL-адрес Ubiquity - https://developer.apple.com/documentation/foundation/filemanager/1411653-url

Вы можете добавить свой относительный путь к URL-адресу Ubiquity таким же образом, как url(for:.documentDirectory

...