ベータ版のMacOSXアプリを特定の時間枠(つまり、14日)内に期限切れにしてから、ユーザーに(Cocoaで)更新するように依頼するための推奨される方法は何ですか?
ユーザーがアプリを起動するたびに日付の計算を行うだけですか?また、期限が切れた場合にSparkleフレームワークを使用して更新できるようにする方法はありますか?
ありがとう
特定の日に確実に期限切れになるベータ版の場合は、その日付をハードコーディングするだけで済みます。次に、次のように比較できます。
NSDate* expirationDate = [NSDate dateWithString: @"2012-03-24 10:45:32 +0600"];
if ([expirationDate compare:[NSDate date]] == NSOrderedAscending) {
//is expired -> present update recommendation
}
日付に柔軟に対応したい場合は、たとえば、サーバー上に日付文字列を含む.txtファイルを作成できます。これは簡単にロードできます:
NSString* dateString = [NSString stringWithContentsOfURL:myURL encoding:NSUTF8StringEncoding error:NULL];
NSDate* expirationDate = [NSDate dateWithString: dateString];
きらめきの更新プロンプトを自動的に表示するのであれば、それは確かに素晴らしいことです。自動更新チェックをオフにして(https://github.com/andymatuschak/Sparkle/wiki/make-preferences-uiを参照)、ベータ期間が終了したら、手動で更新チェックを実行するか、自動チェック。(https://github.com/andymatuschak/Sparkle/wiki/customizationを参照してください)
14日間のローリングベータを探している場合、つまり、アプリケーションの最初の実行から14日後にベータが期限切れになる場合は、userDefaultsを使用し、起動時に確認することをお勧めします。
具体的には、applicationDidFinishLaunchingの以下のコードからisBetaExpiredを呼び出します。
- (void)setDateForKey:(NSString*)key date:(NSDate*)date {
[[NSUserDefaults standardUserDefaults] setObject:date forKey:key];
}
- (NSDate*)getDateForKey:(NSString*)key {
return [[NSUserDefaults standardUserDefaults] objectForKey:key];
}
- (BOOL)isBetaExpired {
NSString* betaKey = @"v1.0BetaExpireDate";
double maxElapsed = 60 * 60 * 24 * 14; // 14 days
NSDate* betaDate = [self getDateForKey:betaKey];
if (!betaDate) {
// if we didn't have a beta start date already, set it to now
betaDate = [NSDate date];
[self setDateForKey:betaKey date:betaDate];
}
// determine how long it has been since the beta started
double elapsed = [betaDate timeIntervalSinceNow];
// check if it is expired
BOOL expired = (elapsed >= maxElapsed);
return expired;
}