iOS Private API – Inicio de una aplicación por ID de package

En realidad es un set de 3 preguntas secundarias.

1) Es posible utilizar un método GraphicsServices y vincular el binary del marco privado. ¿Por qué no es posible hacer algo similar con SpringBoard SBUIController?

2) ¿No hay forma de utilizar el controller SBUIC sin romper la cárcel?

3) Lo único que quiero es iniciar una aplicación por ID de package (a través de API privada, pero sin jailbreak) en iOS 6, pero no pude encontrar una sola respuesta que funcione.

Cualquier ayuda apreciada.

Saludos, Vishal.

Aplicación vs Framework

GraphicServices es marco. Está específicamente diseñado para ser vinculado y utilizado por aplicaciones de terceros. Como recuerdo, SBUIController forma parte de Springboard, que es una aplicación independiente (que no está diseñada para vincularse)

Incluso en el caso, si de algún modo puede vincular / cargar el código de Springboard, el código no funcionará, porque le faltan derechos para hablar con otros services.

Derechos

Jailbreak le permite inyectar código en aplicaciones de terceros (incluyendo Springboard) y de esta manera el código se ejecuta en Springboard y tiene derechos adecuados.

En realidad, para el dispositivo Jailbreak puede agregar derechos a su código y firmarlo. Sin embargo, no podrá hacerlo por un dispositivo que no esté en jailbreak.

Por lo tanto, diría que debes dejar caer el enfoque SBUIController para dispositivos que no estén en jailbreak.

Intentos de iniciar una aplicación

Tuve la misma pregunta hace medio año y dedico mucho time. Intenté seguir las cosas sin éxito:

  • SBSLaunchApplicationWithIdentifier
  • SBReturnToPreviousAppAtSpecifiedTime
  • Intenté usar BKSWorkspace

y un par de otros enfoques.

Algunos pensamientos adicionales

Si la aplicación de terceros maneja algún esquema de URL, puede usarlo para iniciar esta aplicación de terceros.

Como lo sé, solo un api privado puede hacer esto.

@interface PrivateApi_LSApplicationWorkspace - (bool)openApplicationWithBundleID:(id)arg1; @end PrivateApi_LSApplicationWorkspace* _workspace; _workspace = [NSClassFromString(@"LSApplicationWorkspace") new]; [_workspace openApplicationWithBundleID:bundleIdentifier]; 

Puede consultar https://github.com/wujianguo/iOSAppsInfo .

Puede intentar usar RTLD_LAZY u objc_getClass . He utilizado ambos para acceder a BluetoothManager en mi iPhone 5 sin jailbreak .