有没有办法在iOS模拟器上查看文件系统?

211

有没有办法浏览当前正在运行或已停止的iOS模拟器的文件系统?如果有方法可以查看特定应用程序的文件,我也可以接受。

请注意,我不想以编程方式完成此操作。 我想在Finder中查看/打开文件。

12个回答

270

更新:自iOS 8以来:

~/Library/Developer/CoreSimulator/Devices

之前的位置是:

~/Library/Application Support/iPhone Simulator

它包含所有您曾经运行过的模拟器型号(4.0、4.1、5.0等)的目录,进入您在Xcode中正在运行的模拟器型号所在的目录。

进入文件夹后,进入Applications,选择显示文件日期的Finder选项,并按日期排序。由于您的应用程序刚刚更改了目录,因此您的应用程序将是最新的...

文件夹里包含与您的应用程序相关的所有内容。 您甚至可以在各个运行之间在其中放置文件,例如恢复到已知状态的存储数据库...

我经常去那里,所以我在我的Finder侧边栏中保留了iPhone模拟器目录。

请注意,使用iOS 8后,模拟器文件夹位于完全不同的目录中,实际上分布在几个目录中,并带有每次运行应用程序时都会更改的特定于应用程序的文件夹名称。


24
要在Lion中查看~/Library文件夹,您需要在终端中运行以下命令:chflags nohidden ~/Library/ - Dan J
10
在查看Finder的“前往”菜单时,您还可以按选项键。 - Wayne
3
жҲ‘еңЁFinderдёӯдҪҝз”ЁвҢҳвҮ§GгҖӮиҝҷжҜ”жү“ејҖз»Ҳз«Ҝ并иҫ“е…Ҙcdе‘Ҫд»Өжӣҙеҝ«гҖӮ - Jacob Pritchett
3
在Finder菜单栏中按住“Option”键,然后点击“前往(Go)”即可。 - Matjan
13
要找到特定应用程序的文件在随机哈希之间几乎是不可能的,使用这个命令可以实际获取到应用程序的文件: xcrun simctl get_app_container booted my.app.id data - hyperknot
模拟器的应用商店通常位于 ~/simulatorId/Data/Containers/applicationId/(将 ID 替换为他们使用的 UUID,并查找最近的文件)。 - marksyzm

87

iOS 8

设备

~/Library/Developer/CoreSimulator/Devices

应用

~/Library/Developer/CoreSimulator/Devices/{{Device Code}}/data/Containers/Bundle/

11
确定您目前使用的设备代码{{Device Code}}的简单方法是在Xcode中打开所需的模拟器,然后在Finder中按修改日期~/Library/Developer/CoreSimulator/Devices/目录进行排序。选择最近修改的即可。 - Stan James
5
应用程序数据所在路径: ~/Library/Developer/CoreSimulator/Devices/{{设备代码}}/data/Containers/Data/Application/{{应用程序ID}} - Bjørn Egil
实际上,您可以在硬件 > 设备 > 管理设备中看到 {{设备代码}} - TobTobXX
谢谢,这个答案在2021年仍然相关。 - Nik

41

基于zsero的回答

详细信息

macOS 10.13.1

解决方案1

在终端中运行以下命令

模板

open `xcrun simctl get_app_container booted BUNDLEID_OF_YOUR_APP data` -a Finder

完整样本

open `xcrun simctl get_app_container booted com.Test data` -a Finder

你的应用程序的Bundle ID是什么?

您的应用程序的Bundle ID为"Bundle Identifier"

enter image description here

解决方案1的特点

  • 打开文件以获取应用程序模拟器目录

解决方案2

创建一个名为您的应用程序的bash脚本并编写以下代码:

script_file_name = `basename "$0"`
open `xcrun simctl get_app_container booted $script_file_name data`

输入图片说明

解决方案 2 的特点

  • 打开文件以获取应用模拟器目录
  • 重命名文件以获取另一个应用模拟器目录

结果

输入图片说明


1
似乎你需要在“Full Sample”字符串末尾添加“Finder”。 - phantom_2

41

简单。快速。Xcode 10+。

  1. 使用 print(NSHomeDirectory()) 命令并复制路径。
  2. 打开Finder 应用程序,按下 Shift+Cmd+G
  3. 粘贴复制的路径,然后按前往按钮。

另一种方法是在控制台中捕获一个断点,然后执行 po NSHomeDirectory() 命令。


我应该在哪里运行第一步? - Carson Holzheimer
1
@CarsonHolzheimer 在你的代码中,例如在你的 ViewControllerviewDidLoad 中。也许我应该写的不是“运行”,而是其他什么东西。谢谢! - Tung Fam
当在断点上停止时,您还可以执行以下操作:po NSHomeDirectory() - TylerJames
谢谢。在尝试了各种建议后,这是对我有效的第一件事。 - Mathieson

33

打开“活动监视器”程序,搜索您的应用程序(只需应用程序名称,不需要模拟器),单击“信息”,然后打开“打开文件和端口”。复制第二个条目(类似于/Users/me/Library/Application Support/iPhone Simulator/4.2/Applications/B97A9504-0FA5-4826-BB6D-A2335A676459/VSGradientView.app/YourApp)。这是正在运行的应用程序,而<...>/B97A9504-0FA5-4826-BB6D-A2335A676459/VSGradientView.app/是包,<...>/B97A9504-0FA5-4826-BB6D-A2335A676459/*是沙盒文件夹。

如果将此作为open "/Users/me/Library/Application Support/iPhone Simulator/4.2/Applications/B97A9504-0FA5-4826-BB6D-A2335A676459/"传递给终端,则该文件夹将在Finder中打开。

听起来很复杂,但实际并不是。


好的观点!特别是,您不需要进入.app来查看应用程序的文件系统。 - Yevhen Dubinin
很好的建议。真的希望有一个脚本或小工具来帮助解决这个问题。每个iOS设备仿真似乎都被模拟成完全不同的文件夹。新版本中的文件夹结构非常混乱。:( - Markive
优秀的答案,特别是当路线随着Xcode版本的更改而变化时。 - rgkobashi

14

如果您想要自动获取位置或在脚本中使用该文件夹,则可以使用以下命令从正在运行的模拟器中获取精确位置:

xcrun simctl get_app_container booted my.app.id data

非常有用。为了直接进入该目录,我运行了cd `xcrun simctl get_app_container booted my.app.id data` - app4g

10

6

对于Swift 4.2及更高版本,打印一个易于使用的路径:

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

...在源代码位置中,例如:

func application(
    _ application: UIApplication, 
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
    // ...
    return true
}

请使用终端命令行中的cdopen跟随生成的路径。 或者,将该路径粘贴到shift-cmd-G“前往文件夹...”Finder提示框中。

相关的答案包括旧版语言版本:iOS 8 Beta模拟器的文档目录路径


5

首先,从终端获取带有设备 ID的模拟器列表

  1. instruments -s devices
  2. xcrun simctl list

然后,在路径下输入设备ID,即可获得特定的模拟器文件系统 ~/Library/Developer/CoreSimulator/Devices/{{deviceID}}


3

虽然这篇文章已经有些年头了,但我认为值得提及一下 SimPholders 这个工具,用于查找模拟器文件。它是一个菜单栏项目,可以跟踪您的模拟器应用程序,并让您直接进入其文件夹和内容。非常棒。

(原始答案在此处:https://dev59.com/umAf5IYBdhLWcg3wwlC5#26557165)


刚刚确认这个应用仍然活跃,并且非常好用:https://simpholders.com……真是太棒了! - Jasper Blues

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