2013-04-21 58 views
0

在我的THEOS調整中,我掛鉤了一個類併成功調用了它的一個方法。有條件地調用THEOS/LOGOS中的Hook塊內的類

我的問題是,方法名稱更改後,我正在調整的應用程序的更新。

在舊版本中,所討論的方法帶有一個參數(方法:arg1),然後它得到更新以獲得2個參數(方法:arg1:arg2)。 現在我的代碼看起來像這樣

%hook className 

- (void)method:arg1 { 
    // 
} 

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

%end 

這種設置能正常工作在新的版本,但會導致應用程序在老版本崩潰。 有沒有一種方法可以根據bundle版本([[NSBundle mainBundle] objectForInfoDictionaryKey:@「CFBundleVersion」])有條件地調用這些方法之一?

我玩過#if和#endif,但沒有太遠。

您的幫助非常感謝。

回答

0

如果endif是宏編譯時,而不是像你需要的運行時。

我也在學習theos標誌,但我認爲你應該使用%group和%ctor {}作爲條件。

在這裏看到:How do I use the %group feature in Theos/Logos?

+0

感謝您抽出時間來回答。 我已經找到了答案,並查看了一些現有的開源「tweak.mm」文件,以查看其他人是如何使用它的。但從來沒有回答我自己的問題。 – boudarbalat 2013-05-13 11:58:16

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) 
 
}