며칠 동안 "테스트"를 거친 후 앱을 사용할 수 없도록하는 것이 가장 좋은 방법은 무엇입니까? Ad Hoc 배포를 사용하여 앱을 배포해야한다고 가정 해 보겠습니다. 사용자는 앱을 사용하지 못하도록 한 후 1 주일 만 테스트 할 수 있습니다.iOS 앱 (Ad Hoc 배포판)이 잠시 후 작동을 멈추도록하십시오.
미리 감사드립니다.
며칠 동안 "테스트"를 거친 후 앱을 사용할 수 없도록하는 것이 가장 좋은 방법은 무엇입니까? Ad Hoc 배포를 사용하여 앱을 배포해야한다고 가정 해 보겠습니다. 사용자는 앱을 사용하지 못하도록 한 후 1 주일 만 테스트 할 수 있습니다.iOS 앱 (Ad Hoc 배포판)이 잠시 후 작동을 멈추도록하십시오.
미리 감사드립니다.
내가 베타 테스트를 위해 응용 프로그램에서 시간 제한을 넣어 다음을 수행하십시오 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:
응용 프로그램 대리인 메서드에 넣었습니다.
사용자가 날짜를 다시 설정하고 앱을 계속 사용할 수 있습니다. 만료 시간에 삭제 한 리소스를 가질 수 있지만 완전히 다시 설치하면 리소스가 복원됩니다. 앱이 실시간을 얻기 위해 시간 서버를 호출하고 그 상태에서 스스로를 사용 중지하는 것이 가장 좋습니다. –
멋지다. 짧은 값 (5 분)으로 시도해 보도록하겠습니다. 그 후에 나는 당신의 대답을 수락하게되어 기쁘다. – aprunedamtz
@OwenHartnett 항상 균형이 잡힌다. 이 솔루션은 간단합니다. '[NSDate date]'호출을 NTP 서버 호출로 대체하는 것은 또 다른 복잡성입니다. – rmaddy
앱이 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
위험도는 무엇입니까? 베타 테스터가 진짜 물건을 사지 않을 것입니까? 그들 중 얼마나 많은 사람들이 있습니까? 그건 그렇고, 무료로 릴리스 후보를 확보하겠다는 약속은 베타 테스터에게 좋은 동기가된다는 것을 알게되었습니다. 즉, 인색하지 말고 사용하도록하십시오. –
Seva, 전적으로 동의합니다. 불행히도, 나는 그런 식으로 명령을 내렸다. – aprunedamtz
@SevaAlekseyev 사용자가 이전 베타를 계속 사용하고 최종 릴리스의 무료 사본을 제공하는 것과 큰 차이가 있습니다. 베타가 만료되는 타당한 이유가 있습니다. 나는 항상 내 테스터에게 최종 버전의 복사본을 무료로 제공하지만 오래된 베타 버전을 사용하는 것은 원치 않습니다. – rmaddy