Как некоторые приложения могут открывать настраиваемое приложение программно в своем приложении

Я знаю, что есть много вопросов: "Как программно настроить приложение настройки?" и ответ "БОЛЬШЕ НЕТ". Я знаю, что Apple не поддерживает открытие настроек из любого другого приложения после iOS 5.0.

Но есть такие приложения, как MapMyFitness, которые могут открывать "Настройки", и они доступны в App Store и одобрены Apple. MapMyFitness открывает настройки Bluetooth, если Bluetooth выключен. Я проверил это в iOS 6 и iOS 5.1.

Я хочу знать, как эти приложения смогут открывать настройки на законных основаниях и обойти безопасность Apple, поскольку, согласно моей информации, нет законных способов сделать это?

Ответ 1

Приложения не могут открыть приложение настроек на конкретном экране. Причина, по которой приложения, такие как открытые предпочтения MapMyFitness, заключается в том, что они запрашивают разрешение на использование Bluetooth Low Energy. Просьба о разрешении управляется CBCentralManager при первом использовании.

enter image description here

Это также класс, который знает, включен ли Bluetooth или выключен. Он автоматически отобразит предупреждение с возможностью перехода в настройки для включения Bluetooth.

Аналогичное всплывающее окно будет отображаться при использовании служб определения местоположения.

Эти всплывающие окна автоматически отображаются системой. Сообщение можно настроить с помощью свойства purpose для служб определения местоположения, что невозможно в случае Bluetooth.

Для этого не использовался частный API, поэтому нет причин для отклонения приложения.

Ответ 2

Ну, на iOS 5.0 существует схема URL 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. Тем не менее, он все еще запрещен.