如何找到我的 Realm 文件?

269

我使用 Realm 创建了一个数据库,但是由于我的操作系统(Yosemite)中在 /private/var/mobile 目录下找不到 mobile 文件夹,导致我无法找到该文件。

我应该如何访问我的 Realm 以在浏览器中运行?

此帖已在 Google 论坛中发布


看看这个。这种方法适用于已经root和未root的设备。 - krhitesh
26个回答

507

寻找Realm文件

Android设备

如何在Realm浏览器中查看我的Realm文件?

iOS设备

如果您的应用程序在设备上

确保您的设备已连接,然后转到Xcode菜单窗口 > 设备 (⌘⇧2)。 在那里,您将能够从已安装有调试权限的应用程序列表中选择您的设备和应用程序。

选择应用程序后,转到表视图底部的工具栏中的齿轮,并选择“下载容器…”。 在那里,您将能够从文档位置拉取文件到Mac。 它将保存为xcappdata捆绑包。

当您在Finder中打开保存它的本地路径时,如果选择文件,则可以通过在查找器的上下文菜单中选择“显示包内容”来进入其中。 选择该文件时,将打开一个新的Finder窗口,在其中可在以下路径中找到您的Realm(例如): AppData/Documents/default.realm(目录'/private/var/mobile'是iOS在设备文件系统上使用的路径)。

如果您的应用程序在模拟器上

转到您的用户目录:

/Users/<username>/Library/Developer/CoreSimulator/Devices/<simulator-uuid>/data/Containers/Data/Application/<application-uuid>/Documents/default.realm

可能获得默认realm当前路径的最简单方法是暂停模拟器,然后在LLDB控制台中输入以下内容:

Objective-C:
(lldb) po [RLMRealmConfiguration defaultConfiguration].fileURL

使用Realm Objective-C的Swift:
(lldb) po RLMRealmConfiguration.defaultConfiguration().fileURL

使用Realm Swift的Swift:
(lldb) po Realm.Configuration.defaultConfiguration.fileURL

(lldb) po Realm.Configuration.defaultConfiguration.fileURL可以查看Realm数据库文件的路径。如果你手头有一个RLMRealm实例,可以使用(lldb) po myRealm.configuration.fileURL来查看路径。然后复制此路径,打开终端并键入open[粘贴路径]即可打开文件。
注意:某些路径中有空格,请确保在空格前使用“\”进行转义。
辅助工具SimPholders:
这可能是在模拟器中查找应用程序文件最快的方法。安装SimPholders。这将允许您直接从菜单栏访问应用程序的文档目录。
注意:有些人提到SimPholders会将他们带到错误的模拟器应用程序文件夹,如果您遇到此问题,请按照上述步骤打印出您的realm路径,即打印出您的realm.path。

1
最新更新后,当您执行 po RLMRealm.defaultRealmPath() 时会出现错误。它会显示 called object type 'NSString *' is not a function or function pointer - carbonr
我和@carbonr有同样的问题。有人能帮忙吗? - denislexic
2
Objective-C版本高于0.97使用po [[RLMRealm defaultRealm]path] - AlexHsieh
5
这个答案的一部分现在已经过时了。以下是使用RealmSwift查找您的领域数据库文件(default.realm)的最新方法:Realm.Configuration.defaultConfiguration.fileURL - nodebase
2
使用 RealmSwift 方法后,我得到了以下错误信息:error: use of undeclared identifier 'Realm' - Simon Bengtsson
显示剩余7条评论

140

我发现了最简单的iOS/macOS方法(针对Swift 3和Xcode 8.3)

override func viewDidLoad() {

   // for swift 2.0 Xcode 7
   print(Realm.Configuration.defaultConfiguration.fileURL!)
}

然后x代码将记录正确的路径,请检查下面的屏幕。

enter image description here

现在打开您的Finder并按 + + G(command+shift+G),然后粘贴Xcode上记录的路径


12
路径已过时,请使用 Realm.Configuration.defaultConfiguration.fileURL 代替。 - hewigovens
2
已更改为 Realm.configuration.fileURL。 - Reshad
3
Swift 3和Xcode 8.3也可与Realm.Configuration.defaultConfiguration.fileURL!一起使用。请注意,本翻译不包含解释或其他内容。 - xmhafiz
我按照相同的过程操作,但是在Finder中找不到文件路径。 - RejoylinLokeshwaran
1
此解决方案仅适用于模拟器,而不适用于真实设备。 - AndaluZ
1
这对于模拟器非常完美,一旦找到您的文件,只需轻松地使用 cmd-click 即可“打开” Realm Studio。这引发了一个问题或想法:Realm Studio 需要一个“最近打开”的文件菜单选项! - drew..

45

一个简单的模拟器应用替代方法

在Finder中创建智能文件夹或者搜索功能,以便快速、方便地访问所有领域(realm)文件。

  1. 在Finder中打开文件夹/Users/$USER/Library/Developer/CoreSimulator/Devices

    使用终端命令:open /Users/$USER/Library/Developer/CoreSimulator/Devices

  2. 搜索.realm文件。

  3. 修改搜索设置,只在“Devices”文件夹内进行搜索。

  1. 将该搜索保存到侧边栏中(比如命名为“Realms”)。

按日期排序后,您可以快速、轻松地访问最新修改过的模拟器.realm文件的可点击列表。


谢谢@Archdoog - 当你在处理许多新的Realm项目时,这不是一个坏主意 - Allen
6
将其保存为搜索真是太聪明了!谢谢! :) - karlingen
可以使用 cd ~/Library/Developer/CoreSimulator/Devices && find . -name '*.realm' 来搜索 Realm。 - a2f0

22

这里有一个简单的解决方案... 我纠缠了一段时间。我应该指出,这是使用Android Studio和AVD模拟器的特定指令集。

1)启动模拟器并运行您的应用程序。

2)在应用程序仍在运行时,打开Android设备监视器。(它在AVD和SDK管理器图标旁边的工具栏中)

3)在设备监视器中单击文件浏览器选项卡。应该有很多文件夹。

4)导航到以下路径:Data>Data>您的软件包名称> files > Default.Realm(或者你命名的其他文件)

例如,如果您正在使用realm示例项目之一,则路径类似于Data>Data>io.realm.examples.realmgridview>files>default.realm

5)高亮显示该文件,单击上部区域的“从设备中提取文件”的磁盘图标。

6)将其保存到任何想要的地方即可完成。


19

我所做的是使用

let realm = Realm(path: "/Users/me/Desktop/TestRealm.realm")

然后它会完整地出现在我的桌面上,我可以双击启动Realm浏览器。稍后,当我确认一切按预期工作时,我可以删除该参数并让其使用默认位置。


1
我收到一个错误,说“参数标签'(path:)'与任何可用的重载不匹配”。有什么想法吗? - Marcelo Gracietti
太棒了,哈哈! - WilomGfx
适合在模拟器上测试,但可能在真实设备上无法正常工作。 - Malfunction
让realm = try! Realm(fileURL: URL(string: "/Users/[me]/Desktop/TestRealm.realm")!) - Elijah

13
以上答案中缺少在Android平台上查找realm文件的方法,相信我,这种方法会节省您很多时间,我们通常在其他方法中浪费时间来获取realm文件。所以让我们开始吧...
首先,在Android Studio中打开“设备文件资源管理器”(View->Tools Windows->Device File Explorer)。
这将打开您的设备资源管理器。

enter image description here

现在打开数据 -> 数据 -> (你的应用程序包名称) -> 文件 -> default.realm

default.realm 是我们在这里的文件。现在将此文件另存为您的位置,并从 realm_browser 访问该文件,您将获得您的数据库。

注意:该方法已经在非root手机(one+3)上测试过。


11

Objective-C - [RLMRealmConfiguration defaultConfiguration].fileURL

NSLog(@"%@",[RLMRealmConfiguration defaultConfiguration].fileURL);

例如:/Users/"你的用户名"/Library/Developer/CoreSimulator/Devices/E58645FF-90DE-434D-B2EB-FA145EB6F2EA/data/Containers/Data/Application/E427BD21-2CB1-4F64-9ADF-8742FF731209/Documents/

这是获取.realm文件路径的最简单的命令。在所有读写操作完成后,您将看到.realm文件。

或者

您可以使用开源工具OpenSim,它是Simpholders的替代品,可以直接从菜单栏访问您的应用程序文档目录。


10

如果您在模拟器中使用默认的 Realm 数据库:

po Realm().configuration.fileURL

你能添加一些细节吗? - zeeshan
@zeeshan,请在运行模拟器时暂停,并输入命令,然后按回车键。 - superarts.org

9

最新Realm的更新答案:

对于Android:

请检查stetho和https://github.com/uPhyca/stetho-realm 这里有视频教程:https://www.youtube.com/watch?v=9pFJz5VexRw

对于IOS(Swift)

要么:

debugPrint("Path to realm file: " + realm.configuration.fileURL!.absoluteString)

步骤1:在某个地方定义一个名为dev的常量。比如说在常量文件里。

public class Constants {

    public static var dev: Bool = true

}

步骤2:创建另一个名为RealmFunctions.swift的类

import RealmSwift


func realmAndPath() -> Realm {
    if Constants.dev {
        // location of my desktop
        let testRealmURL = NSURL(fileURLWithPath: "/Users/#####/Desktop/TestRealm.realm")
        return try! Realm(fileURL: testRealmURL)
    } else {
        return try! Realm()
    }
}

第三步: 最后在您的视图控制器中:

let realm = realmAndPath()

感谢Stewart Lynch提供原始答案。

为了适配Swift 3,我需要将realm.path更改为realm.configuration.fileURL!.absoluteString - Andrew

5
如果出现“输入加密密钥”对话框错误:
我正在使用Swift 2.1和Realm 0.96.2,当尝试打开数据库文件时出现此错误:
“default”无法打开。它可能已加密,或者不是兼容的文件格式。如果您知道该文件已加密,则可以手动输入其加密密钥以打开它。
发现使用预发布版本的Realm浏览器0.96可以解决此问题。

https://github.com/realm/realm-browser-osx/releases/tag/0.96-prerelease


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接