2013-03-07 3 views
1

내 아이폰 앱이 jailbroken이고 내 앱이 앱 스토어에서 거부 된 경우 상관하지 않습니다.디바이스 핀 컨트롤러 클래스에는 어떤 권한/사용 권한이 필요합니까?

개인 API DevicePINController을 내 프로그램에 사용하고 싶습니다.

최근에 개인화 된 API 인 DevicePINController이 발견되었지만 제대로 작동하지 않습니다. 응용 프로그램이 실행되고 그 메소드를 제외한 모든 메소드는 아무 것도 수행하지 않습니다. 그 BOOL 메서드는 항상 false를 반환합니다. 설정 메소드는 아무 것도하지 않습니다.

디바이스 핀 컨트롤러에 필요한 권한 권한을 알고있는 사람이 있습니까?

편집 : CODE

id away = [[objc_getClass("DevicePINController") alloc]init]; 

    NSLog([away simplePIN] ? @"YES":@"NO"); 
    NSLog([away _isBlocked] ? @"YES":@"NO"); 
    NSLog([away _attemptValidationWithPIN:@"1234"] ? @"YES":@"NO"); 

    NSLog(@"%d",[away _unblockTime]); 
    NSLog(@"%@",[away blockedStateKey]); 
    NSLog(@"%@",[away blockTimeIntervalKey]); 
    NSLog(@"%@",[away failedAttemptsKey]); 
    NSLog(@"%d",[away pinLength]); 
    NSLog(@"%@",[away stringsBundle]); 

    NSLog(@"%@",[away stringsTable]); 

모든 메서드 호출이 잘못된 답을 반환합니다. 일부는 null 만 반환합니다. Bool은 항상 NO를 반환합니다.

+1

왜 작동하지 않는지 디버깅 할 수 있도록 실행중인 코드를 표시해야합니다. 감사. – Nate

+1

'away '가'nil'과 같은지 테스트 한 적이 있습니까? Objective-C에서 nil 객체에 * message *를 보내는 것은 아무 일도하지 않는다는 것을 기억하십시오.메소드가'BOOL'을 리턴한다고 가정하면,'BOOL'의 기본값은'NO'입니다. 따라서'away'가 nil이면 많은 NO를 되 찾을 것입니다. – Nate

+0

당신 말이 맞아요. 간과하지 않습니다.하지만 이건 개인용 API를 사용하는 올바른 방법이 아닙니까? – zzzzz

답변

1

따라서 첫 번째 문제는 nil 개체입니다. Objective-C에서 nil 개체로 메시지를 보내면 아무 일도하지 않게됩니다. 메서드가 BOOL을 반환한다고 가정하면 기본값 BOOLNO이므로 자리 비움이 없으면 NO 묶음을 다시 가져옵니다. (당신은 당신이 실제로했던 nil 값을 가지고 테스트 후)

사용하면 앱이 DevicePINController가 정의 된 라이브러리를 엽니 다 확인하기 필요성을 ... 당신의 후속 질문에 대답합니다. 그렇지 않으면 클래스가 무엇인지 모르고 인스턴스를 생성 할 수 없습니다. 따라서 objc_getClassnil 개체를 반환합니다. 그 클래스에 대한

이,이

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/PrivateFrameworks/Preferences.framework 

에서 발견 Preferences.framework에 정의되어

(분명히, 설치 디렉토리 및/또는 SDK 버전에 대한 조정) 당신이 중 하나를 추가 할 수 있습니다 Xcode에서 프로젝트로 이동 ->빌드 단계 ->링크 바이너리로 라이브러리을 추가하십시오. 위의 디렉토리는 Private Framework이기 때문에 탐색해야하며 초기 팝업 목록에는 표시되지 않습니다.

또는 동적 라이브러리로드 코드를 사용할 수 있습니다 : 나는 아이폰 OS 6.1 (탈옥)에이 시험

#import <objc/runtime.h> 
#include <dlfcn.h> 

void* libHandle = dlopen("/System/Library/PrivateFrameworks/Preferences.framework/Preferences", RTLD_LAZY); 

id away = [[objc_getClass("DevicePINController") alloc] init]; 
if (away == nil) { 
    NSLog(@"object is nil"); 
} else { 
    if ([away respondsToSelector: @selector(simplePIN)]) { 
     NSLog(@"object responds to selector!"); 
    } 
} 

close(libHandle); 

을하고 그것을 작동합니다.

그런데 PIN을 1234 이외의 것으로 변경하십시오. 내 수하물에 동일한 조합이 있습니다.)

+0

RTLD_LAZY 란 무엇입니까? 그것의 오류를 제공합니다. "선언되지 않은 식별자 RTLD_LAZY 사용" – zzzzz

+1

죄송합니다, 그 상수에 필요한'#include '이 하나 더 있습니다. 위의 내 업데이트 된 코드를 참조하십시오. – Nate

+0

핀으로 시도 유효성 검사 여전히 잘못된 대답을 반환합니다.하지만 내 pin 1234 – zzzzz

관련 문제