我想在所有应用的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:)?