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>