Swift iCloud: не удается сделать setUbiquitous работать

Мое приложение создает определенные файлы изображений, которые я хочу скопировать в учетную запись iCloud Drive пользователя.

Насколько я понимаю, простой вызов setUbiquitous() должен запустить iCloud для синхронизации файлов между устройствами, чтобы пользователь мог открыть файлы на своем искателе Mac.

Мой код выглядит следующим образом:

  class func write(image data: Data, to path: String) -> URL? {
        var path = "\(path).\(ext)"

        let fullPath = getDocumentsDirectory().appendingPathComponent(path)

        do {
            try data.write(to: fullPath, options: [.atomic])

            // Make it ubiquitous

                if var ubiquityUrl = FileManager.default.url(forUbiquityContainerIdentifier: nil) {
                    ubiquityUrl = ubiquityUrl.appendingPathComponent("Documents/\(path)")
                    setUbiquitous(localUrl: fullPath, ubiquityUrl: ubiquityUrl)
                    print("Setting ubiquitous at \(ubiquityUrl)")

                }
                else {
                    print("Unable to access iCloud Account")
                    print("Open the Settings app and enter your Apple ID into iCloud settings")
                }

            return fullPath
        }
        catch let error {
            print("write(image:to:): failed with error \(error) – bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding")
            return nil
        }
    }

    class func setUbiquitous(localUrl: URL, ubiquityUrl: URL) {

        do {
            try FileManager.default.setUbiquitous(true, itemAt: localUrl, destinationURL: ubiquityUrl)
        } catch let error {
            print("*** error: setUbiquitous failed \(error.localizedDescription)")
        }
    }

К сожалению, до сих пор мне не удалось сделать это. У меня есть эта ошибка:

Setting ubiquitous at file:///private/var/mobile/Library/Mobile%20Documents/iCloud~com~***~Tree/Documents/3481-4.jpg
*** error: setUbiquitous failed The file “3481-4.jpg” couldn’t be saved in the folder “***Tree” because a file with the same name already exists.

Как мне обновить существующие файлы?

Кроме того, я не вижу файлов в приложении "Настройки управления iCloud", так как моего приложения нет в списке (хотя оно и раньше было в списке, как при использовании iCloud).

Примечание:

В соответствии с этим я добавил следующее в файл plist под ключом NSUbiquitousContainers, но я не уверен, какую роль он играет или действительно ли это связано с моим использованием iCloud.

<dict>
    <key>com.***.Tree</key>
    <dict>
        <key>NSUbiquitousContainerIsDocumentScopePublic</key>
        <true/>
        <key>NSUbiquitousContainerSupportedFolderLevels</key>
        <string>Any</string>
        <key>NSUbiquitousContainerName</key>
        <string>AppleTree</string>
    </dict>
</dict>

0 ответов

Другие вопросы по тегам