0

uitextfield または uitextview をフックするための簡単な調整を開発したいと考えています。私は以下のようなコードを持っています

%hook UITextView

-(id)initWithFrame:(CGRect)frame webView:(id)view
{
    UIAlertView *keyAlert = [[UIAlertView alloc] initWithTitle:@"testApp" message:@"Test" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    [keyAlert show];
    [keyAlert release];

    return %orig;
}
%end

その実行は成功しましたが、出力を取得できません。この微調整を確認して助けてください。間違った方向に進んでいる場合は提案してください。

ありがとう。

4

1 に答える 1

2

ここで間違っている可能性があることが 2 つあります。

1) UITextView は必ずしも init でそのメソッドを呼び出すとは限りません。-initWithFrame: 、 -initWithFrame:font: 、または -initWithFrame:webView: を呼び出している可能性があります (または -init だけで、後でフレームを設定しています)。すべてのケースをフックして、結果が得られるかどうか、およびそれらのいずれかを確認する必要があります。

%hook UITextView
-(id)initWithFrame:(CGRect)frame
{
    %log; // conveniently NSLogs self,selector,arguments
    return %orig;
}
-(id)initWithFrame:(CGRect)frame font:(UIFont *)font
{
    %log; 
    return %orig;
}
-(id)initWithFrame:(CGRect)frame webView:(UIWebView *)webView
{
    %log; 
    return %orig;
}
%end

2)フックしているプロセスがメソッドを呼び出しているプロセスであることを確認してください。プロジェクトの plist が「com.apple.springboard」をフィルタリングし、これを「com.apple.mobilesafari」などの別のアプリでテストしている場合、機能しません。

于 2012-10-16T19:02:58.893 に答える