在 iOS 模拟器中包含应用程序数据

Posted

技术标签:

【中文标题】在 iOS 模拟器中包含应用程序数据【英文标题】:Including application data in iOS simulator 【发布时间】:2017-12-06 22:49:30 【问题描述】:

我有一个应用程序将加速度计数据记录和存储为核心数据管理对象。我想在模拟器中包含一些保存的记录示例,以在不同平台上测试应用程序,因为模拟器无法从加速度计进行记录。我已经成功地将 *.xcappdata 文件包含在构建方案中,并且它可以在设备上运行,但模拟器获取结果为空。

Apple documentation 似乎表明在模拟器中包含应用程序数据是可能的,但我还没有让它工作。我已经测试了包括从一台设备保存到另一台设备上的数据,并且工作正常。我没有收到错误消息,只是一个空的提取。

我知道我可以在应用程序中以文本文件的形式包含数据,在启动时读取并格式化它们,并将它们保存为托管对象,但它会在项目中创建一堆附录代码和文件,我宁愿工作更干净。

【问题讨论】:

【参考方案1】:

您可以通过在终端窗口中运行xcrun simctl get_app_container <device> <bundle identifier> data 来查找应用程序的数据容器路径。设备可以是名称(引用)或 UDID(请参阅xcrun simctl list)。为此,必须运行相关的模拟器,并在其上安装应用版本。

右键单击 .appdata 文件以显示包的内容。将您从 AppData/* 中的文件夹中获得的核心数据文件复制到类似目录中,然后在模拟器中启动您的应用程序。

Xcode 目前没有 GUI 来管理模拟器中的容器,就像它对物理设备所做的那样。如果您不介意,请通过 https://bugreport.apple.com/ 在“设备和模拟器”窗口中提出增强请求。

【讨论】:

为了尝试这个解决方案,我想出了一些小的说明: 1. 您必须已经在相关模拟器上安装了您的应用程序(否则数据容器不存在)。 2. 相关模拟器必须正在运行(否则返回关机错误)。 3. 命令在终端中运行。不过,它似乎对我不起作用。我正确识别了数据容器,将 .appdata 放入其中(文件夹在每次安装时都会更改,但文件会被移动)。我将数据包含在方案中。应用中仍然没有数据。 顺便说一句,我确实根据您的建议向 Apple 提出了请求。 ID 是 36256124。 感谢您提交请求。您可能需要从 .appdata 文件夹中取出内容(例如 Documents 或 Caches 中的文件)并将其放入模拟器中您的应用程序的容器目录中。你不能只把“appdata”包放在那里。 相关文件位于 .appdata 内容的 AppData/Documents 文件夹中,名称分别为 Model.sqlite、Model.sqlite-shm、Model.sqlite-wal。【参考方案2】:

我刚刚发现,至少作为 Xcode 9.2/ios 11.2 模拟器的解决方法,您可以在启动参数中设置 (HOME/CFFIXED_USER_HOME)(我不确定这些是否真的有效)环境变量到 .xcappdata/AppData 的路径,如下所示(我使用 SRCROOT 相对路径只是为了说明可能性 - 它适用于任何其他类型的路径,如绝对路径等)。请注意,应用数据中的更改将直接反映在该文件夹中,因此如果您不希望这样,将其指向副本是有意义的。

【讨论】:

我在 Xcode 12.3 上没有这个运气。有什么想法吗? 它在那里不起作用。但是您可以尝试使用xcrun simctl install_app_data 来安装数据(您在模拟器中安装了您的应用程序之后)- 快速浏览一下它是否有效?在此处查看更多信息:github.com/lionheart/openradar-mirror/issues/… 好吧,假设我要使用xcrun simctl install_app_data... 如何根据选择的 .xctestplan 设置要使用的 .xcappdata?在我看来,构建脚本和预测试操作都不知道哪个测试计划处于活动状态。既然没有为每个 .xcappdata 制定单独的方案,我们能做什么......?

以上是关于在 iOS 模拟器中包含应用程序数据的主要内容,如果未能解决你的问题,请参考以下文章

通过 Eclipse 在 Android 应用程序中包含数据库文件

是否仍然需要在 iOS 应用程序中包含非 Retina 资产?

iOS 文档文件夹中包含文件的应用程序大小

在 iOS 上使用下载包中包含的 XIB/NIB 文件

在 ios 付费应用程序中包含应用内购买

如何在 iOS 中包含 phonegap 应用程序