问题
在iOS10之前,跳转到系统设置界面的某个指定界面的方式如下:
但是在iOS10上,调用canOpenURL:打开系统设置界面时控制台会报如下错误,并且无法跳转:
原因是iOS10只允许如下方式跳转到设置里自己app的界面,对跳转到其他界面做了限制:
解决方法
可以使用MobileCoreServices.framework
里的私有API:
头文件参考:LSApplicationWorkspace.h
使用方法:
MobileCoreServices.framework
不是私有库,所以直接使用performSelector:
即可调用私有API。
注意
- iOS10的系统URLScheme改成了首字母大写,使用小写的方式会无法打开。
- 使用私有API的app无法通过App Store审核。你也可以尝试把私有类名和selector字符串混淆一下,绕过审核。例如这位仁兄用ASCII混淆的方法:
|
|
不过,还是不建议使用私有API,因为它是不可靠的。也许某天苹果就把它移除了。
update:
- 还有一步遗漏了,app需要添加一个
Prefs
的URL Schemes,即添加到info.plist
的LSApplicationQueriesSchemes
项中。
参考:
http://stackoverflow.com/a/39102075/6380485
https://www.zhihu.com/question/50635906/answer/125195317
iOS10系统URLScheme