iCloud自动备份的.realm文件

.realm file automatically backed up by iCloud

我的应用因为上传到 iCloud 的内容过大而被拒绝。我应用程序的文档文件夹中唯一的文件是 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)
}

看起来 URL API 自上一个答案发布后发生了变化。这是您现在可以禁用备份的方法:

let realm = try! Realm()
guard var url = realm.configuration.fileURL else {
    return
}
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
try? url.setResourceValues(resourceValues)