有什么办法可以在iOS模拟器上查看文件系统吗?


170

有什么方法可以浏览当前正在运行或刚刚终止的iOS模拟器的文件系统?如果可以的话,我希望能够查看特定应用程序的文件。

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

Answers:


232

更新:自iOS 8:

〜/库/开发人员/ CoreSimulator /设备

该位置曾经是:

〜/图书馆/应用程序支持/ iPhone模拟器

它具有您曾经运行过的所有模拟器模型(4.0、4.1、5.0等)的目录,转到在Xcode中正在运行的模拟器。

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

目录中包含与您的应用程序相关的所有内容。您甚至可以在两次运行之间在其中放置文件,例如以已知状态还原到存储的数据库...

我经常去那里,将iPhone Simulator目录保留在Finder边栏中。

请注意,在iOS8中,模拟器文件夹位于一个完全不同的目录中-确实分散在几个目录中,并且特定于应用程序的文件的文件夹名称在您每次运行应用程序时都会更改。


20
要在Lion中查看〜/ Library文件夹,您需要在终端中运行以下命令:chflags nohidden〜/ Library /
Dan J

9
您也可以按选项键,同时观看Finder的Go菜单
韦恩

3
我使用Finder中的⌘⇧G。它比将Terminal打开cd更快。
雅各布·普里切特

3
按住“选项”,然后在查找器的菜单栏中单击“开始”
Matjan

3
在随机哈希之间很难找到特定应用程序的文件,请使用此命令实际访问该应用程序的文件:xcrun simctl get_app_container booted my.app.id data
hyperknot

77

iOS 8

设备

~/Library/Developer/CoreSimulator/Devices

应用领域

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

8
确定当前电流的{{Device Code}}}一种简单方法是在Xcode中打开所需的模拟器,然后在Finder中按排序~/Library/Developer/CoreSimulator/Devices/目录Date Modified。最近是您想要的那个。
斯坦·詹姆斯

2
对于应用程序数据:〜/资源库/开发/ CoreSimulator /设备/ {{设备代码}} /数据/集装箱/数据/应用/ {{应用标识}}
比约恩埃吉尔

实际上,您可以{{Device Code}}在“硬件”>“设备”>“管理设备...”中查看
Filius Patris

30

打开程序“活动监视器”,搜索您的应用程序(只是应用程序名称,而不是模拟器),单击“信息”,然后打开“打开文件和端口”。复制第二个条目(类似/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 2014年

很好的建议。真的希望有脚本或小的实用程序来帮助您。.每个iOS设备看起来都像一个完全不同的文件夹。.在新版本中,文件夹结构
无处不

一个很好的答案,特别是当Xcode版本更改了路线时
rgkobashi

21

简单。快速。Xcode 10+。

  1. 使用print(NSHomeDirectory())复制路径。
  2. 打开Finder应用并按Shift+Cmd+G
  3. 粘贴复制的路径,然后按GO

1.的替代方法是捕获一个断点并po NSHomeDirectory()在控制台中执行。


我在哪里运行步骤1?
卡森·荷兹海默

1
@CarsonH​​olzheimer在您的代码中,例如在viewDidLoad您的中ViewController。也许我应该写的不是“ run”,而是其他。谢谢!
东F

18

基于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 

BUNDLEID_OF_YOUR_APP ???

BUNDLEID_OF_YOUR_APP =“捆绑包标识符”

在此处输入图片说明

解决方案的特点1

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

解决方案2

使用您的应用名称和代码创建一个bash脚本:

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

在此处输入图片说明

解决方案的特点2

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

结果

在此处输入图片说明


似乎您需要在“完整样本”字符串的末尾添加“ Finder”。
phantom_2


7

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

xcrun simctl get_app_container booted my.app.id data


1

基于@zsero答案,我做了一个简短的bash脚本,该脚本直接打开您的应用程序ID的模拟器文件夹。非常便利!

openappfolder.sh

#!/bin/bash

APPID=$1
if OUTPUT=`xcrun simctl get_app_container booted $APPID data` ; then
    open $OUTPUT
else
    echo "$APPID not found!"
fi 2>/dev/null

然后就

openappfolder.sh com.bundle.id

👍


1

对于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
}

在终端命令行上使用cd或生成的路径open。或者,将路径粘贴到shift-cmd-G“转到文件夹...”查找器提示中。

相关答案,包括较旧的语言版本:iOS 8 Beta Simulator的文档目录路径


0

在Xcode版本8.2.1(8C1002)上,我在以下路径中找到了安装在模拟器上的.app文件: ~/Library/Developer/Xcode/DerivedData/[APPNAME]-[RANDOM HASH]/Build/Products/Debug-iphonesimulator


0

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

  1. 仪器-s设备
  2. xcrun simctl列表

然后将设备ID放在路径下面。您将获得特定的模拟器文件系统 ~/Library/Developer/CoreSimulator/Devices/{{deviceID}}

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.