iOS 10 跳转系统设置
苦心人天不负, 为了项目终于把 iOS 10 跳转系统设置的方法给搞定了, 很欣慰.
http://www.cnblogs.com/lurenq/p/6189580.html
方法一:
iOS 10 跳转系统设置的字段
电池电量Prefs:root=BATTERY_USAGE通用设置Prefs:root=General存储空间Prefs:root=General&path=STORAGE_ICLOUD_USAGE/DEVICE_STORAGE蜂窝数据Prefs:root=MOBILE_DATA_SETTINGS_IDWi-Fi 设置Prefs:root=WIFI蓝牙设置Prefs:root=Bluetooth定位设置Prefs:root=Privacy&path=LOCATION辅助功能Prefs:root=General&path=ACCESSIBILITY关于手机Prefs:root=General&path=About键盘设置Prefs:root=General&path=Keyboard显示设置Prefs:root=DISPLAY声音设置Prefs:root=SoundsApp Store 设置Prefs:root=STORE墙纸设置Prefs:root=Wallpaper打开电话Mobilephone://世界时钟Clock-worldclock://闹钟Clock-alarm://秒表Clock-stopwatch://倒计时Clock-timer://打开相册Photos://
// 此方法审核会被拒
Guideline 2.5.1 - Performance - Software Requirements Your app uses or references the following non-public APIs: LSApplicationWorkspace
Guideline 2.5.1 - Performance - Software Requirements
Your app uses or references the following non-public APIs:
LSApplicationWorkspace
The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.
Next Steps
To resolve this issue, please revise your app to remove any non-public APIs. If you have defined methods in your source code with the same names as the above-mentioned APIs, we suggest altering your method names so that they no longer collide with Apple's private APIs to avoid your app being flagged in future submissions.
Additionally, if you are using third-party libraries, please update to the most recent version of those libraries. If you do not have access to the libraries' source, you may be able to search the compiled binary using the "strings" or "otool" command line tools. The "strings" tool can output a list of the methods that the library calls and "otool -ov" will output the Objective-C class structures and their defined methods. These tools can help you narrow down where the problematic code resides. You could also use the "nm" tool to verify if any third-party libraries are calling these APIs.
+ (void)encryptMethodGoToSystermSetting:(NSString *)setting {
NSString *encryptWork = [self encryptDefaultWork];
NSString *encryptWiFi_Method = [self getGoToWIFI_Method];
NSURL*url = [NSURL URLWithString:setting];
Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace");
[[LSApplicationWorkspace performSelector:NSSelectorFromString(encryptWork)]
performSelector:NSSelectorFromString(encryptWiFi_Method)
withObject:url
withObject:nil];
}
- (void)encryptMethodGoToSettingWiFi {
NSString *encryptWork = [self encryptDefaultWork];
NSString *encryptWiFi_Method = [self getGoToWIFI_Method];
NSURL*url = [NSURL URLWithString:@"Prefs:root=WIFI"];
Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace");
[[LSApplicationWorkspace performSelector:NSSelectorFromString(encryptWork)]
performSelector:NSSelectorFromString(encryptWiFi_Method)
withObject:url
withObject:nil];
}
// 利用ASCII值进行拼装组合方法
-(NSString *)encryptDefaultWork{
NSData *data_encrypted = [NSData dataWithBytes:(unsigned char []){0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x57,0x6f,0x72,0x6b,0x73,0x70,0x61,0x63,0x65} length:16];
NSString *method = [[NSString alloc] initWithData:data_encrypted encoding:NSASCIIStringEncoding];
return method;
}
-(NSString *)getGoToWIFI_Method{
NSData *data_encrypted_one = [NSData dataWithBytes:(unsigned char []){0x6f, 0x70, 0x65, 0x6e, 0x53, 0x65, 0x6e, 0x73, 0x69,0x74, 0x69,0x76,0x65,0x55,0x52,0x4c} length:16];
NSString *key_encrypted_one = [[NSString alloc] initWithData:data_encrypted_one
encoding:NSASCIIStringEncoding];
NSData *data_encrypted_Two = [NSData dataWithBytes:(unsigned char []){0x77,0x69,0x74,0x68,0x4f,0x70,0x74,0x69,0x6f,0x6e,0x73} length:11];
NSString *key_encrypted_two = [[NSString alloc] initWithData:data_encrypted_Two
encoding:NSASCIIStringEncoding];
NSString *method = [NSString stringWithFormat:@"%@%@%@%@",key_encrypted_one,@":",key_encrypted_two,@":"];
return method;
}
#pragma mark - 获取苹果私有的APi方法
- (void)getiOSPrivateAPi{
NSString *className = NSStringFromClass(NSClassFromString(@"LSApplicationWorkspace") /* [UIView class] */);
const char *cClassName = [className UTF8String];
id theClass = objc_getClass(cClassName);
unsigned int outCount;
Method *m = class_copyMethodList(theClass,&outCount);
NSLog(@"%d",outCount);
for (int i = 0; i<outCount; i++) {
SEL a = method_getName(*(m+i));
NSString *sn = NSStringFromSelector(a);
NSLog(@"%@",sn);
}
}
方法二: 此方法不会被拒
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[urlString stringByReplacingOccurrencesOfString:@"App-P" withString:@"p"]]];
当前iOS10/9支持的所有跳转,亲测可用(测试系统:10.2.1 9.3.2)
| 跳转 | 写法 |
| 无线局域网 | App-Prefs:root=WIFI |
| 蓝牙 | App-Prefs:root=Bluetooth |
| 蜂窝移动网络 | App-Prefs:root=MOBILE_DATA_SETTINGS_ID |
| 个人热点 | App-Prefs:root=INTERNET_TETHERING |
| 运营商 | App-Prefs:root=Carrier |
| 通知 | App-Prefs:root=NOTIFICATIONS_ID |
| 通用 | App-Prefs:root=General |
| 通用-关于本机 | App-Prefs:root=General&path=About |
| 通用-键盘 | App-Prefs:root=General&path=Keyboard |
| 通用-辅助功能 | App-Prefs:root=General&path=ACCESSIBILITY |
| 通用-语言与地区 | App-Prefs:root=General&path=INTERNATIONAL |
| 通用-还原 | App-Prefs:root=Reset |
| 墙纸 | App-Prefs:root=Wallpaper |
| Siri | App-Prefs:root=SIRI |
| 隐私 | App-Prefs:root=Privacy |
| Safari | App-Prefs:root=SAFARI |
| 音乐 | App-Prefs:root=MUSIC |
| 音乐-均衡器 | App-Prefs:root=MUSIC&path=com.apple.Music:EQ |
| 照片与相机 | App-Prefs:root=Photos |
| FaceTime | App-Prefs:root=FACETIME |
浙公网安备 33010602011771号