如何在iPhone真实设备上打开SQLite数据库文件?

20

我正在使用数据线在我的真实 iPhone 6 设备上调试应用程序。我想要检查我的数据库并使用 sqlite3 查询结果。其他问题和教程只讲解如何在模拟器中操作,但我正在使用真实的 iPhone。

在 AppDelegate 中,我打印了数据库路径:

print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String) /Users/myname/Library/Developer/CoreSimulator/Devices/DAE93E57-7004-45F6-9B93-E79CA1AEEEFA/data/Containers/Data/Application/D7A4F27E-6F11-4941-A1B0-0337ABF788AB/Documents

因此,我获取该路径并从终端访问,并使用 sqlite3 DatabaseFile 访问我的数据库。

但是当我在设备中进行调试时,打印出来的路径不起作用。我尝试使用打印的路径: cd /var/mobile/Containers/Data/Application/3257D423-C198-41A5-B29D-B31E99F84F34/Documents /usr/bin/CD: line 4: cd: /var/mobile/Containers/Data/Application/3257D423-C198-41A5-B29D-B31E99F84F34/Documents: No such file or directory

这个错误发生了,我认为是因为这是 iOS 系统的文件路径。


在真实设备和模拟器上执行此操作没有区别。更新您的问题,解释您实际正在做什么以及您实际遇到的问题。 - rmaddy
我已经编辑了我的问题并添加了详细信息。 - Augusto
你是否尝试使用sqlite3命令行工具来检查数据库文件?你需要在你的问题中明确说明。 - rmaddy
我已经做到了,但我的问题是如何在真实设备上实现?而不是在模拟器中。 - Augusto
可能是如何从 iPhone 上导出 SQLite 数据库? 的重复问题。 - Praveen Gowlikar
5个回答

49

Xcode 10.1

在Xcode中,转到“窗口”>“设备和模拟器”。

在此输入图片描述

设备选项卡中,选择您的应用程序,然后单击齿轮图标,然后单击下载容器... 在此输入图片描述

选择您想要保存文件的位置,然后单击保存

转到Finder并找到您刚下载的.xcappdata文件,然后右键单击并选择显示包内容

在此输入图片描述

内容文件夹将打开。您的.sql文件位于AppData > Library > Application Support

在此输入图片描述

我建议下载DB Browser for SQL File,并使用它打开.sql文件。它非常好用!


更改应用程序后,我必须重新下载sqlite文件吗? - Augusto

3
在最近的Xcode版本(8及以上,我想),使用“窗口”菜单-->“设备”打开此选项。在设备列表中找到设备,查看设备上安装的应用程序列表。列出了您已构建和安装在设备上的每个应用程序(也许还有其他一些应用程序)。选择您的应用程序并单击列表下方的齿轮菜单。单击弹出菜单上的“下载”项将使您可以将应用程序的文档、库和其他目录复制到您的Mac上。

注意:这将下载一个.xcappdata文件。右键单击该文件并选择“显示包内容”将允许您深入挖掘实际的sqlite文件。


1

这里有另一种方法:

在调试模式下,添加一个UIActivityViewController来分享(复制)你的SQLite数据库到Mac或第三方iOS应用程序,如SQLiteFlow(iOS),然后你就可以调试你的SQLite数据库了。


0

你放置在文档中的文件应该会显示在 iTunes 中的文件共享中。您可以在本地下载它们并在那里编辑。您需要在应用程序的 Info.plist 中启用它,方法是添加:

<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

第二个密钥实际上只有在您想要启用在文件应用程序中显示这些内容时才需要。


2
不要在生产应用程序中这样做,因为用户可以删除或重命名文件。 - rmaddy
你知道如何显示 .sqlite 文件吗? 因为我在那里没有看到任何带有 .sqlite 后缀的文件。 - Taras

0

当你使用设备调试应用程序时,无法实时访问 .sqlite 文件。请尝试在模拟器中完成同样的操作,它将会成功运行。


这不是真的。Xcode允许您下载正在开发中的应用程序的沙盒,然后您可以访问文件的副本。虽然它不像模拟器中实时获取的那样,但仍然可以访问。 - rmaddy
这就是我的意思,你不能在实时调试它。我会编辑我的答案,谢谢! - Rizwan Ahmed
那么,我该如何复制这个文件@rmaddy?并且访问它?你有我的答案吗? - Augusto
@Augusto 请查看Praveen Gowlikar的答案。 - rmaddy

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