如何使用theos挂钩NSURLSession方法?

时间:2014-11-05 06:55:10

标签: iphone jailbreak nsurlsession theos logos

我使用rpetrich's theos创建了一个tweak项目,并希望挂钩NSURLSession方法,但钩子似乎不会被调用?为什么?这是我的Tweak.xm代码:

%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?

1 个答案:

答案 0 :(得分:2)

NSURLSession是一个类集群,你正在连接不包含(或稀少的)代码的顶级类。

您应该调查NSURLSession的子类 - 可能是通过原位记录NSURLSession对象的真实类。在我的有限测试中,我收到了一个对象,其类名为__NSURLSessionLocal