iPhoneアプリのアップグレードにsqliteのDBを展開します
質問
私がiPhoneアプリでデータソースとしてのsqliteを使用しています。私は、アプリケーションのアップグレードに関する二つの質問を持っています。
1)のデータは、非トランザクションのすべてのconfig /です。意味、それは読み取り専用です。私は/更新設定データを追加すると、私はアプリのアップグレードを発行します。ユーザーが更新iPhoneアプリを取得すると、元のGETをアンインストールしますか?その場合は、新しいDBの設定データが展開されますので、私は大丈夫ですよ。それがない場合、どのように私はデータを交換するのですか?
2)のデータは、configおよびトランザクションです。ユーザーを意味することは、DBにデータを保存することができます。アプリの新バージョンへのユーザーのアップグレードは、私は彼らの既存のデータを維持するが、すべての設定データを交換したいとき。私はこれを達成するために、アプリ内に保存されたINSERTやUPDATEスクリプトを持っている必要があるだろう推測しています。それについて移動するための効率的な方法は何ですか?
解決
cdespinosaは、シナリオ#1十分に説明しているので、私は2位に取り組むでしょう。
私はまだiPhoneでこれを行っていないが、デスクトップ環境でこれを処理するための最も簡単な方法は、別のデータベースに構成データを維持することです。あなたはかなり簡単に複数のデータベースに接続することができます。おそらく変更できるデータベースであるべき、メインのデータベースを開いて起動します。そして、このようになりますsqlite3_exec
文を、ATTACH
ます:
ATTACH 'filepath' AS config;
その時から、あなたはこのような何かを行うことができます:
SELECT * FROM UserTableName;
SELECT * FROM config.ConfigurationTableName;
あなたが構成データベースに書き込む場合、アプリケーションは、署名チェックを失敗し、起動しないことが私の理解だ、とSQLiteのバージョンは、iPhoneに付属の読み取り専用のフラグをサポートしていないのに十分古いです。このような理由から、あなたのバンドルに代わり1のコピーをサンドボックスに構成データベースファイルをコピーして開く必要があります。
(あなたは、もちろん、SQLを使用して、別のデータベースから値をコピーすることができます。しかし、あなたはすでにあなたのサンドボックスに構成データベース全体をコピーしている...あなたがする必要があります場合は...その後それはちょうどです余分なステップ。ただ、添付してください。)
私は他の誰かが詳細を提供することができます願っています。 :)
他のヒント
、古いアプリケーションバンドルがアンインストールされ、新しいアプリケーションバンドルがインストールされていますが、アプリケーションバンドルに関連付けられたユーザデータはそのままです。
だからあなたの選択肢は)a)のアプリケーションバンドルにデータを残して(それが自動的に置換されます)またはb)一方的に最初の実行上のユーザデータ領域にコピー(あなたが意図的にアップグレード時にそれを取り替えるでしょうになっていますます。
私はsqliteの-知識がある人に#2を残しておきますが、あなたはそれはあなたが実際にやっていることだ場合、「sqliteの」タグの代わりに「mysqlの」タグを使用したい場合があります。