Добавление файлового менеджера iCloud Drive в приложение - iOS 13 - PullRequest
1 голос
/ 18 января 2020

Я хочу поддерживать добавление файлов в iCloud в моем приложении iOS. Я хочу, чтобы эти файлы были добавлены в папку на iCloud Drive (например, папки Numbers или Pages). Я перепробовал все, что нашел в Интернете на эту тему, но мне не удалось добавить папку в iCloud Drive.

Сначала я добавил NSUbiquitousContainers в список info.plist

<key>NSUbiquitousContainers</key>
<dict>
    <key>iCloud.com.<xyz>.AppName</key>
    <dict>
        <key>NSUbiquitousContainerIsDocumentScopePublic</key>
        <true/>
        <key>NSUbiquitousContainerName</key>
        <string>App Name</string>
        <key>NSUbiquitousContainerSupportedFolderLevels</key>
        <string>Any</string>
    </dict>
</dict>

После Для этого я добавил в приложение функцию iCloud: iCloud capability

Затем я добавил следующий код в свой ViewController:

if let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") {
    if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) {
        do {
            try FileManager.default.createDirectory(at: iCloudDocumentsURL, withIntermediateDirectories: true, attributes: nil)
        } catch {
            print(error.localizedDescription)
        }
    }
}

Примечание : после установки точек останова я обнаружил, что код после if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: nil)) { никогда не вызывается. Я временно удалил эту строку, но ничего не сделал .

Наконец, я добавил файл, используя следующий код:

//Save text file to local directory
let file = "file.txt" //Text file to save to iCloud
let text = "sample text" //Text to write into the file
func saveToDirectory(){
    guard let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
    let fileURL = directory.appendingPathComponent(file)

    print(directory)
    //Writing
    do {
        try text.write(to: fileURL, atomically: false, encoding: .utf8)
    } catch {
        /* error handling here */
        print("Error in writing")
    }

    //Reading
    do {
        let getText = try String(contentsOf: fileURL, encoding: .utf8)
        print(getText)
    } catch {
        /* error handling here */
        print("Error in reading")
    }
}

Я не вижу папку приложения, или вышеупомянутый файл появляется на моем Диске iCloud. Но когда я загружаю контейнер приложений и просматриваю его содержимое, я вижу файл, указанный в /AppData/Documents.

Кто-то еще получил это? И / или кто-то знает, как решить эту проблему?

Спасибо!

Я также изменил номера сборки / версии своего приложения, но безрезультатно

1 Ответ

0 голосов
/ 11 февраля 2020

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

Сначала создайте папку Documents в своем контейнере iCloud - если вы храните файл в другой папке, ваше приложение другое устройство увидит папку, но не появится в приложении «Файлы».

Затем скопируйте файл file.txt в папку Documents вашего контейнера iCloud.

...