2013-04-21 3 views
0

THEOS의 개조에는 클래스를 연결하여 해당 메서드 중 하나를 성공적으로 호출하고 있습니다.THEOS/LOGOS 내의 Hook 블록 내의 클래스의 조건부 호출

내 문제는 내가 조정하는 응용 프로그램에 대한 업데이트 후에 메서드 이름이 변경된다는 것입니다.

이전 버전에서는 문제의 메소드가 하나의 인수 (메소드 : arg1)를 취한 다음 2 개의 args (메소드 : arg1 : arg2)를 사용하도록 업데이트되었습니다. 이

%hook className 

- (void)method:arg1 { 
    // 
} 

- (void)method:arg1:arg2 { 
    // 
} 

%end 

이 설정은 새 버전에서 잘 작동하지만 이전 버전에서 충돌 앱 원인 등에 지금 내 코드가 보인다. 번들 버전 ([[NSBundle mainBundle] objectForInfoDictionaryKey : @ "CFBundleVersion"])을 기반으로 이러한 메서드 중 하나를 조건부로 호출 할 수있는 방법이 있습니까?

저는 #if와 #endif를 사용했지만 멀리 가지 않았습니다.

귀하의 도움에 감사드립니다.

답변

0

endif가 매크로가 필요한 경우 런타임이 아닌 컴파일 타임입니다.

나는 로고도 배우고 있지만, % group과 % ctor {}를 조건으로 사용해야한다고 생각합니다.

는 여기를 참조하십시오 How do I use the %group feature in Theos/Logos?

+0

감사합니다. 저는 실제로 그 답변을 발견하고 기존의 오픈 소스 "tweak.mm"파일을보고 다른 사람들이 사용하는 방법을 정확하게 보았습니다. 그러나 내 자신의 질문에 답을하지 못했습니다. – boudarbalat

0

건배 대답 할 시간을내어

%group A 
 
%hook className 
 

 
- (void)method:arg1 { 
 
    // 
 
} 
 

 
%end 
 
%end 
 
%group B 
 
%hook className 
 

 
- (void)method:arg1:arg2 { 
 
    // 
 
} 
 

 
%end 
 
%end 
 
%ctor{ 
 
if([anObject respondsToSelctor:@selector(method:arg1:arg2)]){ 
 
%init(B) 
 

 
} 
 
else{ 
 
%init(A) 
 
}