如何将文件备份到iCloud但未显示在iCloud Drive中?
我通过使用fileManage
方法备份数据库领域文件。一切正常,但是我想实现的一个技巧是:
该文件应由iCloud备份,但在iCloud drive中不显示。
,
例如,GoodNotes 5,我们可以在设置中打开iCloud,验证它是iCloud存储中的真正备份,而GoodNots 5应用程序文件未显示在iCloud Drive中。
以下是我的代码,该代码实现了iCloud备份,但是应用程序文件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)
}
}
}
I'm backup my database realm file to iCloud by using FileManage
methods. Everything works fine, but there's a trick I want to achieve is:
The file should be backup by iCloud, but NOT shown in iCloud Drive.
For example, GoodNotes 5, we can open the iCloud in settings, verify it's truly backup in iCloud Storage, and the GoodNots 5 App File is not shown in iCloud Drive.
Below is my code that implement iCloud backup, but the App File ama
will be shown in 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)
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
经过多次测试,为避免备份文件到iCloud驱动器,但是在iCloud容器中,您只需删除“文档”路径,但是直接使用文件路径,如下:
更改为:
在这种情况下,将存储备份文件在iCloud容器中,但在用户的iCloud驱动器中未显示。
After many tests, to avoid backup file to iCloud Drive, but in iCloud container, you can just simply remove the 'Documents' path, but using file path directly, like below:
change to:
In this case, the backup file will be stored in iCloud container, but not shown in the user's iCloud Drive.