2012-06-17 2 views
7

Non voglio inviare questa app all'App Store. Ho provato molte volte ma ho incontrato così tanti problemi :(iOS Come utilizzare l'API privata?

Io uso il dump di classe per ottenere tutti i file di intestazione di UIKit.framework. Nella UIApplication.h generata dal dump di classe, ho visto il metodo I voglio usare ---- launchApplicationWithIdentifier

Quindi ho inserito UIApplication.h nel mio progetto e l'ho importato.Compile, ho ricevuto un sacco di errori di "Ridefinizione dell'enumeratore ...." perché in UIKit.framework I usa precedente, c'è un altro UIApplication.h.Ma questo file non ha il metodo launchApplicationWithIdentifier

Se elimino il precedente UIKit.framework e importi la cartella generata dal dump di classe, allora appare come un framework ma se IO spiegalo, è vuoto.

Quindi voglio trasformare tutti i file di intestazione generati in un file framework e sostituire il precedente UIKit.framework. Ma non so come. Come possiamo vedere, sotto la directory framework di sistema, c'è un file che ha lo stesso nome del framework e ha un'icona 'script di shell eseguito'. Come posso creare questo file?

Mi sono davvero confuso. Qualcuno può darmi una mano? Grazie.

+0

OMG, Ho appena aggiunto la risposta alla tua domanda nella tua altra domanda: http://stackoverflow.com/questions/11047176/ios-how-can-i-use-uiapplication-launchapplicationwithidentifier-which-is-in -priv –

risposta

7

Basta specificare i metodi privati ​​in un'interfaccia categoria di cui sopra l'implementazione della classe in cui si desidera utilizzarlo, in questo modo:

@interface UIApplication (Private) 

- (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended; 

@end 

Non importare l'intero file di classe-discarica e legame con l'UIKit originale struttura.

È necessario prestare particolare attenzione quando si utilizza l'API privata. Questi metodi possono cambiare o essere rimossi nelle versioni future di iOS!

Verificare se il metodo esiste realmente con respondsToSelector: in fase di esecuzione ed essere pronti per il caso che non esiste.

Ho utilizzato una funzione MapKit segreta nella mia applicazione e sapevo che i metodi privati ​​esistono solo in iOS 5. Quindi la mia app funziona ancora su tutte le versioni iOS ma questa funzione è disponibile solo in iOS 5 (Apple rimosso o modificato in iOS 6 beta 1).

+1

Funziona. Grazie mille :-) Inoltre, devo rendere la mia applicazione un file deb usando dpkg tool e poi installarlo. Solo in questo modo, la mia applicazione può avviare un'altra app. – wyp