一些应用程序如何在程序中以编程方式打开设置应用程序

我知道有很多问题:“如何以编程方式打开设置应用程序? 答案是“大否”。 我知道苹果公司不支持在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如此,它仍然被禁止。