5

在特定时间范围内(即 14 天)使 beta Mac OSX 应用程序过期然后要求用户更新(在 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 ),然后,当 beta 时间到期时,手动执行更新检查和/或重新激活自动检查。(见: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 回答