5

ベータ版のMacOSXアプリを特定の時間枠(つまり、14日)内に期限切れにしてから、ユーザーに(Cocoaで)更新するように依頼するための推奨される方法は何ですか?

ユーザーがアプリを起動するたびに日付の計算を行うだけですか?また、期限が切れた場合にSparkleフレームワークを使用して更新できるようにする方法はありますか?

ありがとう

4

2 に答える 2

6

特定の日に確実に期限切れになるベータ版の場合は、その日付をハードコーディングするだけで済みます。次に、次のように比較できます。

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を参照してください)

于 2012-10-26T14:52:19.683 に答える
0

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;
}
于 2012-10-26T15:30:19.517 に答える