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

Including application data in iOS simulator

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

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

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

您可以在终端 window 中通过 运行 xcrun simctl get_app_container <device> <bundle identifier> data 找到应用程序的数据容器路径。设备可以是名称(带引号)或 UDID(参见 xcrun simctl list)。为此,相关的模拟器必须是 运行,并且安装了应用程序的一个版本。

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

Xcode 目前没有 GUI 来管理模拟器中的容器,就像管理物理设备一样。如果您不介意,请在 https://bugreport.apple.com/ 提交增强请求,在设备和模拟器 window 中请求此请求 window。

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