【问题标题】:.realm file automatically backed up by iCloud.realm 文件由 iCloud 自动备份
【发布时间】:2015-07-22 18:11:55
【问题描述】:

我的应用因上传到 iCloud 的内容过大而被拒绝。我的应用程序的 Documents 文件夹中唯一的文件是 default.realm 数据库文件。我认为这是 iCloud 正在上传的文件。如何防止 iCloud 将数据库上传到 iCloud?

谢谢。

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    根据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)
    }
    

    【讨论】:

    • 非常感谢!最后我按照link 将 defaultPath 设置为 /Library/Caches 做了你说的
    • kishikawa-san 这将告诉 icloud 不要备份 data.realmdefault.realm.lockdefault.realm.management/default.realm.note 等其他文件怎么样?我们是否也需要在那里设置资源值?
    • @nacho4d 通常将属性设置为包含领域和辅助文件的目录。但在 v2.10.1 中,该属性默认设置为 true。你不需要自己做。 github.com/realm/realm-cocoa/pull/5270
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2016-05-27
      • 2012-10-12
      相关资源
      最近更新 更多