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

时间:2013-01-29 16:21:56

标签: iphone ios objective-c ios6 ios5.1

我知道有很多问题:“如何以编程方式打开设置应用程序?”答案是“大不了”。我知道Apple不支持在iOS 5.0之后从任何其他应用程序打开设置。

但是有一些像MapMyFitness这样的应用程序可以打开“设置”,它们可以在App Store中获得并且已获得Apple的批准。如果蓝牙已关闭,MapMyFitness将打开蓝牙设置。我在iOS 6和iOS 5.1中检查过这个。

我想知道这些应用程序如何能够合法地打开“设置”并绕过Apple的安全性,因为根据我的信息,没有合法的方法可以做到这一点?

2 个答案:

答案 0 :(得分:18)

嗯,在iOS 5.0上,有prefs://网址方案。

从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);

通过播放字符串(拆分和连接它们等),您最终可以进入AppStore。但它仍然被禁止。

答案 1 :(得分:13)

应用无法将设置应用程序打开到特定屏幕。像MapMyFitness这样的应用程序打开首选项的原因是因为他们要求获得使用蓝牙低功耗的许可。第一次使用时,CBCentralManager会管理请求权限。

enter image description here

这也是知道蓝牙是打开还是关闭的类。它将自动显示警报,并带有进入设置以打开蓝牙的选项。

使用位置服务时会显示类似的弹出窗口。

这些弹出窗口由系统框架自动显示。可以使用purpose属性为位置服务自定义消息,这在蓝牙的情况下是不可能的。

没有使用私有API,因此没有理由拒绝该应用。