我有一个SQLite数据库,我用它来存储应用程序数据,我可以查看它内部以调试我遇到的问题-但是iPhone模拟器通常在哪里存储它的数据?
发现:
~/Library/Application Support/iPhone Simulator/User/
Xcode6 + / iOS8 +
~ /图书馆/开发/ CoreSimulator /设备/[的DeviceID] /数据/集装箱/数据/应用程序/ [AppID] /
接受的答案对于SDK 3.2是正确的- SDK 4将该路径中的/用户文件夹替换为它可以模拟的每个遗留iPhone OS/iOS版本的数字,因此路径变成:
~/Library/Application Support/iPhone Simulator/[OS version]/Applications/[appGUID]/
如果你安装了之前的SDK,它是3.1。X模拟器将继续将其数据保存在:
~/Library/Application Support/iPhone Simulator/User/Applications/[appGUID]/
在Lion上,Users/[username]/Library被隐藏。
Users/[username]/Library
要在Finder中查看,单击屏幕顶部的“Go”菜单,并按住“alt”键显示“Library”。
点击“Library”,你可以看到之前隐藏的库文件夹。
先前的建议:
使用
chflags nohidden /users/[username]/library
在终端中显示文件夹。
如果有人仍然在lion中遇到这个问题,有一篇很棒的文章提供了19个查看~/Library目录的技巧。在这里找到Dan Frakes的文章http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html
记住模拟器的目录如下所示
~/库/应用程序支持/iPhone模拟器/用户/
在iOS 5中:
/Users/[用户名]/库/应用程序支持/iPhone模拟器/5.0/应用程序/[AppGUID]/
您可以尝试使用下面的代码
NSString *fileName = @"Demo.pdf"; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName]; NSLog(@"File path%@",pdfFileName);
对于Xcode 4.6,它被存储在以下路径…
/Users/[currentuser]/Library/Application Support/iPhone Simulator/6.1/Applications/
要通过编程方式了解它,请使用以下代码
NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
在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应用程序。
hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
iOS 8
要找到文档文件夹,你可以在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中。
didFinishLaunchingWithOptions
然后你可以打开一个终端,找到这个文件夹:
$ find ~/Library -name Words.txt
< >强iOS 8 ~ /图书馆/开发/ CoreSimulator /设备/[设备ID] /数据/应用程序/ [appGUID] /文件/ < / p >
要在模拟器上打开你在xCode中构建的应用程序所在的目录,请执行以下操作:
看起来Xcode 6.0再次移动了这个位置,至少iOS 8模拟器是这样的。
~ /图书馆/开发/ CoreSimulator /设备/[的DeviceID] /数据/集装箱/数据/应用程序/ [AppID]
还有另一种(更快的?)方法可以在没有终端的情况下找到你的应用数据:
找到应用程序在模拟器中的位置最简单的方法之一。用户“NSTemporaryDirectory()”
步骤,
阿宝NSTemporaryDirectory () < / p >
请看下面的图片以获得正确的见解
现在你有了临时文件夹的确切路径。您可以返回并查看所有应用程序相关的文件夹。
希望这也能有所帮助。快乐编码:)
简单地这样做:
NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; NSLog(@"%@", docDirPath);
你会得到这样的想法:
/用户/ admin /图书馆/开发/ CoreSimulator /设备/ 58 b5b431-d2bb-46f1-aff3-dfc789d189e8 /数据/集装箱/数据/应用程序/ 6 f3b985f - 351 - e - 468 - f - 9 - cfd bcbe217a25fb /文档
去那里,你会看到应用的文档文件夹,不管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)
如果模拟器正在运行,你可以得到任何应用程序的容器的路径:
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
"boot "可以在任何需要设备UDID的地方替换为大多数simctl命令。
simctl
你可以使用xcrun simctl list查看设备列表,并使用xcrun simctl help获取有关特定命令的帮助。
xcrun simctl list
xcrun simctl help
更新:根据Xcode 8.3中的流行请求,你现在可以通过追加"app"、"data"、"groups"或应用程序组标识符来指定你想要的容器类型。
获取数据容器:
$ xcrun simctl get_app_container booted com.example.app data
在某处捕获断点。(或暂停程序执行(在调试区点击暂停)如Najdan tomic在评论中提到的)
在“控制台窗口”中输入“po NSHomeDirectory()”
po NSHomeDirectory()
(lldb) po NSHomeDirectory() /用户/ usernam /图书馆/开发/ CoreSimulator /设备/ 4734 f8c7 - b90f - 4566 - 8 e89 - 5060505 - e387f /数据/集装箱/数据/应用程序/ 395818 bb - 6 -交易服务处d0f - 499 f - - 068 a783d9753 < / p >
我与这个程序没有任何关系,但如果你想在finder中打开任何一个,SimPholders使它非常容易。
对于不经常使用Xcode的react-native用户,你可以只使用find。打开终端,通过数据库名称进行搜索。
find
$ find ~/Library/Developer -name 'myname.db'
如果你不知道确切的名称,你可以使用通配符:
$ find ~/Library/Developer -name 'myname.*'
$ open ~/Library/Developer/CoreSimulator/Profiles/Runtimes
例如:iOS 13.0, watchOS 6.0到目前为止,这些占用了最多的空间。每一个都可以达到~5GB
iOS 13.0
watchOS 6.0
$ open ~/Library/Developer/CoreSimulator/Devices
例如:iPhone Xr, iPhone 11 Pro Max。这些通常是<15 mb每个。
iPhone Xr
iPhone 11 Pro Max
模拟器在运行时和设备之间被分割。如果你运行$ xcrun simctl list,你可以看到一个概述,但如果你想找到这些模拟器的物理位置,请查看我所显示的这些目录。
$ xcrun simctl list
删除您不支持的运行时是完全安全的。如果您愿意,可以稍后重新安装。
对于macOS Catalina,我发现我的db在:
~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db
为了获得applicationId,我只是按修改日期对文件夹进行排序,尽管我确信有更好的方法来做到这一点。
applicationId