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

cod*_*ter 13 iphone objective-c ios ios5.1 ios6

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

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

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

小智 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);
Run Code Online (Sandbox Code Playgroud)

通过使用字符串(拆分和连接它们等),您最终可以进入AppStore.但它仍然不被允许.

  • @SahilWasan打扰阅读答案?***我已经做了.*** (3认同)
  • +1,非常有用,对Cydia应用程序完全不感兴趣;) (3认同)

Jor*_*ers 13

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

在此输入图像描述

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

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

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

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