我有一个用于存储应用程序数据的 SQLite DB,我可以通过查看它来调试我遇到的问题 - 但是 iPhone 模拟器通常在哪里存储它的数据?
21 回答
适用于 Xcode6+/iOS8+
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[AppID]/
接受的答案对于 SDK 3.2 是正确的 - SDK 4 将该路径中的/User文件夹替换为它可以模拟的每个旧 iPhone OS/iOS 版本的数字,因此路径变为:
~/Library/Application Support/iPhone Simulator/[操作系统版本]/Applications/[appGUID]/
如果您同时安装了以前的 SDK,其 3.1.x 模拟器将继续将其数据保存在:
~/库/应用程序支持/iPhone模拟器/用户/应用程序/[appGUID]/
还有另一种(更快?)方法可以在没有终端的情况下找到应用数据的位置:
- 在模拟器中启动应用程序
- 打开活动监视器
- 在 CPU 选项卡中找到您的应用程序的名称
- 双击它并打开“打开文件和端口”
有史以来最简单的方法。
在某处捕获断点。(或暂停程序执行(在调试区域点击暂停),如评论中提到的 Najdan Tomić)
po NSHomeDirectory()
在控制台窗口中输入
结果:
(lldb) po NSHomeDirectory() /Users/usernam/Library/Developer/CoreSimulator/Devices/4734F8C7-B90F-4566-8E89-5060505E387F/data/Containers/Data/Application/395818BB-6D0F-499F-AAFE-068A783D9753
找到了:
~/Library/Application Support/iPhone Simulator/User/
iOS 8 ~/Library/Developer/CoreSimulator/Devices/[设备 ID]/data/Applications/[appGUID]/Documents/
在狮子上Users/[username]/Library
是隐藏的。
要简单地在 Finder 中查看,请单击屏幕顶部的“Go”菜单并按住“alt”键以显示“Library”。
单击“库”,您可以看到以前隐藏的库文件夹。
之前建议:
利用
chflags nohidden /users/[username]/library
在终端中显示文件夹。
如果模拟器正在运行,您可以获得任何应用程序容器的路径:
xcrun simctl get_app_container booted <app bundle identifier>
示例输出:
$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app
simctl
在任何需要设备 UDID 的地方,“booted”都可以替代大多数命令。
您可以使用 来查看设备列表xcrun simctl list
并获得有关特定命令的帮助xcrun simctl help
。
更新:根据 Xcode 8.3 中的流行请求,您现在可以通过附加“应用程序”、“数据”、“组”或应用程序组标识符来指定所需的容器类型。
获取数据容器:
$ xcrun simctl get_app_container booted com.example.app data
使用 Xcode 5,您可以使用以下代码:
#import <Foundation/NSFileManager.h>
和:
NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);
结果可能如下所示:
"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"
hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
标识您的 iOS 应用程序的十六进制字符串在哪里。
看起来 Xcode 6.0 再次移动了这个位置,至少对于 iOS 8 模拟器是这样。
~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[AppID]
只需这样做:
NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);
你会得到这样的想法:
/Users/admin/Library/Developer/CoreSimulator/Devices/58B5B431-D2BB-46F1-AFF3-DFC789D189E8/data/Containers/Data/Application/6F3B985F-351E-468F-9CFD-BCBE217A25FB/Documents
去那里,无论 XCode 的版本如何,您都会看到应用程序的文档文件夹。(在 Finder 中使用“Go to Folder...”命令并指定路径“~/library”)。
字符串路径的 Swift 版本:
let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
.userDomainMask, true).first
print(docDirPath)
和文件夹 URL:
let docDirUrl =
FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask).first
print(docDirUrl)
Xcode 2019+ Catalina、Xcode 11.0 中存储模拟器的地方
运行时
$ open ~/Library/Developer/CoreSimulator/Profiles/Runtimes
例如:iOS 13.0
, 到目前为止,watchOS 6.0
这些占用的空间最多。每个最高可达~5GB
设备
$ open ~/Library/Developer/CoreSimulator/Devices
例如:iPhone Xr
, iPhone 11 Pro Max
。这些通常每个 <15 mb。
解释
模拟器分为运行时和设备。如果您运行$ xcrun simctl list
,您可以看到概览,但如果您想找到这些模拟器的物理位置,请查看我显示的这些目录。
删除您不支持的运行时是完全安全的。如果需要,您可以稍后重新安装。
在 iOS 5 中:
/Users/[用户名]/Library/Application Support/iPhone Simulator/5.0/Applications/[AppGUID]/
对于 Xcode 4.6,它存储在以下路径中...
/Users/[currentuser]/Library/Application Support/iPhone Simulator/6.1/Applications/
要以编程方式了解它,请使用以下代码
NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
对于 iOS 8
要找到Documents文件夹,您可以在 Documents 文件夹中写入一个文件:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];
说,在didFinishLaunchingWithOptions
。
然后您可以打开终端并找到文件夹:
$ find ~/Library -name Words.txt
如果有人在 Lion 中仍然遇到这个问题,有一篇很棒的文章,其中包含 19 个不同的技巧来查看您的 ~/Library 目录。在这里找到 Dan Frakes 的文章http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html
记住模拟器的目录如下
~/库/应用程序支持/iPhone模拟器/用户/
对于 macOS Catalina,我在以下位置找到了我的数据库:
~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db
为了获得applicationId
,我只是按修改日期对文件夹进行了排序,尽管我确信有更好的方法来做到这一点。
对于不经常使用 Xcode 的 react-native 用户,你可以使用find
. 打开终端并使用数据库名称进行搜索。
$ find ~/Library/Developer -name 'myname.db'
如果您不知道确切的名称,您可以使用通配符:
$ find ~/Library/Developer -name 'myname.*'
我与这个程序没有任何关系,但如果你想在查找器中打开任何这些,SimPholders会非常容易。
To Open the dictories where you App are that you build in xCode on the simulators, do the following:
- open a Finder windor ( smiley face icon )
- then click GO -> Go to Folder
- type: ~/Library/Application Support/iPhone Simulator
- The Directories are the iOS version of the different Simulators
- The Sub Directories are the Apps install on the simulator
- The Documents folder is where the user generated content which gets backup up onto iCloud
您可以尝试使用以下代码
NSString *fileName = @"Demo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
NSLog(@"File path%@",pdfFileName);