Xcode设备模拟器的文档目录路径

98

iOS 7中,iOS模拟器的文档目录可以在以下位置找到:

/Users/Sabo/Library/Application Support/iPhone Simulator/

然而,在中,我找不到上面目录中对应 iOS 8 的文件目录。

那么 iOS 8 模拟器的文档目录路径在哪里?

图片描述


尝试使用这个链接。有一个应用程序可以直接打开最近运行的应用程序的文档目录。 - NSRover
https://dev59.com/umAf5IYBdhLWcg3wwlC5 - Amar
请尝试此链接https://dev59.com/o2Af5IYBdhLWcg3w7mU_#27461267。 - Tunvir Rahman Tusher
如果您找不到库文件夹,那么它可能是隐藏的。在终端中输入此命令将取消隐藏:chflags nohidden ~/Library - sam_smith
如果你喜欢Xcode插件,可以尝试一下https://github.com/onmyway133/XcodeWay。这是一个Xcode插件,可以导航到模拟器文件夹和许多其他地方。 - onmyway133
22个回答

163

在我的电脑上,路径是:

~/Library/Developer/CoreSimulator/Devices/1A8DF360-B0A6-4815-95F3-68A6AB0BCC78/data/Container/Data/Application/

注意: 对于你的计算机来说,那些长的ID(如UDID)可能是不同的。


1
如果您的应用程序使用CoreData,则可能有一种更简单的搜索文件夹位置的方法:https://dev59.com/dl8e5IYBdhLWcg3w7-Jz#25937606 - DiscDev
14
不,这是不正确的。ObjC项目和Swift项目没有区别。那些是UDID(唯一设备标识符),您可以通过运行“xcrun simctl list”来查看您的UDID。 - Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia,正确与否,这就是在我的电脑上复制_Swift_和_ObjC_项目的方式。我不需要提到两者都只在模拟器上编译(这是最初的问题)。如果_Xcode_针对不同语言的UDID有区别,并且您认为这不正确,您可能需要向苹果报告。 - holex
7
Holex,我是在说你的陈述不正确,而不是设计有问题(请注意,我实际上是苹果公司设计CoreSimulator的人,所以如果我认为哪里有错,我可能会第一个纠正它)。 UDID 对应于不同的设备。 如果您的 Swift 和 Objc 项目使用不同的 UDID,那么唯一的原因是您将项目部署到了不同的模拟器设备上(例如:对于一个项目,您将其部署到了 iPhone 5s 上,而另一个项目则部署到了 iPhone 6 上)。 - Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia,如果你感到有信心的话,随时欢迎纠正我的答案。 - holex
显示剩余2条评论

81
在“AppDelegate”中插入下面的NSLog代码,运行您的项目并跟随路径。这将使您更容易访问文档,而不是在“〜/库/开发者/CoreSimulator/Devices/”中随机搜索。 Objective-C
NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);

Swift
如果您正在使用Swift 1.2,请使用以下代码,该代码仅在使用模拟器时才会在开发中输出,因为使用了#if #endif块:

#if arch(i386) || arch(x86_64)
  let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
  NSLog("Document Path: %@", documentsPath)
#endif

从"/Users/ankur/Library/Developer/CoreSimulator/Devices/7BA821..."复制路径,进入"Finder"然后点击"前往文件夹"或按command + shift + g,粘贴您的路径,让Mac带您到文档目录 :)



简单高效! - loretoparisi

47

AppDelegatedidFinishLaunchingWithOptions 方法中写入以下代码:
Objective C

#if TARGET_IPHONE_SIMULATOR 
// where are you? 
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 
#endif 
Swift 2.X
if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path {
    print("Documents Directory: " + documentsPath)   
}

Swift 3.X

#if arch(i386) || arch(x86_64)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Swift 4.2

#if targetEnvironment(simulator)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

输出
/Users/mitul_marsonia/Library/Developer/CoreSimulator/Devices/E701C1E9-FCED-4428-A36F-17B32D32918A/data/Containers/Data/Application/25174F64-7130-4B91-BC41-AC74257CCC6E/Documents

"/Users/mitul_marsonia/Library/Developer/CoreSimulator/Devices/E701C1E9-FCED-4428-A36F-17B32D32918A..."复制你的路径,打开 "Finder" 然后执行 "前往文件夹" 或者使用快捷键 command + shift + g 并粘贴你的路径,让Mac带你进入到你的文档目录。


你将如何知道你的应用程序包含在哪个文件夹中?有太多目录,我必须搜索每一个吗? - KarenAnne
iOS 8存储SQLite文件位置(Core Data) - Mitul Marsoniya
这是对你自己模拟器的硬编码路径,它不会适用于其他人。实际上,一旦再次运行模拟器,该路径也会发生变化。 - NSRover
#if TARGET_IPHONE_SIMULATOR // 你在哪里? NSLog(@"文档目录: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); #endif - Mitul Marsoniya

19

虽然有许多答案,但没有一个提供了iOS 8.3模拟器文件夹结构发生变化的理解,并且没有提供快速查找应用程序数据(文档文件夹)的方法。

自从iOS 8以来,应用程序的数据存储文件夹与应用程序的可执行文件分离,而iOS 7及以下版本具有相同的文件夹结构,唯一的区别在于所有模拟器(不同类型和版本)现在都在一个大文件夹中。

因此,iOS 8、7、6模拟器的路径如下:

~/Library/Developer/CoreSimulator/Devices

每个模拟器现在都包含在一个名为唯一标识符的文件夹中,在每次模拟器重置时,标识符都会更改。

您可以通过转到Xcode > 窗口 > 设备(记住标识符的前3或4个字符就足够了)找到每个设备和模拟器的标识符

要找到您已安装您的应用程序的模拟器,请查看您的运行方案 > 设备(屏幕2)。

screen 1

screen 2

现在,在确定您的模拟器之后,取决于其版本,文件夹结构会有所不同:

在iOS 8上,应用程序的可执行文件和数据文件夹位于不同的文件夹中:

可执行文件~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

数据文件夹~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

文档文件夹~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

iOS 7及以下版本,文件夹结构与之前相同,只需记住现在每个模拟器都在同一个文件夹中(见上文)。


18

我推荐一款名为SimPholders的好用实用工具应用程序,可以帮助您在开发iOS应用程序时轻松查找文件和文件夹。 它有一个新版本可以与新的模拟器SimPholders2配合使用,并可在simpholders.com找到。


现在iOS8模拟器被埋在文件夹的深处,如果有一个酷炫的应用程序来支持iOS8,那就太好了。但是该应用程序尚未更新以支持iOS8。 - wibobm
@wibobm。SimPholders2确实支持iOS 8.0和iOS 8.1。 - JDibble
哦,我一定是瞎了眼了。谢谢! - wibobm

14

如果您的应用程序使用CoreData,一个巧妙的技巧是使用终端搜索sqlite文件的名称。

find ~ -name my_app_db_name.sqlite

结果将列出运行您的应用程序的任何模拟器的完整文件路径。

我真希望苹果公司能够在iOS模拟器文件菜单中添加一个按钮,比如“在Finder中显示文档文件夹”。


1
必须喜欢终端。 - kakubei
2
这似乎是一种非常冒险的方式来查找它。搜索整个主目录? - shortstuffsushi

11

我们需要查看路径~/Library/Developer/CoreSimulator/Devices/是正确的。

但我看到的问题是,每次运行应用程序时路径都会发生变化。该路径包含另一组长ID,在Application字符串之后,并且每次运行应用程序时都会更改。

这基本上意味着当下次运行应用程序时,我的应用程序将不具有任何缓存数据。


我也看到了这个。 - Nathan Jones
5
每次运行应用程序时路径不会发生变化。每个设备在你的库中只有一个路径。运行“xcrun simctl list”以查看设备列表及其UDID,以确定应该考虑哪个子目录。 - Jeremy Huddleston Sequoia

10

在iOS 9.2和Xcode 7.2中,以下脚本将打开上一个使用的模拟器上最后安装应用程序的“文档”文件夹;

cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .

为了创建一个易于运行的脚本,请将其放在“运行Shell脚本”中的自动化应用程序中:

在自动化应用程序中运行Shell脚本


8

使用终端和 simctl:

xcrun simctl get_app_container booted my.app.identifier data

2
我认为这是最有用的答案。打印当前运行模拟器中给定应用程序数据容器(包括文档)的目录。要直接在Finder中打开目录:`open ``xcrun simctl get_app_container booted my.app.identifier data``` - markiv
1
谢谢。我在我的.zprofile中添加了一个函数:openDocuments() { open -R "$(xcrun simctl get_app_container booted my.app.identifier data)/Documents" } - Anton Plebanovich

7
更新: Xcode 11.5 • Swift 5.2
if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
    print(documentsPath)   // "var/folder/.../documents\n" copy the full path
}

打开Finder,按下Command-Shift-G(或在菜单栏下选择Go > Go to Folder...),将完整路径“var/folder/.../documents”粘贴到输入框中,然后点击前往。


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