1

我使用rpetrich 的 theos创建了一个调整项目,并想挂钩 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 吗?

4

1 回答 1

2

NSURLSession是一个类集群,并且您正在挂钩不包含(或很少)代码的顶级类。

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

于 2014-11-14T09:47:19.833 回答