【问题标题】:Where does the iPhone Simulator store its data?iPhone 模拟器在哪里存储它的数据?
【发布时间】:2010-11-09 15:13:15
【问题描述】:

我有一个用于存储应用程序数据的 SQLite 数据库,我可以通过查看它来调试我遇到的问题 - 但是 iPhone 模拟器通常在哪里存储它的数据?

【问题讨论】:

    标签: iphone ios-simulator


    【解决方案1】:

    最简单的方法。

    1. 在某处捕捉断点。 (或暂停程序执行(在调试区域点击暂停),如 cmets 中提到的 Najdan Tomić)

    2. 控制台窗口

      中输入po NSHomeDirectory()

    结果:

    (lldb) po NSHomeDirectory() /Users/usernam/Library/Developer/CoreSimulator/Devices/4734F8C7-B90F-4566-8E89-5060505E387F/data/Containers/Data/Application/395818BB-6D0F-499F-AAFE-068A783D9753

    【讨论】:

    • 要是我早点知道就好了。这应该是正确的答案
    • 我认为所有其他答案也是正确的。但这对我来说似乎很容易:-]
    • 你甚至可以在不捕获断点的情况下让它变得更容易。暂停程序执行(在调试区域点击暂停),然后在调试导航器中点击 main 然后在 lldb 窗口中执行 po NSHomeDirectory()
    【解决方案2】:

    适用于 Xcode6+/iOS8+

    ~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[AppID]/

    接受的答案对于 SDK 3.2 是正确的 - SDK 4 将该路径中的 /User 文件夹替换为它可以模拟的每个旧 iPhone OS/iOS 版本的数字,因此路径变为:

    ~/Library/Application Support/iPhone Simulator/[OS version]/Applications/[appGUID]/

    如果您同时安装了以前的 SDK,其 3.1.x 模拟器将继续将其数据保存在:

    ~/Library/Application Support/iPhone Simulator/User/Applications/[appGUID]/

    【讨论】:

    • cd ~/Library/Application\ Support/iPhone\ Simulator/
    • 与其在您的 GUID 的查找器中搜索,请注意下面 pisca46 的回答:只需在调试器中输入 po NSHomeDirectory()。剪切并粘贴到 Go>Go To Folder (Cmd-Shift-G)。
    • 我有点担心当我启动模拟器时它会显示 8.2,但是当我查看这个文件夹时,我看到的唯一版本号是 7.1。这让我担心我找错地方了。
    • 很难强调this answer 是多么简单、方便、不易出错和令人沮丧(正如上面麦克沃斯的评论所建议的那样)。您可以在AppDelegatedidFinishLaunchingWithOptions: 中简单地向NSLog 添加一行,或者您可以从调试器中po NSHomeDirectory()。无论哪种情况,复制字符串并在查找器中使用Cmd+Shift+G 打开它。这样做效果更好,因为您使用标准命令询问,而不是需要知道发生变化的事情。
    【解决方案3】:

    Xcode 在 2019+ Catalina, Xcode 11.0 中存储模拟器的地方

    运行时

    $ open ~/Library/Developer/CoreSimulator/Profiles/Runtimes

    例如:iOS 13.0watchOS 6.0 到目前为止,这些占用的空间最多。每个最高可达 ~5GB

    设备

    $ open ~/Library/Developer/CoreSimulator/Devices

    例如:iPhone XriPhone 11 Pro Max。这些通常每个

    说明

    模拟器分为运行时和设备。如果您运行$ xcrun simctl list,您可以看到概览,但如果您想找到这些模拟器的物理位置,请查看我显示的这些目录。

    删除您不支持的运行时是完全安全的。如果需要,您可以稍后重新安装。

    【讨论】:

      【解决方案4】:

      对于 macOS Catalina,我在以下位置找到了我的数据库:

      ~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db
      

      为了获得applicationId,我只是按修改日期对文件夹进行了排序,但我确信有更好的方法。

      【讨论】:

        【解决方案5】:

        对于不经常使用 Xcode 的 react-native 用户,你可以使用 find。打开终端并使用数据库名称进行搜索。

        $ find ~/Library/Developer -name 'myname.db'

        如果您不知道确切的名称,您可以使用通配符:

        $ find ~/Library/Developer -name 'myname.*'

        【讨论】:

          【解决方案6】:

          只需这样做:

          NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
          NSLog(@"%@", docDirPath);
          

          你会得到这样的想法:

          /Users/admin/Library/Developer/CoreSimulator/Devices/58B5B431-D2BB-46F1-AFF3-DFC789D189E8/data/Containers/Data/Application/6F3B985F-351E-468F-9CFD-BCBE217A25FB/Documents

          无论 XCode 的版本如何,您都会看到应用程序的文档文件夹。 (在 Finder 中使用“Go to Folder...”命令并指定路径“~/library”)。

          字符串路径的 Swift 版本:

          let docDirPath =
          NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                              .userDomainMask, true).first
          print(docDirPath)
          

          和文件夹网址:

          let docDirUrl =
              FileManager.default.urls(for: .documentDirectory,
                                       in: .userDomainMask).first
          print(docDirUrl)
          

          【讨论】:

          • 即将发布几乎相同的答案。此方法的优点是在任何版本的 iOS 模拟器上始终提供正确的路径。顺便说一句,如果你不想记录它,你也可以在调试器中复制 url 变量的值;)
          【解决方案7】:

          我与这个程序没有任何关系,但如果你想在查找器SimPholders 中打开任何这个程序,它会非常容易。

          【讨论】:

            【解决方案8】:

            如果模拟器正在运行,您可以获得任何应用容器的路径:

            xcrun simctl get_app_container booted <app bundle identifier>
            

            示例输出:

            $ xcrun simctl get_app_container booted com.example.app
            /Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app
            

            "booted" 可以替代大多数simctl 命令在任何需要设备UDID 的地方。

            您可以使用xcrun simctl list 查看设备列表,并使用xcrun simctl help 获取有关特定命令的帮助。

            更新:根据 Xcode 8.3 中的流行请求,您现在可以通过附加“app”、“data”、“groups”或应用组标识符来指定所需的容器类型。

            获取数据容器:

            $ xcrun simctl get_app_container booted com.example.app data
            

            【讨论】:

            • 优秀的一个。无需运行命令即可获取 device_id 和 appId。一步到位
            • 这个应该被接受,因为它是做这些事情的最“稳定”的方式。
            【解决方案9】:

            在模拟器中查找应用程序位置的最简单方法之一。用户“NSTemporaryDirectory()”

            步骤-

            1. 在应用内的任意位置应用断点并运行应用。
            2. 当应用程序在断点处停止时,在 Xcode 控制台中键入以下命令。

              po NSTemporaryDirectory()

            请参阅下图了解正确的见解

            现在您有了到临时文件夹的确切路径。您可以返回并查看所有与应用程序相关的文件夹。

            希望这也有帮助。快乐编码:)

            【讨论】:

            • 很酷的提示,但为什么不po NSHomeDirectory()
            【解决方案10】:

            还有另一种(更快?)方法可以在没有终端的情况下找到您的应用数据所在的位置:

            1. 在模拟器中启动应用程序
            2. 打开活动监视器
            3. 在 CPU 选项卡中查找应用的名称
            4. 双击它并打开“打开文件和端口”

            【讨论】:

            • NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 为您提供设备标识符
            • @oabarca 你得到的标识符与模拟器的deviceID或appFolder无关;我正在使用 Xcode 11.2.1 和 iOS 13.2.2
            【解决方案11】:

            看起来 Xcode 6.0 再次移动了这个位置,至少对于 iOS 8 模拟器而言。

            ~/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[AppID]

            【讨论】:

            • 在 ~/Library/Developer/CoreSimulator/Devices/[DeviceID]/ 中还有一个名为“device.plist”的 .plist 文件,如果您查看内部可以找到设备名称,例如 iphone-6或 iphone-5s。 deviceID 非常混乱,所以我认为您应该查看 .plist 文件。
            • 如何获取AppID?
            • 我通过使用 'ls -l' 并找出最近创建的应用程序文件来欺骗找到应用程序 ID。也可能对其他人有用。
            • 或在查找器中按“创建日期”排序以使应用程序位于列表顶部。
            【解决方案12】:

            要在模拟器上打开您在 xCode 中构建的应用所在的字典,请执行以下操作:

            1. 打开 Finder 窗口(笑脸图标)
            2. 然后单击 GO -> 转到文件夹
            3. 类型:~/Library/Application Support/iPhone Simulator
            4. 目录是不同模拟器的 iOS 版本
            5. 子目录是模拟器上安装的应用程序
            6. Documents 文件夹是用户生成的内容备份到 iCloud 的位置

            【讨论】:

              【解决方案13】:

              iOS 8 ~/Library/Developer/CoreSimulator/Devices/[设备ID]/data/Applications/[appGUID]/Documents/

              【讨论】:

              • 有什么方法可以获取设备ID?
              • @msmq 试试xcrun instruments -s
              • 如何在这里找到[appGUID]?
              • Date Modified排序。您当前的构建将(可能)是最新的。
              • Xcode 和模拟器中都没有“硬件”菜单。
              【解决方案14】:

              适用于 iOS 8

              要找到 Documents 文件夹,您可以在 Documents 文件夹中写入一个文件:

              NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
              NSString *documentsDirectory = [paths objectAtIndex:0];
              NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
              NSString *content = @"Apple";
              [content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];
              

              比如说,didFinishLaunchingWithOptions

              然后你可以打开一个终端并找到文件夹:

              $ find ~/Library -name Words.txt
              

              【讨论】:

                【解决方案15】:

                使用 Xcode 5,您可以使用以下代码:

                #import <Foundation/NSFileManager.h>
                

                和:

                NSString *homeDir = NSHomeDirectory();
                NSLog(@"%@",homeDir);
                

                结果可能如下所示:

                "/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"
                

                hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh 是一些标识您的 iOS 应用的十六进制字符串。

                【讨论】:

                • 这也适用于调试器:po NSHomeDirectory()
                【解决方案16】:

                对于 Xcode 4.6,它存储在以下路径中...

                /Users/[currentuser]/Library/Application Support/iPhone Simulator/6.1/Applications/

                要以编程方式了解它,请使用以下代码

                  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
                

                【讨论】:

                • 斯威夫特print("path: \(NSBundle.mainBundle().bundlePath)")
                【解决方案17】:

                您可以尝试使用以下代码

                NSString *fileName = @"Demo.pdf";
                    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                    NSString *documentsDirectory = [paths objectAtIndex:0];
                    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
                    NSLog(@"File path%@",pdfFileName);
                

                【讨论】:

                  【解决方案18】:

                  在 Lion 上,Users/[username]/Library 是隐藏的。

                  要简单地在 Finder 中查看,请单击屏幕顶部的“开始”菜单并按住“alt”键以显示“库”。

                  点击“图书馆”,可以看到之前隐藏的图书馆文件夹。

                  之前的建议:

                  使用

                  chflags nohidden /users/[username]/library
                  

                  在终端中显示文件夹。

                  【讨论】:

                  • 然后您可以在以下位置找到它:~/Library/Application Support/iPhone Simulator/[OS version]/Applications/[appGUID]/
                  • 这对普通用户来说是一个有趣的建议,但在我看来,iOS / OS X 开发人员需要定期访问库,因此不希望再次隐藏它。 (话又说回来,我猜很多开发人员使用终端而不是 Finder?)
                  【解决方案19】:

                  在 iOS 5 中:

                  /Users/[用户名]/Library/Application Support/iPhone Simulator/5.0/Applications/[AppGUID]/

                  【讨论】:

                    【解决方案20】:

                    如果有人在 Lion 中仍然遇到这个问题,有一篇很棒的文章,其中包含 19 个不同的技巧来查看您的 ~/Library 目录。在这里找到 Dan Frakes 的文章http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

                    记住模拟器的目录如下

                    ~/Library/Application Support/iPhone Simulator/User/

                    【讨论】:

                      【解决方案21】:

                      找到了:

                      ~/Library/Application Support/iPhone Simulator/User/
                      

                      【讨论】:

                      • 如何搜索:在Finder中按CMD+SHIFT+G
                      • 请参阅下面 dsmudger 的更新回复,目前是正确答案。
                      猜你喜欢
                      • 1970-01-01
                      • 2012-07-30
                      • 1970-01-01
                      • 2011-08-04
                      • 2010-12-03
                      • 2017-11-04
                      • 2016-08-03
                      • 1970-01-01
                      相关资源
                      最近更新 更多