3

アプリのバージョン1.0をリリースしました。バージョン1.1には、ある種の移行コードが含まれている可能性があります。議論のために、コアデータ属性を更新するとします-すべての姓は大文字に変換されます。このコードは、バージョン1.1での最初の起動時に実行します。

以降のすべてのバージョンでこのコードを保持する必要がありますか?ユーザーが1.0をスキップし、1.2がリリースされたときにのみ更新する場合、1.1が最初に自動的に適用されますか?または、すべてのバージョンの姓を永久に更新するかどうかを確認し続ける必要がありますか?

4

2 に答える 2

2

アップデートをリリースするのではなく、新しいバージョンをリリースします。誰かが1.0から1.2に更新し、1.1をスキップした場合、それがまさに起こっていることです。1.1がインストールまたは実行されることはありません。

編集:

これは、更新を管理するための非常に簡単な方法の提案です。おそらく最もエレガントなものではありませんが、機能します。

NSString *lastVersion = [[NSUserDefaults standardUserDefaults]
                         stringForKey:@"LastVersion"];
NSString *currentVersion = [[NSBundle mainBundle]
            objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

if ([self version:lastVersion isSmallerThanVersion:@"1.1"]) {
    // update from 1.0 to 1.1 here.
}
if ([self version:lastVersion isSmallerThanVersion:@"1.2"]) {
    // update from 1.1 to 1.2 here.
}
if ([self version:lastVersion isSmallerThanVersion:@"1.3"]) {
    // update from 1.2 to 1.3 here.
}

[[NSUserDefaults standardUserDefaults]
  setObject:currentVersion forKey:@"LastVersion"];

この例では、4つのバージョン(1.0、1.1、1.2、1.3)があり、1.3が最新のリリースです。

これは、アプリを起動するたびに実行します。アプリを更新するとアプリも終了するため、更新の可能性の後にこれが実行されると想定できます。

基本的に、ユーザーがこのデバイスで使用した最後のバージョンをユーザーのデフォルトからロードします。アプリが初めて起動した場合、既知の以前のバージョンはなく、更新ルーチンは実行されず、現在のバージョン(1.3)が最後に使用されたバージョンとして保存されます。

アプリが以前のバージョン(1.2)で使用されていた場合はlastVersion1.2最後のifブロックのみが実行されます。

アプリがバージョン1.1で使用されていたが、1.2をスキップして1.3に更新されたlastVersion場合、1.1になり、最後の2つのifブロックが順番に実行されます。したがって、最初にデータを1.1から1.2に更新し、次に1.2から1.3に更新します。

于 2012-11-18T01:20:00.597 に答える
2

1.0を超えるすべてのバージョンの移行コードを保持する必要があります

于 2012-11-18T01:24:19.080 に答える