13

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

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

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

4

2 回答 2

18

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

从 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。但是,它仍然是不允许的。

于 2013-01-29T16:28:19.313 回答
13

应用程序无法将设置应用程序打开到特定屏幕。MapMyFitness 之类的应用程序之所以打开首选项,是因为它们要求获得使用蓝牙低功耗的权限。首次使用时请求权限由CBCentralManager管理。

在此处输入图像描述

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

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

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

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

于 2013-01-29T16:31:56.927 回答