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更新以后跳转系统设置的几种方式