0

在几天的“测试”之后,防止应用程序被使用的最佳方法是什么?假设我必须使用 Ad Hoc 分发来分发我的应用程序,用户只有一周的测试时间,之后他应该无法使用该应用程序。

提前致谢。

4

2 回答 2

3

我执行以下操作以在应用程序中设置 Beta 测试的时间限制:

#ifdef BETA
    NSString *compileDate = [NSString stringWithFormat:@"%s %s", __DATE__, __TIME__];
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"MMM d yyyy HH:mm:ss"];
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    [df setLocale:usLocale];
    NSDate *aDate = [df dateFromString:compileDate];
    NSDate *expires = [aDate dateByAddingTimeInterval:60 * 60 * 24 * 7]; // 7 days
    NSDate *now = [NSDate date];
    if ([now compare:expires] == NSOrderedDescending) {
        NSAssert(0, @"Sorry, expired");
    }
#endif

BETA我只为临时构建设置的编译标志在哪里。

我将此代码放在applicationWillEnterForeground:应用程序委托方法中。

于 2013-09-26T18:10:15.537 回答
0

每次 Xcode 构建应用程序时,它都会Info.plist在应用程序的包中创建一个文件。我们可以从该文件中获取修改日期,以确定它自构建以来已经过了多长时间。

#if BETA
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    const NSTimeInterval kExpirationAge = 60 * 60 * 24 * 7;   // 7 days

    NSString* infoPlistPath = [[NSBundle mainBundle] pathForResource: @"Info" ofType: @"plist"];
    NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:infoPlistPath error:NULL];
    NSDate* buildDate = (NSDate*) [fileAttributes objectForKey:NSFileModificationDate];
    const NSTimeInterval buildAge = -[buildDate timeIntervalSinceNow];

    if (buildAge > kExpirationAge) {
        UIAlertView* av = [[UIAlertView alloc] initWithTitle:@"App Expired"
                                                     message:@"This version is expired.  Please update to the latest version of this app."
                                                    delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [av show];

        // after 10 seconds the app exits
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
            exit(0);
        });
    }
}
#endif
于 2014-06-19T01:01:47.427 回答