Xcode Device Simulator的文档目录路径

Posted

技术标签:

【中文标题】Xcode Device Simulator的文档目录路径【英文标题】:Document directory path of Xcode Device Simulator 【发布时间】:2014-10-01 15:48:12 【问题描述】:

ios 7中,iOS模拟器的文档目录可以在:

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

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

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

【问题讨论】:

试试this。有一个app直接打开最新app运行的Documents目录。 ***.com/questions/24290989/… 试试这个链接***.com/questions/24133022/… 如果你找不到你的库文件夹,它可能是隐藏的。在终端中输入此命令将取消隐藏它:chflags nohidden ~/Library 如果你喜欢 Xcode 插件,试试github.com/onmyway133/XcodeWay,一个可以导航到你的模拟器文件夹和许多其他地方的 Xcode 插件 【参考方案1】:

在我的电脑上,路径是:

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

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

【讨论】:

如果您的应用使用CoreData,可能有更简单的方法来搜索文件夹位置:***.com/a/25937606/1103584 不,这是不正确的。 ObjC 项目和 Swift 项目之间没有区别。这些是 UDID(唯一设备标识符),您可以通过运行“xcrun simctl list”查看您的 @JeremyHuddlestonSequoia,正确与否,这就是 SwiftObjC 项目在我的计算机上复制的方式。我不需要提到两者都是在模拟器上编译的(这是最初的问题)。如果 Xcode 在不同语言的 UDID 之间产生差异,并且您认为它不正确,您可能需要向 Apple 报告。 Holex,我是说你的说法不正确,而不是设计不正确(请注意,我实际上是 Apple 设计 CoreSimulator 的人,所以我可能是第一个人纠正我认为错误的地方)。 UDID 对应于单独的设备。您的 swift 和 objc 项目使用不同 UDID 的唯一原因是因为您将项目部署到不同的模拟器设备(例如:您部署到 iPhone 5s 而另一个部署到 iPhone 6)。 @JeremyHuddlestonSequoia,如果您有足够的信心,欢迎您随时纠正我的回答。【参考方案2】:

NSLog 在“AppDelegate”中某处的代码下方,运行您的项目并按照路径。这将使您轻松访问文档,而不是在“~/Library/Developer/CoreSimulator/Devices/”中随机搜索

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...”复制到“Finder”,然后“转到文件夹” >" 或 command + shift + g 并粘贴您的路径,让 mac 将您带到您的文档目录:)

【讨论】:

简单高效!【参考方案3】:

只需在 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

斯威夫特 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 带你到你的文档目录

【讨论】:

您如何知道您的应用程序包含在哪个文件夹中?目录太多,我必须逐个搜索吗? 你的答案是听到 > ***.com/questions/24133022/… 这是您自己的模拟器的硬编码路径。它对其他人不起作用。实际上,一旦你再次运行模拟器,这条路径也会改变。 #if TARGET_IPHONE_SIMULATOR // 你在哪里? NSLog(@"文档目录:%@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); #endif【参考方案4】:

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

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

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

~/Library/Developer/CoreSimulator/Devices

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

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

要找到您安装了应用程序的那个,请查看您的Run scheme > devices(屏幕 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 及以下的文件夹结构与以前相同,只记得现在每个模拟器都在同一个文件夹中(见上文)。

【讨论】:

【参考方案5】:

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

【讨论】:

这将是一个很酷的应用程序,因为 iOS8 模拟器被隐藏在文件夹中,但该应用程序尚未更新以支持 iOS8。 @wibobm。 SimPholders2 确实支持 iOS 8.0 和 iOS 8.1 天啊。我一定是完全失明了。谢谢!【参考方案6】:

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

find ~ -name my_app_db_name.sqlite

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

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

【讨论】:

爱上终端。 这似乎是一种很长远的发现方式。搜索整个主目录?【参考方案7】:

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

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

【讨论】:

我也看到了。 每次运行应用程序时路径都不会不断变化。您的库中的每个设备都有一个路径。运行“xcrun simctl list”以查看设备列表及其 UDID,以了解您应该考虑哪个子目录。【参考方案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 .

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

感谢您提供可能被视为权威的答案。有没有一种简单的方法(除了从应用程序内登录)在模拟器中找到特定应用程序的位置? 抱歉,没有,但我在这里和论坛上看到了一些这样的请求。请发送雷达至bugreport.apple.com【参考方案10】:

更新: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”粘贴到那里,然后按 go。

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

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

    确保在 CoreData 中仅存储文档/文件的相对路径。例如。存储“Files/image.jpg”而不是“/Users/yourname/.../Applications/UUID/Document/Files/image.jpg”。 使用以下命令检索应用文档位置:

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

    连接 #2 和 #1 以获得您要检索的文档/文件的完整路径。
你可以参考苹果开发者说明: https://developer.apple.com/library/ios/technotes/tn2406/_index.html

【讨论】:

【参考方案13】:

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

您可能已经注意到 iPhone Simulator 已经随着 Xcode 6 发生了变化,当然还有模拟应用程序的 Documents Directory 的路径。有时我们可能需要看看它。

找到该路径不像以前那么容易了,即 Library/Application Support/iPhone Simulator/7.1/Applications/ 后面跟着一个代表您的应用的神秘数字。

从 Xcode 6 和 iOS 8 开始,您可以在此处找到它: Library/Developer/CoreSimulator/Devices/cryptic number/data/Containers/Data/Application/cryptic number

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

【讨论】:

【参考方案14】:

在 Appdelegate 中,将这段代码放到 Document and 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/文档/

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

【讨论】:

【参考方案15】:

如果您想进入应用程序文件夹以查看发生了什么并且不想通过迷宫般的 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 和

【讨论】:

【参考方案16】:

基于 Ankur 的回答,但对于我们 Swift 用户而言:

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

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

【讨论】:

【参考方案17】:

模拟器位于:

~/Library/Developer/CoreSimulator/

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

/data/Containers/Data/Application/

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

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

最简单的方法是使用应用程序here,它会自动完成所有操作。

【讨论】:

【参考方案18】:

模拟器目录已随 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

【讨论】:

【参考方案19】:

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

使用 Swift,只需将下面的代码粘贴到 AppDelegate.swift

中的函数 application
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsPath = paths.first as String
println(documentsPath)

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

【讨论】:

【参考方案20】:

对于 Swift 3.x

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

【讨论】:

【参考方案21】:

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first 
    debugPrint("documentsPath = \(documentsPath)")

【讨论】:

【参考方案22】:

使用终端 && simctl:

xcrun simctl get_app_container booted my.app.identifier data

【讨论】:

我发现这是最有用的答案。打印当前正在运行的模拟器的给定应用程序的数据容器(包括文档)的目录。直接在 Finder 中打开目录:`open ``xcrun simctl get_app_container booted my.app.identifier data```

以上是关于Xcode Device Simulator的文档目录路径的主要内容,如果未能解决你的问题,请参考以下文章

使用 Xcode 8 的 Interface Builder 中的 Auto Layout 和 Trait Variations 正确设计的 Storyboard 视图在 Simulator 和 De

Xcode 6 / iOS 8 Simulator Data 和 Bundle 文件夹脚本

Xcode (iPhone) 构建警告

删除xcode Simulator

在Simulator上运行时获取设备型号名称?

React Native Performance Simulator vs. Real Device