アップデートをリリースするのではなく、新しいバージョンをリリースします。誰かが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)で使用されていた場合はlastVersion
、1.2
最後のif
ブロックのみが実行されます。
アプリがバージョン1.1で使用されていたが、1.2をスキップして1.3に更新されたlastVersion
場合、1.1になり、最後の2つのif
ブロックが順番に実行されます。したがって、最初にデータを1.1から1.2に更新し、次に1.2から1.3に更新します。