天天看點

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更新以後跳轉系統設定的幾種方式