2013-09-26 1 views
0

며칠 동안 "테스트"를 거친 후 앱을 사용할 수 없도록하는 것이 가장 좋은 방법은 무엇입니까? Ad Hoc 배포를 사용하여 앱을 배포해야한다고 가정 해 보겠습니다. 사용자는 앱을 사용하지 못하도록 한 후 1 주일 만 테스트 할 수 있습니다.iOS 앱 (Ad Hoc 배포판)이 잠시 후 작동을 멈추도록하십시오.

미리 감사드립니다.

+0

위험도는 무엇입니까? 베타 테스터가 진짜 물건을 사지 않을 것입니까? 그들 중 얼마나 많은 사람들이 있습니까? 그건 그렇고, 무료로 릴리스 후보를 확보하겠다는 약속은 베타 테스터에게 좋은 동기가된다는 것을 알게되었습니다. 즉, 인색하지 말고 사용하도록하십시오. –

+0

Seva, 전적으로 동의합니다. 불행히도, 나는 그런 식으로 명령을 내렸다. – aprunedamtz

+0

@SevaAlekseyev 사용자가 이전 베타를 계속 사용하고 최종 릴리스의 무료 사본을 제공하는 것과 큰 차이가 있습니다. 베타가 만료되는 타당한 이유가 있습니다. 나는 항상 내 테스터에게 최종 버전의 복사본을 무료로 제공하지만 오래된 베타 버전을 사용하는 것은 원치 않습니다. – rmaddy

답변

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 

.

이 코드를 applicationWillEnterForeground: 응용 프로그램 대리인 메서드에 넣었습니다.

+0

사용자가 날짜를 다시 설정하고 앱을 계속 사용할 수 있습니다. 만료 시간에 삭제 한 리소스를 가질 수 있지만 완전히 다시 설치하면 리소스가 복원됩니다. 앱이 실시간을 얻기 위해 시간 서버를 호출하고 그 상태에서 스스로를 사용 중지하는 것이 가장 좋습니다. –

+0

멋지다. 짧은 값 (5 분)으로 시도해 보도록하겠습니다. 그 후에 나는 당신의 대답을 수락하게되어 기쁘다. – aprunedamtz

+0

@OwenHartnett 항상 균형이 잡힌다. 이 솔루션은 간단합니다. '[NSDate date]'호출을 NTP 서버 호출로 대체하는 것은 또 다른 복잡성입니다. – rmaddy

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