2012-04-18 10 views
9

Ho fatto una domanda here ma la risposta mi guida ad aprire un nuovo argomento. In breve, voglio lanciare un'applicazione gratuita su Appstore dalla mia applicazione, ma l'app che voglio avviare non ha URL Scheme. I commenti sulla mia altra domanda dicono che usare alcune API speciali come SBSLaunchApplicationWithIdentifier o classi come UIDocumentInteractionController lo rendono possibile. Qualcuno può per favore aiutarmi come avviare un'applicazione dalla mia appicazione. Grazie in anticipoAPI speciale per avviare un'applicazione dalla mia applicazione

risposta

15

Lasciatemi dire prima che questo metodo è solo il jailbreak! Utilizza API private che Apple può smettere di supportare in qualsiasi momento in una versione futura!

Andiamo ad esso, questo metodo utilizza il [UIApplication launchApplicationWithIdentifier:suspended:] metodo privato:

[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO]; 

Da quello che ho provato di chiamare questo metodo da un'applicazione non è in esecuzione come utente root è inutile, a quanto pare SpringBoard (o LaunchServices) consente solo alle applicazioni root di avviare altre applicazioni utilizzando questo metodo.

Quindi, prima devi eseguire il jailbreak del tuo iPhone, quindi devi eseguire l'applicazione come root.

Per fare in modo che l'app venga eseguita come root, è necessario collocarla in /Applications/YourApp.app invece del solito/User/Applications/UUID /YourApp.app.

È possibile installare OpenSSH utilizzando Cydia e utilizzare SSH per accedere alla shell del telefono.

Poi, dopo aver la vostra applicazione nel posto giusto è necessario impostare le autorizzazioni, ad esempio:

enter image description here

vorrei utilizzare gli stessi come Cydia:

chown -R root:wheel /Applications/YourApp.app 

Avanti, un piccolo trucco. Il binario avrà bisogno del setuid bit:

chmod 4755 /Applications/YourApp.app/YourApp 

E per l'ultimo passo, non lo fa SpringBoard applicazioni aperte con il bit setuid, ma si apre uno script (che può aprire un'altra applicazione)! Basta cambiare il nome del binario a qualcosa come YourApp_:

mv /Applications/YourApp.app/YourApp /Applications/YourApp.app/YourApp_ 

e creare un nuovo file chiamato YourApp nella cartella app con il seguente script:

#!/bin/bash 
CrrDir=$(dirname "$0") 
exec "${CrrDir}"/YourApp_ 

Ora, respring (c'è un app per quello in Cydia) e sei pronto per andare.

Scusa se questo sembra difficile, non lo è, non ricordo dove l'ho imparato, ma è stato tanto tempo fa. Questo metodo funziona bene in tutte le versioni iOS e l'ho appena testato con iOS 5.1.

Anche in questo caso, LA APP NON SARÀ APPROVATA DA APPLE SE FATE QUESTO.

+0

Grazie in anticipo. L'ho letto e lo studierò ora.Non importa se è difficile :) – ilhnctn

+0

Np, spero che questa risposta aiuti più persone, ho visto questa domanda più volte in SO. – fbernardo

+0

Una seconda domanda, devo eseguire il jailbreak del mio dispositivo per fare ciò (come..installare OpenSSH usando Cydia e usare SSH per accedere alla shell del telefono) – ilhnctn

Problemi correlati