一些应用程序如何在程序中以编程方式打开设置应用程序
我知道有很多问题:“如何以编程方式打开设置应用程序? 答案是“大否”。 我知道苹果公司不支持在iOS 5.0以后的任何其他应用程序打开设置。
但是有一些像MapMyFitness这样的可以打开设置的应用程序,它们在App Store中可用,并且已经被苹果公司批准。 如果Bluetoothclosures,MapMyFitness将打开蓝牙设置。 我已经在iOS 6和iOS 5.1中检查过了。
我想知道这些应用程序如何能够合法地打开设置,并绕过苹果安全,因为根据我的信息,没有合法的方法来做到这一点?
应用程序无法将设置应用程序打开到特定的屏幕。 像MapMyFitness开放偏好的应用程序的原因是因为他们要求许可使用蓝牙低功耗。 询问权限是由CBCentralManager在首次使用时pipe理的。
这也是知道蓝牙是打开还是closures的类。 它会自动显示一个提醒,进入设置打开蓝牙的选项。
使用位置服务时将显示类似的popup窗口。
这些popup窗口由系统框架自动显示。 该消息可以使用位置服务的purpose
属性进行定制,这在蓝牙的情况下是不可能的。
没有私人的API用于这个,所以没有理由被拒绝的应用程序。
那么,在iOS 5.0上,有prefs://
URLscheme。
从iOS 5.1中,被删除。 仍然有可能使用私有API和混淆来绕过二进制文件的静态分析。 例:
void (*openApp)(CFStringRef, Boolean); void *hndl = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"); openApp = dlsym(hndl, "SBSLaunchApplicationWithIdentifier"); openApp(CFSTR("com.apple.Preferences"), FALSE);
通过使用string(拆分和连接它们等),您最终可以将其交给AppStore。 尽pipe如此,它仍然被禁止。