IOS中的新线程调整?

时间:2015-11-21 04:29:01

标签: ios objective-c hook jailbreak tweak

我想在所有应用的tweak(dylib)中调用IOS系统委托(越狱),例如

- (void)locationManager:(CLLocationManager *)manager 
 didUpdateLocations:(NSArray *)locations

我尝试在tweak.xm中执行此操作:

void* Run(void *arg) {
    CLLocationManager *manager = (CLLocationManager *)arg;
    MY_LOG(@"thread->%@", manager);
    for (int i = 0; i < 1000; i++) {
        if (manager.delegate != nil) {
            MY_LOG(@"okay1");
            if ([manager.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]) {
                //...
            }   
        }
        sleep(1);
    }
    return NULL;
}

%hook CLLocationManager
- (id)init {
    CLLocationManager *manager = %orig;
    MY_LOG(@"CLLocationManager->init: %@", manager);
    pthread_t handle = 0;
    pthread_create(&handle, NULL, Run, (void*)manager);
    return manager;
}
%end

我的想法是:挂钩所有CLLocationManager的init函数,获取它的引用,并将它传递给一个新线程,在这些线程中,我可以调用它的委托方法......但是,这个调整在这里崩溃:

[manager.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]

如果删除上面的行,则调整工作正常,并打印日志“okay1”。 所以我的问题是:
1这个想法可行吗?如果是,如何改进它,让它不会崩溃并且运作良好?
2如果这个想法不好,如何实现目标(调用locationManager:didUpdateLocations:)?

0 个答案:

没有答案