cómo algunas aplicaciones pueden abrir la aplicación de configuration mediante progtwigción dentro de su aplicación

Sé que hay muchas preguntas: "¿Cómo abrir la aplicación de configuration de manera programática?" y la respuesta es "GRANDE NO". Sé que Apple no es compatible con la apertura de configuraciones desde cualquier otra aplicación después de iOS 5.0.

Pero hay algunas aplicaciones como MapMyFitness que pueden abrir Configuración, y están disponibles en la App Store y han sido aprobadas por Apple. MapMyFitness abre la configuration de Bluetooth si Bluetooth está apagado. He comprobado esto en iOS 6 y iOS 5.1.

Quiero saber cómo estas aplicaciones pueden abrir Configuraciones legalmente y omitir la security de Apple porque, según mi información, no hay una forma legal de hacerlo.

Las aplicaciones no pueden abrir la aplicación de configuration en una pantalla específica. La razón por la que las aplicaciones como las preferences abiertas de MapMyFitness se debe a que solicitan permiso para usar Bluetooth Low Energy. CBCentralManager maneja el permiso para solicitar el primer uso.

introduzca la descripción de la imagen aquí

Esta es también la class que sabe si Bluetooth está activado o desactivado. Aparecerá una alerta automáticamente con una opción para entrar en la configuration para encender el bluetooth.

Se mostrará una window emergente similar al usar services de location.

Estas windows emergentes se muestran automáticamente en el marco del sistema. El post se puede personalizar utilizando la propiedad de purpose para los services de location, que no es posible en el caso de Bluetooth.

No se utilizó ninguna API privada para esto, por lo que no hay razón para que la aplicación sea rechazada.

Bueno, en iOS 5.0, hay el prefs:// URL.

Desde iOS 5.1, que se eliminó. Todavía es posible utilizar API privadas y ofuscación para evitar el análisis estático del binary. Ejemplo:

 void (*openApp)(CFStringRef, Boolean); void *hndl = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"); openApp = dlsym(hndl, "SBSLaunchApplicationWithIdentifier"); openApp(CFSTR("com.apple.Preferences"), FALSE); 

Al jugar con las strings (dividirlas y concatenarlas, etc.), finalmente puede llegar a la AppStore. Todavía es rechazado, sin embargo.