我已被委托更新原生iOS应用程序,但由于我们还要将其发布到其他平台,我们正在使用Appcelerator的Titanium编写新版本。
当前的应用程序使用SQLite数据库来存储用户信息。 当用户将应用程序更新为新应用程序时,如何访问现有的SQLite数据库? 我们不想丢失任何数据。我假设我可以访问旧数据库,然后创建到新数据库的迁移。
测试这个的最佳方法是什么?我可以安装具有相同应用ID或捆绑ID的测试应用来模拟更新吗?
谢谢, 汤姆
答案 0 :(得分:2)
只要先前的开发人员观察到Apple存储用户信息数据库的规则,这应该是可能的(虽然它可能会变得棘手)。
只要你拥有相同的软件包ID并增加版本,就可以在测试期间覆盖现有应用程序以模拟更新(确保使用Ad-hoc分发),这将保留用户文件地点。从那里,当您第一次加载您的应用程序时,以通常的方式加载该数据库:
// Set a property so you do this only one time when they first update
if(Ti.App.Properties.getBool('isDatabaseMigrated', false)) {
// See if the DB file exists (this may be a fresh install not an update)
var dbfile = Ti.Filesystem.getFile(Ti.Filesystem.applicationSupportDirectory+'/database', 'nameOfDB.sql');
if(dbfile.exists()) {
// Open the DB
var db = Ti.Database.open('nameOfDB');
.... Now do your thing ....
db.close();
}
// Set flag so we only check this once
Ti.App.Properties.setBool('isDatabaseMigrated', true);
}
iOS有一个保存数据库文件的特定目录,以及最新版本的Titanium migrates any old DB's to this directory。