【发布时间】:2011-09-22 18:18:24
【问题描述】:
有没有办法浏览当前正在运行或刚刚杀死的 iOS 模拟器的文件系统?如果有办法,我会满足于能够查看特定应用程序的文件。
请注意,我不想以编程方式执行此操作。我想在 Finder 中查看/打开文件。
【问题讨论】:
标签: iphone ios nsfilemanager
有没有办法浏览当前正在运行或刚刚杀死的 iOS 模拟器的文件系统?如果有办法,我会满足于能够查看特定应用程序的文件。
请注意,我不想以编程方式执行此操作。我想在 Finder 中查看/打开文件。
【问题讨论】:
标签: iphone ios nsfilemanager
更新:自 iOS 8 起:
~/Library/Developer/CoreSimulator/Devices
以前的位置是:
~/Library/Application Support/iPhone 模拟器
它包含您曾经运行过的所有模拟器模型(4.0、4.1、5.0 等)的目录,转到您在 Xcode 中运行的那个。
进入文件夹后,转到应用程序,选择显示文件日期的 Finder 选项,然后按日期排序。您的应用程序将是最新的,因为它刚刚更改了目录...
目录中包含与您的应用程序相关的所有内容。您甚至可以在运行之间将文件放在那里,以恢复到已知状态的存储数据库...
我经常去那里,我将 iPhone Simulator 目录保存在我的 Finder 侧边栏中。
请注意,在 iOS8 中,模拟器文件夹位于完全不同的目录中 - 实际上分为几个目录,应用程序特定文件的文件夹名称在每次运行应用程序时都会更改。
【讨论】:
Go菜单时按option键
xcrun simctl get_app_container booted my.app.id data
打开程序“活动监视器”,搜索您的应用程序(只是应用程序名称,而不是模拟器),单击“信息”并打开“打开文件和端口”。复制第二个条目(类似于/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 即可查看应用程序的文件系统。
~/Library/Developer/CoreSimulator/Devices
~/Library/Developer/CoreSimulator/Devices/{{Device Code}}/data/Containers/Bundle/
【讨论】:
{{Device Code}}},一种简单的方法是在Xcode 中打开所需的模拟器,然后在Finder 中按Date Modified 对~/Library/Developer/CoreSimulator/Devices/ 目录进行排序。最新的是您想要的。
{{Device Code}}...
【讨论】:
旧帖子,但我认为值得一提的是SimPholders 来查找您的模拟器文件。它是一个菜单栏项,可跟踪您的模拟器应用程序并让您直接访问它们的文件夹和内容。太棒了。
【讨论】:
在 Xcode 版本 8.2.1 (8C1002) 上,我在以下路径中找到了安装在模拟器上的 .app 文件:~/Library/Developer/Xcode/DerivedData/[APPNAME]-[RANDOM HASH]/Build/Products/Debug-iphonesimulator
【讨论】:
如果您想自动获取位置或在脚本中使用该文件夹,您可以使用以下命令从正在运行的模拟器中获取精确位置:
xcrun simctl get_app_container booted my.app.id data
【讨论】:
cd `xcrun simctl get_app_container booted my.app.id data`
基于zsero答案
macOS 10.13.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 = "捆绑标识符"
解决方案1的特点
使用您的应用名称和代码创建一个 bash 脚本:
script_file_name = `basename "$0"`
open `xcrun simctl get_app_container booted $script_file_name data`
解决方案2的特点
【讨论】:
根据@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
?
【讨论】:
print(NSHomeDirectory()) 并复制路径。Shift+Cmd+G
1. 的替代方法是捕获断点并在控制台中执行po NSHomeDirectory()。
【讨论】:
viewDidLoad 中的ViewController。也许我应该写的不是“运行”而是别的东西。谢谢!
po NSHomeDirectory()
对于 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“Go To Folder...”Finder 提示符中。
包含旧语言版本的相关答案:Document Directory Path of iOS 8 Beta Simulator
【讨论】:
首先,从终端获取具有设备ID的模拟器列表
然后将设备 ID 放在路径下方。您将获得特定的模拟器文件系统
~/Library/Developer/CoreSimulator/Devices/{{deviceID}}
【讨论】: