【问题标题】:Is there any way to see the file system on the iOS simulator?有什么办法可以在 iOS 模拟器上查看文件系统?
【发布时间】:2011-09-22 18:18:24
【问题描述】:

有没有办法浏览当前正在运行或刚刚杀死的 iOS 模拟器的文件系统?如果有办法,我会满足于能够查看特定应用程序的文件。

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

【问题讨论】:

    标签: iphone ios nsfilemanager


    【解决方案1】:

    更新:自 iOS 8 起:

    ~/Library/Developer/CoreSimulator/Devices

    以前的位置是:

    ~/Library/Application Support/iPhone 模拟器

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

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

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

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

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

    【讨论】:

    • 要在 Lion 中查看 ~/Library 文件夹,您需要在终端中运行以下命令:chflags nohidden ~/Library/
    • 您也可以在查看Finder的Go菜单时按option键
    • 我使用 Finder 中的 ⌘⇧G。它比打开终端到 cd 更快。
    • 按住“选项”并在查找器的菜单栏中点击“开始”
    • 在随机哈希之间查找特定应用的文件几乎是不可能的,使用此命令实际获取应用的文件:xcrun simctl get_app_container booted my.app.id data
    【解决方案2】:

    打开程序“活动监视器”,搜索您的应用程序(只是应用程序名称,而不是模拟器),单击“信息”并打开“打开文件和端口”。复制第二个条目(类似于/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 即可查看应用程序的文件系统。
    • 很好的建议.. 真的希望有一个脚本或小实用程序来帮助解决这个问题.. 每个 iOS 设备都被模拟为一个完全不同的文件夹。. 文件夹结构到处都是新版本.. :(
    • 很好的答案,特别是当路由随着 Xcode 版本而改变时
    【解决方案3】:

    iOS 8

    设备

    ~/Library/Developer/CoreSimulator/Devices
    

    应用程序

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

    【讨论】:

    • 要确定您当前的{{Device Code}}},一种简单的方法是在Xcode 中打开所需的模拟器,然后在Finder 中按Date Modified~/Library/Developer/CoreSimulator/Devices/ 目录进行排序。最新的是您想要的。
    • 对于应用程序数据:~/Library/Developer/CoreSimulator/Devices/{{Device Code}}/data/Containers/Data/Application/{{Application Id}}
    • 其实可以在硬件>设备>管理设备中看到{{Device Code}}...
    • Thnx,这个答案在 2021 年仍然适用。
    【解决方案4】:

    有一个漂亮的应用程序也支持 XCode 6 模拟器。

    https://github.com/somegeekintn/SimDirs

    太棒了,使用它!

    【讨论】:

      【解决方案5】:

      旧帖子,但我认为值得一提的是SimPholders 来查找您的模拟器文件。它是一个菜单栏项,可跟踪您的模拟器应用程序并让您直接访问它们的文件夹和内容。太棒了。

      (这里的原始答案:https://stackoverflow.com/a/26557165/377384

      【讨论】:

      • 刚刚确认这个应用程序还活着并且在踢:simpholders.com。 . .而且效果很好!
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        xcrun simctl get_app_container booted my.app.id data
        

        【讨论】:

        • 非常有用。要将其直接更改为该目录,我运行了cd `xcrun simctl get_app_container booted my.app.id data`
        【解决方案8】:

        基于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的特点

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

        结果

        【讨论】:

        • 看来你需要在“Full Sample”字符串的末尾添加“Finder”。
        【解决方案9】:

        根据@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
        

        ?

        【讨论】:

          【解决方案10】:

          简单。快速地。 Xcode 10+。

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

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

          【讨论】:

          • 我在哪里运行第 1 步?
          • @CarsonH​​olzheimer 在您的代码中,例如在您的viewDidLoad 中的ViewController。也许我应该写的不是“运行”而是别的东西。谢谢!
          • 你也可以在断点处停止时在 lldb 中执行:po NSHomeDirectory()
          【解决方案11】:

          对于 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“Go To Folder...”Finder 提示符中。

          包含旧语言版本的相关答案:Document Directory Path of iOS 8 Beta Simulator

          【讨论】:

            【解决方案12】:

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

            1. instruments -s 设备
            2. xcrun simctl 列表

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

            【讨论】:

              猜你喜欢
              • 2011-02-14
              • 1970-01-01
              • 2015-03-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-02-28
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多