2013-10-06 10 views
7

Su un dispositivo iOS jailbroken, è possibile che un'app richiamino un metodo da un'altra app (un metodo di istanza, non statico)? Un altro modo per esprimerlo: come posso ottenere l'istanza di un'app (presumendo che l'app sia in esecuzione) in modo che possa chiamare uno dei suoi metodi?Metodo di chiamata da un'altra app (Jailbreak iOS)

Sfondo: sto provando a chiamare una funzione nell'app Music player da un metodo collegato nel framework privato iPodUI (per ulteriori dettagli, vedere this post).

Questa domanda è stata chiesta per Android, ma non ho trovato nulla per jailbreak iOS. Se è perché sto facendo la domanda sbagliata e c'è un approccio diverso da prendere, sono aperto a questo.

+1

tiro, dopo aver digitato tutto questo ho trovato questa domanda, che sembra tenere una possibile risposta: http://stackoverflow.com/questions/18224150/communication-between-tweak-and-app – newenglander

+1

A meno che non abbia frainteso la tua domanda, non penso che l'altra risposta (su 'CPDistributedMessagingCenter') ti aiuterà. Ciò sarebbe utile se si conosce che l'altra app (ad esempio, il lettore musicale) è già codificata per l'ascolto di una notifica/messaggio particolare. Se si desidera chiamare un metodo arbitrario in un'altra app, che non è progettato per essere chiamato da altri processi, quindi penso che sia necessario il hook MobileSubstrate. – Nate

+0

Grazie Nate. Ma non dovrei essere in grado di collegarmi all'app Music player e aggiungere il mio ascoltatore? O lo sto rendendo più complicato di quanto dovrebbe essere? – newenglander

risposta

2

Un modo semplice e alternativo per raggiungere questo obiettivo è con la chiamata cycript e system(), tuttavia si prega di ATTENZIONE dei pericoli dell'utilizzo di system() prima di utilizzarlo in quanto potenzialmente non sicuro (che, a mio avviso, non è che molto importante su un iOS jailbroken in cui tutto è abbastanza pericoloso molto)

diciamo che si dispone di un metodo come [[SomeClass sharedInstance] methodToBeCalledExternally] che si desidera chiamare da un altro processo

è possibile salvare la chiamata in un file di testo in /tmp/something.cy

quindi si inietta quel codice esternamente da runnin g:

cycript -p Music /tmp/something.cy 

ma se avete bisogno di farlo programatically, e, naturalmente, se l'ambiente non è Sandbox (suppongo che non lo è), allora si può fare:

system("cycript -p Music /tmp/something.cy") 

questo modo in cui puoi eseguire codice ObjC arbitrario in qualsiasi processo (in questo caso, l'app Music), dal tuo codice.

infine, non dimenticate di rimuovere il file /tmp/something.cy come non sarà più bisogno

+0

Grazie, sembra una buona soluzione, dovremo provarlo prima o poi. – newenglander