2012-01-07 2 views
1

몇 가지 특정 제한 시간이 지나면 만료되는 응용 프로그램을 만들고 있습니다. 사용자가 메소드에 액세스 할 수 없으며 사용자가 다운로드 한 애플리케이션을 구매하거나 등록해야 함을 의미합니다. 사용자는 응용 프로그램을 열 수 있지만 시간 제한 사용자는 응용 프로그램 기능을 사용할 수 없습니다. 이것이 가능합니까? 모든아이폰에서 특정 시간에 만료되는 응용 프로그램을 만드는 방법은 무엇입니까?

+0

사과가 마음에 들지 않을 것이라고 생각합니다. – Dani

+0

허용되지 않습니다. 그것은 거절 당할 것이다. –

+0

앱 스토어에는 허용되지 않지만 임시 배포를 사용하는 앱 또는 내부 엔터프라이즈 앱의 베타 테스트에서이 작업을 수행하는 경우 이는 합당한 질문입니다. – progrmr

답변

-1

첫째 : 당신의 개인 API에없는 기능 중 하나를 사용하는 경우

애플이 응용 프로그램을 거부하지 않을 것입니다.

특정 시간 후에 응용 프로그램을 차단하려면 논리적으로 구현할 수 있습니다.

내용 응용 프로그램이 장치에 다운로드되면 응용 프로그램 기본 설정 (사용자 기본값)에 현재 시간 &을 저장하십시오. 이 옵션에서 사용자가 응용 프로그램을 제거하면 & 응용 프로그램을 다시 설치하면 환경 설정이 재설정됩니다.

그래서 iOS 기기가 재설정되지 않을 때까지 제거되지 않는 다양한 장소가 있습니다 (키 체인처럼). Apple은 키 체인에 데이터를 저장하는 메소드를 제공합니다.

다음은 사용자가 응용 프로그램을 열 때마다 응용 프로그램의 저장된 시간으로 현재 시간을 확인해야합니다.

한도를 확인하면 사용자가 응용 프로그램을 사용하게하거나 경고를 던져 볼 수 있습니다. & 원하는 작업을 수행하십시오.

도움이 될 수 있기를 바랍니다.

+0

첫 줄은 노골적으로 거짓입니다. Apple은 응용 프로그램의 수락 또는 거절을 안내하는 여러 가지 규칙을 가지고 있습니다. 비공개 API의 사용은 그 중 하나 일뿐입니다. – duskwuff

+1

@Duskwuff : 나는 같은 것을 썼다 !!!!!! 라인을주의 깊게 읽으십시오. – iCreative

+1

iOS 리뷰 가이드 라인 섹션 2.9 : "베타 ','데모 ','시험판 '또는'테스트 '버전의 앱은 거부됩니다. – duskwuff

1

저는 컴파일 할 때마다 타임 스탬프가있는 파일을 만드는 빌드 스크립트를 사용하여이 작업을 수행했습니다. 파일은 빌드 대상의 일부이며 앱과 함께 배포됩니다. 앱이 실행되면 코드가 파일의 타임 스탬프를 확인하고 앱이 지나친 시간이 지나면 앱이 경고 페이지를 표시하고 다른 작업은 수행하지 않습니다.

이제 면책 조항. 필자는 엔터프라이즈 버전의 개발 버전에서이 시스템을 사용합니다. 이렇게하면 오래된 개발 버전이 어지럽히 지 않게되어 사람들이 오래된 개발 버전을 가져 오지 못하게되고 최근 개발 버전이라고 생각하지 않게됩니다. 나는 프로덕션 배포 응용 프로그램에서이 시스템을 사용하는 것을 결코 생각하지 않습니다.

편집 : 요청마다 내가 사용하는 코드와 스크립트가 추가되었습니다. 그것은 훌륭하지 않지만 작동합니다. 누구든지 개선하고 싶다면 더 나은 버전을 보게되어 기쁩니다. 나는 바로 "컴파일 소스"작업 내가 사용하는 오브젝티브 C 코드 내가 프로젝트의 공정한 걸쳐 사용하는 경향이 코드의 정적 라이브러리에있는

builddate=`date` 

# if BuildDateString doesn't exist, add it 
/usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "$TARGET_BUILD_DIR/$INFOPLIST_PATH" 
# and if BuildDateString already existed, update it 
/usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "$TARGET_BUILD_DIR/$INFOPLIST_PATH" 

전에 실행하도록 설정 스크립트가 있습니다. 또한 TSExpiredViewController이라는 간단한 UIViewController을 포함하여 필요한 경우 만료 된 메시지를 표시합니다.

+ (void)expireAppAfterOneWeek { 
    [self expireAppAfter:604800]; 
} 

+ (void)expireAppAfter:(NSTimeInterval)secondsAfterBuilds { 
    id<UIApplicationDelegate> appDelegate = [UIApplication sharedApplication].delegate; 

    NSString *buildDateString = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"BuildDateString"]; 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    df.dateFormat = @"EEE MMM dd kk:mm:ss zz yyyy"; 
    NSDate *buildDate = [df dateFromString:buildDateString]; 

    if (-[buildDate timeIntervalSinceNow] > secondsAfterBuilds) { 
     appDelegate.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     TSExpiredViewController *viewController = [[TSExpiredViewController alloc] init]; 
     appDelegate.window.rootViewController = viewController; 
     [appDelegate.window makeKeyAndVisible]; 
    } 
} 
관련 문제