【发布时间】:2015-07-22 18:11:55
【问题描述】:
我的应用因上传到 iCloud 的内容过大而被拒绝。我的应用程序的 Documents 文件夹中唯一的文件是 default.realm 数据库文件。我认为这是 iCloud 正在上传的文件。如何防止 iCloud 将数据库上传到 iCloud?
谢谢。
【问题讨论】:
我的应用因上传到 iCloud 的内容过大而被拒绝。我的应用程序的 Documents 文件夹中唯一的文件是 default.realm 数据库文件。我认为这是 iCloud 正在上传的文件。如何防止 iCloud 将数据库上传到 iCloud?
谢谢。
【问题讨论】:
根据App Backup Best Practices section of the iOS App Programming Guide、<Application_Data>/Library/Caches 或<Application_Data>/tmp 将不会备份到 iCloud。一般情况下,您可以使用<Application_Data>/Library/Caches目录来保存您不会备份到iCloud的数据。
要改变Realm的文件路径,可以在创建Realm实例时传入path参数,如下:
let realmPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0] as! String
let realm = Realm(path: realmPath.stringByAppendingPathComponent("data.realm"))
否则,您可以使用NSURLIsExcludedFromBackupKey 文件系统属性从备份中排除文件和目录(请参阅Technical Q&A QA1719)。如果你想使用默认路径,只有从备份中排除 Realm 文件的唯一方法。
let realm = Realm()
if let realmPathURL = NSURL(fileURLWithPath: realm.path) {
realmPathURL.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey, error: nil)
}
【讨论】:
data.realm。 default.realm.lock、default.realm.management/、default.realm.note 等其他文件怎么样?我们是否也需要在那里设置资源值?
true。你不需要自己做。 github.com/realm/realm-cocoa/pull/5270
自上一个答案发布以来,URL API 似乎发生了变化。这是您现在可以禁用备份的方法:
let realm = try! Realm()
guard var url = realm.configuration.fileURL else {
return
}
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
try? url.setResourceValues(resourceValues)
【讨论】: