【发布时间】:2022-07-15 19:05:34
【问题描述】:
我正在使用FileManage 方法将我的数据库领域文件备份到 iCloud。一切正常,但我想要实现的一个技巧是:
The file should be backup by iCloud, but NOT shown in iCloud Drive.
比如GoodNotes 5,我们可以在设置中打开iCloud,确认它是真的备份在iCloud Storage中,GoodNots 5 App File没有显示在iCloud Drive中。
以下是我实现 iCloud 备份的代码,但 App File ama 将显示在 iCloud Drive 中:
private func retrieveLocalRealmURL() -> URL {
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let documentaryDirectory = urls[0]
let realmURL = documentaryDirectory.appendingPathComponent("ama.realm");
return realmURL
}
private func backupRealmToiCloudDrive() {
let backgroundQueue = DispatchQueue.global(qos: .background)
backgroundQueue.async {
guard
let ubiquityURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)
else {
return
}
let iCloudDriveURL = ubiquityURL.appendingPathComponent("Documents")
let iCloudRealmURL = iCloudDriveURL.appendingPathComponent("ama.realm")
let fileExists = FileManager.default.fileExists(atPath: iCloudDriveURL.path, isDirectory: nil)
func copy() {
let localRealmURL = self.retrieveLocalRealmURL()
do {
try FileManager.default.copyItem(at: localRealmURL, to: iCloudRealmURL)
} catch {
printLog(error.localizedDescription)
}
}
if fileExists {
self.deleteExistedFile(iCloudRealmURL)
copy()
} else {
do {
try FileManager.default.createDirectory(at: iCloudDriveURL, withIntermediateDirectories: true, attributes: nil)
copy()
} catch {
printLog(error.localizedDescription)
}
}
}
}
private func deleteExistedFile(_ url: URL) {
let fileCoordinator = NSFileCoordinator(filePresenter: nil)
fileCoordinator.coordinate(writingItemAt: url, options: .forDeleting, error: nil) { deleteURL in
do {
let fileExists = FileManager.default.fileExists(atPath: deleteURL.path, isDirectory: nil)
if fileExists {
try FileManager.default.removeItem(at: deleteURL)
}
} catch {
printLog(error.localizedDescription)
}
}
}
【问题讨论】:
-
你发现了吗?
-
嗨@Andres,是的,它已经解决了,请看我自己的答案。
标签: swift icloud icloud-drive