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