2014-11-05 2 views
0

Я создал проект настройки с использованием rpetrich's theos и хотел связать методы NSURLSession, но крючки, похоже, не вызываются? Зачем? Это мой Tweak.xm код:Как подключить методы NSURLSession с помощью theos?

%hook NSURLSession 

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request 
          completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler 
{ 
    NSLog(@"testhook dataTaskWithRequest:completionHandler:"); 
    return %orig(request, completionHandler); 
} 

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request 
{ 
    NSLog(@"testhook dataTaskWithRequest"); 
    return %orig(request); 
} 

%end 

%hook NSMutableURLRequest 

+ (id)requestWithURL:(NSURL *)URL 
{ 
    NSLog(@"testhook NSMutableURLRequest"); 
    return %orig(URL); 
} 

%end 

Я добавил NSMutableURLRequest крюк, чтобы убедиться, что был загружен файл, и весь твик. Я могу проверить, что он делает крючок requestWithURL:, но не какой-либо из методов NSURLSession. Я тестирую код от NSURLSessionExample.

Что здесь не хватает? Кто-нибудь успешно подключил NSURLSession?

+0

Что такое фильтр для этой настройки? Кроме того: синтаксис, который вы используете для перехвата, - это Logos, а не Theos, поэтому вам следует называть эти вопросы вместо Theos. – Aehmlo

+0

@AehmloLxaitn Я использовал '{Filter = {Bundles = (" com.ravi.NSURLSessionExample "); }; } ', который является идентификатором связки тестового приложения. Крючок 'NSMutableRequest' работал так, я думаю, я получил фильтр правильно? Я добавил тэг 'logos'. Я все равно помещаю 'theos', так как' logos' является подкомпонентом 'theos'. – radj

ответ

1

NSURLSession - кластер классов, и вы подключаете класс верхнего уровня, который не содержит (или мало) кода.

Вы должны исследовать подклассы NSURLSession -потенциально путем регистрации реального класса объекта NSURLSession in-situ. В моем ограниченном тестировании я получил объект, класс которого действительно был назван __NSURLSessionLocal.

+0

Спасибо! Это сработало! Я буду применять эту инспекцию на месте в следующих классах, с которыми сталкиваюсь, что я не могу зацепить. С моей стороны это '__NSCFURLSession'. Это будет сложно, если угадать все возможные имена подкласса. – radj

+0

У меня есть еще один вопрос, связанный с этим. Крюк был успешным в кластере классов, но он не смог вызвать '% orig', но после того, как он положил крюк в имя реального класса, он работал безупречно. http://stackoverflow.com/questions/26602286/can-hook-nsurlsession-sessionwithconfigurationdelegatedelegatequeue-but-ca – radj

Смежные вопросы