在特定时间范围内过期Mac OSX应用程序并要求用户更新

Mav*_*ick 5 macos cocoa

什么是在特定时间范围内(即14天)过期测试版Mac OSX应用程序,然后要求用户更新(在Cocoa中)?

我每次用户启动应用程序时都会进行日期计算吗?另外,如果时间范围已过期,有没有办法使用Sparkle框架进行更新?

谢谢

cod*_*nd1 5

我认为对于一个肯定会在给定日期到期的测试版,您可以只对该日期进行硬编码.然后你可以比较像:

NSDate* expirationDate = [NSDate dateWithString: @"2012-03-24 10:45:32 +0600"];
if ([expirationDate compare:[NSDate date]] == NSOrderedAscending) {
    //is expired -> present update recommendation
}
Run Code Online (Sandbox Code Playgroud)

如果您希望灵活处理日期,例如在服务器上创建一个包含日期字符串的.txt文件.这可以很容易地加载:

NSString* dateString = [NSString stringWithContentsOfURL:myURL encoding:NSUTF8StringEncoding error:NULL];
NSDate* expirationDate = [NSDate dateWithString: dateString];
Run Code Online (Sandbox Code Playgroud)

如果您自动呈现闪烁的更新提示,那肯定会很好.您可以关闭自动更新检查(请参阅:https://github.com/andymatuschak/Sparkle/wiki/make-preferences-ui),然后,当测试版时间到期时,手动执行更新检查和/或重新激活自动检查.(参见:https://github.com/andymatuschak/Sparkle/wiki/customization)


Sco*_*len 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;
}
Run Code Online (Sandbox Code Playgroud)