天天看点

iOS10 跳转系统wifi列表

iOS10 之后不允许跳转到任何系统设置页面,但是可以通过私有API跳转到系统设置页面,私有方法如下(慎用):

NSURL*url=[NSURL URLWithString:@"Prefs:root=WIFI"];
Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace");
[[LSApplicationWorkspace performSelector:@selector(defaultWorkspace)] performSelector:@selector(openSensitiveURL:withOptions:) withObject:url withObject:nil];
           

可利用ASCII值进行拼装组合或者对私有方法名加密来绕过审核,ASCII值进行拼装组合的方法如下:

-(NSString *) getDefaultWork{
   NSData *dataOne = [NSData dataWithBytes:(unsigned char []){,,,,,,,,,,,,,,,} length:];
    NSString *method = [[NSString alloc] initWithData:dataOne encoding:NSASCIIStringEncoding];
    return method;
}

-(NSString *) getWifiMethod{
    NSData *dataOne = [NSData dataWithBytes:(unsigned char []){, , , , , , , , ,, ,,,,,} length:];
    NSString *keyone = [[NSString alloc] initWithData:dataOne encoding:NSASCIIStringEncoding];
    NSData *dataTwo = [NSData dataWithBytes:(unsigned char []){,,,,,,,,,,} length:];
    NSString *keytwo = [[NSString alloc] initWithData:dataTwo encoding:NSASCIIStringEncoding];
    NSString *method = [NSString stringWithFormat:@"%@%@%@%@",keyone,@":",keytwo,@":"];
    return method;
}
NSString * defaultWork = [self getDefaultWork];
NSString * wifiMethod = [self getWifiMethod];        
NSURL*url=[NSURL URLWithString:@"Prefs:root=WIFI"];
Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace");
[[LSApplicationWorkspace  performSelector:NSSelectorFromString(defaultWork)]   performSelector:NSSelectorFromString(wifiMethod) withObject:url     withObject:nil];
           

注意:苹果的私有方法一旦修改,我们必须重新进行修改

参考资料:

关于iOS 10,跳转系统设置问题

聊聊iOS 10更新以后跳转系统设置的几种方式