iOS 8 Beta模拟器的文档目录path

在“iOS 7”中,我们可以用下面的path去文件目录

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

但是在“ iOS 8 Beta Simulator ”中,我无法在上面的目录中find“ iOS 8 ”文件夹。

那么iOS 8 Simulator的文档目录path是什么?

在这里输入图像说明

在我的电脑上,path如下:

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

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

NSLog下面的代码在“AppDelegate”的某处,运行你的项目并按照path。 这将很容易到达文档,而不是在“〜/ Library / Developer / CoreSimulator / Devices /”中随机search

Objective-C的

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

迅速
如果您使用的是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 …”复制你的path,进入“ Finder ”,然后“ 转到文件夹 ”或命令 + shift + g并粘贴你的path,让mac你到你的文档目录:)

只需在AppDelegate – > didFinishLaunchingWithOptions中 写下代码
目标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 

产量
/用户/ mitul_marsonia /库/开发商/ CoreSimulator /设备/ E701C1E9-FCED-4428-A36F-17B32D32918A /数据/容器/数据/应用/ 25174F64-7130-4B91-BC41-AC74257CCC6E /文件

我build议一个名为SimPholders的好实用程序,可以在开发iOS应用程序时轻松find文件和文件夹。 它有一个新的版本,可以与称为SimPholders2的新仿真器一起工作。 它可以在simpholders.comfind

尽pipe事实上这里有很多答案,但没有一个提供了对iOS 8.3模拟器的文件夹结构如何改变的理解,也没有提供快速find应用程序数据(文档文件夹)的方法。

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

所以,iOS 8,7,6模拟器的path如下:

 ~/Library/Developer/CoreSimulator/Devices 

现在,每个模拟器都包含在一个以唯一标识符命名的文件夹中,该模板在每次模拟器复位时都会更改。

您可以通过转到Xcode > Window > Devices (标识符的前3或4个字符绰绰有余)find每个设备和模拟器的标识符。

要find您已经安装了您的应用程序的一个,看看你的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]/

Documents Folder~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

iOS 7及以下,文件夹结构与以前一样,只记得现在每个模拟器都在同一个文件夹中(见上文)。

如果你的应用程序使用CoreData,一个漂亮的技巧是使用terminalsearchsqlite文件的名称。

 find ~ -name my_app_db_name.sqlite 

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

我真的希望苹果只要添加一个button到iOS模拟器文件菜单,如“在Finder中显示文档文件夹”。

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

但是我看到的问题是,每次运行应用程序时,path都会不断变化。 该path包含应用程序string后面的另一组长ID,并且每次运行应用程序时都会更改。 这基本上意味着我的应用在下次运行时不会有任何caching的数据。

随着Xcode 6.0中的CoreSimulator的采用,数据目录是按设备而不是按版本的。 数据目录是〜/ Library / Developer / CoreSimulator / Devices // data可以从'xcrun simctl list'

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

更新: Xcode 7.2•Swift 2.1.1

 if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path { print(documentsPath) // "var/folder/.../documents\n" copy the full path } 

进入你的Finder按下命令shift-g(或者Go> Go to Folder …在菜单栏下)并粘贴完整的path“var / folder /…/ documents”,然后按go。

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

模拟器位于:

~/Library/Developer/CoreSimulator/

在这里,它们被列为具有UUID名称的目录。 使用'修改date'来查找最新的。 里面导航到:

/data/Containers/Data/Application/

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

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

最简单的方法是使用这里的应用程序,它自动完成所有的事情。

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

  1. 确保只在CoreData中存储文档/文件的相对path。 例如,存储“Files / image.jpg”而不是“/Users/yourname/…/Applications/UUID/Document/Files/image.jpg”。
  2. 使用以下来检索应用程序文档位置:

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

  • 连接#2和#1以获取您想要检索的文档/文件的完整path。
  • 你可以参考苹果开发者注意: https : //developer.apple.com/library/ios/technotes/tn2406/_index.html

    使用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 . 

    要创build一个简单的可运行脚本,请使用“运行Shell脚本”将其放在Automator应用程序中:

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

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

    您可能已经注意到,iPhone Simulator已经随着Xcode 6而改变了,当然也包括了模拟应用程序文档目录的path。 有时我们可能需要看看它。

    find这条路并不像以前那么简单,即图书馆/应用程序支持/ iPhone模拟器/ 7.1 /应用程序/后面跟着一个神秘的数字代表你的应用程序。

    从Xcode 6和iOS 8开始,您可以在这里find它:Library / Developer / CoreSimulator / Devices /神秘数字/数据/ Containers / Data / Application /神秘数字

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

    在Appdelegate中,把这个代码看成Document和Cache Dir:

     #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 /

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

    如果你想进入应用程序文件夹,看看发生了什么,不想要通过迷宫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的应用程序名称。

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

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

    把它放在ViewDidLoad中,它会在执行应用程序时立即打印出来。

    模拟器目录已经移动Xcode 6testing版…

      ~/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 

    findpath的最好方法是通过代码来完成。

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

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

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

    对于Swift 3.x

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