我无法找到 IOS 模拟器的 sqlite 文件。我需要该文件来检查数据库中的数据以进行调试。
以前我会使用:
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
获取文件的位置,然后将其粘贴到 Finder 中。 现在它给了我:
file:///var/mobile/Containers/Data/Application/7DA7CB97-948B-41C6-BFA3-A50E6FF4C8B3/Documents/
Apple 最近似乎更改了文件的位置。
iOS .sqlite 数据库文件位置
将 next 添加到方案 -> 运行 -> 参数 -> 启动时传递的参数
-com.apple.CoreData.Logging.stderr 1
-com.apple.CoreData.SQLDebug 1
之后您将能够找到文件的位置
例如:
CoreData: annotation: Connecting to sqlite database file at "/Users/User/Library/Developer/CoreSimulator/Devices/DBF9B9A0-ED0C-45E9-BEE0-CA24BE1834D3/data/Containers/Data/Application/7F285D7A-5B39-4D1C-BE48-36AC16F069CD/Library/Storage.sqlite"
您可以使用 DB Browser for SQLite
打开它请注意,可能有多个 .sqlite 文件。按名字找到你的
我假设您指的是 Core Data SQLite 文件。
我认为苹果最近没有对文件位置进行任何更改。
默认情况下,如果您的应用程序是基于核心数据基于文档的应用程序(使用
UIManagedDocument
)(这种情况很少见),我认为文档文件会进入应用程序的Container(沙箱)的
Documents
子文件夹中。但是,如果您的应用程序是 Core Data non-document-based 应用程序(这很常见),那么单个 SQLite 文件将进入您应用程序的 Container(沙箱)的
Application Support
子文件夹中。
问题中的 NSLog() 调用仅查找
Documents
子文件夹。如果您的应用程序不是基于文档的,请将常量更改为 NSDocumentDirectory
到 NSApplicationSupportDirectory
。然后查看它打印的路径。
例如,在我的 Core Data 非基于文档的应用程序中,在 iOS 12 模拟器中运行,记录应用程序支持文件夹打印的路径:
/Users/jk/Library/Developer/CoreSimulator/Devices/BB85B11A-5C2C-4CBC-AB4F-891C74E6FD3A/data/Containers/Data/Application/A973B1C6-4E71-43DD-8F21-6A55903E071B/Library/Application Support
我终于找到它在哪里了。
-用户->用户名->右键单击显示库文件夹
-运行控制台命令:xcrun simctl list
这将显示您正在使用的模拟器的 ID。
-导航到 /Users/jk/Library/Developer/CoreSimulator/Devices/ 并选择与您找到的 ID 匹配的模拟器文件。
-在查找器搜索中,搜索当前型号版本名称。
我的最终结果是: Macintosh HD ▸ 用户 ▸ 用户名 ▸ 库 ▸ 开发者 ▸ CoreSimulator ▸ 设备 ▸ 217E2EB2-139F-4568-B1D0-A6B9EE701198 ▸ 数据 ▸ 容器 ▸ 数据▸ 应用程序 ▸ C69F7670-3589-4F17-BEB0-79E290206676 ▸ 库 ▸ 应用程序支持 ▸ AppName -> Core Data 版本名称。
这个答案能给你一些帮助吗?
我认为你真正需要的是一个可以处理文件的 SQLite 编辑器 路径会自动更改,因此您不必担心什么 路径实际上改变了,对吗?
如果答案是肯定的,那么尝试一下 SQLiteFlow,它可以在 App Store,从它的文档来看,它说:
处理数据库文件名或目录更改。这使得 SQLiteFlow 可以与 iOS 中的 SQLite 数据库友好地工作 模拟器。