Мое приложение создает определенные файлы изображений, которые я хочу скопировать в учетную запись пользователя 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>
try? fileManager.removeItem(at: ubiquityUrl)
- person pipacs   schedule 10.06.2021