核心数据数据库位置调试v发布版本

时间:2018-04-26 07:04:36

标签: swift core-data

我一直在开发我的第一个SWIFT MacOS应用程序,它使用Core Data。我刚刚完成了我的第一个发布版本,发现它仍然指向与我的调试版本相同的SQL Lite数据库。由于我没有指定它的位置,我假设(错误地)它将在不同的位置发布。

如何指定数据库核心数据的位置?有没有办法自动为Debug和Release设置不同的位置?我希望能够在同一台机器上运行发布和调试。

2 个答案:

答案 0 :(得分:0)

在iOS中,您的CoreData数据库文件通常位于沙盒应用中的Library/Application Support内。在iOS 10之前,它曾在Documents文件夹中。

在启用了沙盒的MacOS上,它通常位于~/Library/Containers/<app_bundle_id>/Data/Library/Application Support/<app_target_name>

根据您的需要,您可以在设置CoreData堆栈时为每个持久性存储选择不同的位置。

但是,我没有看到任何理由为不同的构建配置选择不同的商店位置。这不是构建配置的目的。您的数据库最终会完全相同 - 它不会受到构建设置的影响。

我也不建议出于任何目的使用不同的商店位置 - 除非您执行单元测试。

但是,您可以设置某些影响CoreData行为的环境标志,例如启用线程违规断言。您可以在Xcode Schemes中执行此操作 - 而不是在构建设置中执行此操作。请注意,一个方案使用某个构建配置,比如Release或Debug,并且方案的名称可以相同,这通常会造成混淆。

您应确保在构建版本时未启用可在Scheme中设置的这些有用的断言。 ;)

答案 1 :(得分:0)

我通常做的是拥有应用程序的单独调试版和发行版。然后我可以同时安装在同一台设备上。持久性存储(和其他文件)使用相同的文件名,但由于它们是单独的应用程序,因此数据是分开的。

您可以通过在Xcode中复制应用目标并进行一些更改来实现此目的。在目标列表中,右键单击您的应用并选择“复制”。给新的一个类似但略有不同的名字。例如,可以在应用程序的名称中添加“-dev”以表明它是开发目标。

您还需要更改应用包的ID和显示名称。捆绑包ID告诉iOS它是一个不同的应用程序,显示名称可以明显显示您正在点击的应用程序。如果您愿意,还可以添加其他应用程序图标。

现在,您可以构建两个版本的应用程序并在同一设备上安装它们。开发版本可以包含您正在处理的任何代码,这些代码可能仍然有点破碎,发布版本可以是任何已准备好发布的版本或从App Store下载的版本。