Xcode Device Simulator的文档目录路径


89

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

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

但是,在iOS 8 Beta Simulator中,我在上面的目录中找不到iOS 8的相应目录。

iOS 8 Simulator的文档目录路径在哪里?

在此处输入图片说明


试试这个。有一个应用程序可以直接打开最新应用程序运行的“文档”目录。
NSRover



如果找不到您的库文件夹,则它可能是隐藏的。在终端中键入此命令将取消隐藏它:chflags nohidden〜/ Library
simon_smiley 2015年

如果您喜欢Xcode插件,请尝试github.com/onmyway133/XcodeWay,该Xcode插件可以导航到您的模拟器文件夹以及许多其他地方
onmyway133 '16

Answers:


155

在我的计算机上,路径为:

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

注意:可能您计算机上的那些长ID​​(即UDID)不同。


1
如果您的应用程序使用CoreData,则可能有一种更简便的方法来搜索文件夹位置:stackoverflow.com/a/25937606/1103584
DiscDev 2014年

12
不,这是不正确的。ObjC项目和Swift项目之间没有区别。这些是UDID(唯一设备标识符),您可以通过运行“ xcrun simctl list”来查看自己的ID
Jeremy Huddleston Sequoia

@JeremyHuddlestonSequoia,正确与否,这就是将SwiftObjC项目复制到我的计算机上的方式。我不需要提及两者都是在模拟器上编译的(这是原始问题)。如果Xcode在不同语言的UDID之间有所不同,并且您认为这是不正确的,则可能需要将其报告给Apple。
Holex 2014年

7
Holex,我是说您的说法不正确,而不是设计不正确(请注意,我实际上是设计CoreSimulator的Apple员工,所以我很可能会是第一个在此处纠正我认为是正确的人的人。错误)。UDID对应于单独的设备。swift和objc项目将使用不同的UDID的唯一原因是因为您将项目部署到了​​不同的模拟器设备(例如:一个部署到iPhone 5s,另一个部署到iPhone 6)。
Jeremy Huddleston Sequoia 2014年

@JeremyHuddlestonSequoia,如果您有足够的信心,欢迎随时更改我的答案。
Holex 2014年

75

NSLog下面的代码在“ AppDelegate”中的某处,运行您的项目并遵循路径。这比起在“〜/ Library / Developer / CoreSimulator / Devices /”中随机搜索而不是随机搜索文档更为容易。

目标C

NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);

Swift
如果使用的是Swift 1.2,请使用以下代码,由于存在以下#if #endif块,该代码仅在使用Simulator时在开发中输出:

#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 2015年

43

只需在AppDelegate中编写以下代码-> didFinishLaunchingWithOptions 目标C

#if TARGET_IPHONE_SIMULATOR 
// where are you? 
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 
#endif 


斯威夫特2.X

if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path {
    print("Documents Directory: " + documentsPath)   
}

斯威夫特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

斯威夫特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”,然后“转到文件夹”或命令+ shift + g和粘贴您的路径,让Mac将您带到文档目录


您如何知道应用程序包含哪个文件夹?目录太多,我是否必须搜索每个目录?
卡伦·安妮2014年


这是您自己的模拟器的硬编码路径。它不会对其他任何人起作用。实际上,一旦再次运行模拟器,此路径也会为您更改。
NSRover

#if TARGET_IPHONE_SIMULATOR //您在哪里?NSLog(@“文档目录:%@”,[[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);#endif
Mitul Marsoniya 2015年

16

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


既然iOS8 Simulator被隐藏在文件夹模糊中,但是该应用尚未更新为支持iOS8,那将是一个很棒的应用。
wibobm 2014年

@wibobm。SimPholders2当然支持iOS 8.0和iOS 8.1
JDibble 2014年

我的天啊。我一定是完全瞎了。谢谢!
wibobm 2014年

16

尽管这里有很多答案,但没有一个答案能帮助您了解iOS 8.3模拟器的文件夹结构如何变化,并且无法提供一种快速找到应用程序数据(文档文件夹)的方法。

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

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

~/Library/Developer/CoreSimulator/Devices

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

您可以通过以下步骤找到Identifier每个设备和模拟器Xcode > Window > Devices的标识符(标识符的前3个或第4个字符足以记住)。

要查找已在其上安装应用程序的应用程序,请查看您的Run scheme > devices(屏幕2)。

屏幕1

屏幕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及更低版本上,文件夹结构与以前相同,只记得现在每个模拟器都在同一个文件夹中(请参见上文)。


13

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

find ~ -name my_app_db_name.sqlite

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

我真的希望Apple可以在iOS Simulator文件菜单中添加一个按钮,例如“ Finder中的“显示文档”文件夹”。


1
要爱终端。
kakubei 2014年

2
这似乎是找到它的一种长远方法。搜索整个主目录?
shortstuffsushi

11

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

但是我看到的问题是,每次运行该应用程序时,路径都会不断变化。该路径在Application字符串之后包含另一组长ID,每次我运行该应用时,该ID都会不断变化。这基本上意味着我的应用程序下次运行时将没有任何缓存的数据。


我也看到了。
内森·琼斯

5
每次您运行应用程序时,路径都不会不断变化。库中每个设备都有一个路径。运行“ xcrun simctl list”以查看设备及其UDID的列表,以查看应考虑的子目录。
杰里米·哈德斯顿红杉2014年

8

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

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

要创建一个简单的可运行脚本,请将其放入带有“ Run Shell Script”的Automator应用程序中:

在Automator应用程序中运行Shell脚本


7

随着Xcode 6.0中CoreSimulator的采用,数据目录是按设备而不是每个版本的。数据目录为〜/ Library / Developer / CoreSimulator / Devices // data,可从“ xcrun simctl list”确定

请注意,如果您不打算回滚到Xcode 5.x或更早版本,则可以安全地删除〜/ Library / Application Support / iPhone Simulator和〜/ Library / Logs / iOS Simulator。


感谢您提供可能被视为权威的答案。是否有一种简单的方法(从应用程序内部登录除外)在模拟器中查找特定应用程序的位置?
fzwo 2014年

抱歉,不,但是我在这里和论坛上都看到了一些对此的要求。请在bugreport.apple.com上
Jeremy Huddleston Sequoia

6

更新: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(或菜单栏下的“转到”>“转到文件夹...”),然后将完整路径“ var / folder /.../ documents”粘贴到此处,然后按go。


4

尝试 ~/Library/Developer/CoreSimulator/Devices/


4

当我使用CoreData存储完整路径时,我遇到了同样的问题。检索完整路径时,它返回null,因为每次应用程序重新启动时,文档文件夹UUID都会不同。以下是我的解决方案:

  1. 确保仅在CoreData中存储文档/文件的相对路径。例如,存储“ Files / image.jpg”而不是“ / Users /您的名字/.../Applications/UUID/Document/Files/image.jpg”。
  2. 使用以下内容检索应用程序文档位置:

    [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

  3. 将#2和#1并置以获取要检索的文档/文件的完整路径。
您可以参考Apple Developer Note:https//developer.apple.com/library/ios/technotes/tn2406/_index.html


3

iOS 8模拟器的文档目录在哪里

您可能已经注意到,iPhone模拟器已随Xcode 6进行了更改,当然,它也已更改为模拟应用程序的“文档目录”的路径。有时我们可能需要看看它。

找到该路径并不像以前那样容易,即找到Library / Application Support / iPhone Simulator / 7.1 / Applications /,然后是代表您应用程序的神秘数字。

从Xcode 6和iOS 8开始,您将在这里找到它:库/开发人员/ CoreSimulator /设备/密码/数据/容器/数据/应用程序/密码

http://pinkstone.co.uk/where-is-the-documents-directory-for-the-ios-8-simulator/


3

在Appdelegate中,将以下代码放入文档和缓存目录中:

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    NSArray* cachePathArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachePath = [cachePathArray lastObject];
    NSLog(@"Cache Directory: %@", cachePath);
#endif

在日志上:

文件目录: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

缓存目录: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches


3

如果您想进入应用程序文件夹以查看正在发生的事情,并且不想通过迷宫式UUDID进行操作,我可以这样做:https : //github.com/kallewoof/plget

并使用它,我做了这个:https : //gist.github.com/kallewoof/de4899aabde564f62687

基本上,当我想转到某个应用程序的文件夹时,我会执行以下操作:

$ cd ~/iosapps
$ ./app.sh
$ ls -l
total 152
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/BD660795-9131-4A5A-9A5D-074459F6A4BF
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/A74C9F8B-37E0-4D89-80F9-48A15599D404
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/07BA5718-CF3B-42C7-B501-762E02F9756E
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/5A4642A4-B598-429F-ADC9-BB15D5CEE9B0
-rwxr-xr-x  1 me  staff  3282 Nov 14 17:04 app.sh
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/69F7E3EF-B450-4840-826D-3830E79C247A
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/976D1E91-DA9E-4DA0-800D-52D1AE527AC6
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/473F8259-EE11-4417-B04E-6FBA7BF2ED05
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/CB21C38E-B978-4B8F-99D1-EAC7F10BD894
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.otherapp-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/DE3FF8F1-303D-41FA-AD8D-43B22DDADCDE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-7-1_iPad-Retina.dr -> simulator/4DC11775-F2B5-4447-98EB-FC5C1DB562AD/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-2.dr -> simulator/6FC02AE7-27B4-4DBF-92F1-CCFEBDCAC5EE/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-Retina.dr -> simulator/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-1_iPad-Retina.dr -> simulator/414E8875-8875-4088-B17A-200202219A34/data
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 org.cocoapods.demo.pajdeg-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/C3069623-D55D-462C-82E0-E896C942F7DE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 simulator -> /Users/me/Library/Developer/CoreSimulator/Devices

./app.sh部件同步链接。从现在开始,基本上必须始终如此,因为从6.0版开始,应用每次Xcode的运行都会更改UUID。另外,不幸的是,对于8.x,应用程序的捆绑包ID为<8。


3

基于Ankur的答案,但对于我们Swift用户:

let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")

将其放入ViewDidLoad中,它将在应用程序执行后立即打印出来。


3

模拟器位于以下位置:

~/Library/Developer/CoreSimulator/

在这里,它们被列为具有UUID名称的目录。使用按“修改日期”排序以查找最新的。内部导航到:

/data/Containers/Data/Application/

在这里,您将获得该设备上所有应用程序的列表。您可以再次对其进行排序以获取最新的应用程序。

注意:每次运行应用程序时,Xcode都会更改目录名称,因此不要依赖在桌面上进行别名/快捷方式。

最简单的方法是在此处使用该应用程序,它会自动执行所有操作。


2

模拟器目录已随Xcode 6 Beta移至...

 ~/Library/Developer/CoreSimulator

将目录浏览到应用程序的Documents文件夹比较麻烦,例如,

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite

2

找到路径的最佳方法是通过代码进行。

使用Swift,只需将下面的代码粘贴到AppDelegate.swift中的函数应用程序

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsPath = paths.first as String
println(documentsPath)

对于Obj-C代码,请查看@Ankur的答案


2

对于Swift 3.x

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

1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.