2012-06-17 8 views
7

Ich möchte diese App nicht im AppStore einreichen. Ich habe schon viele Male versucht, aber so viele Probleme zu lösen :(iOS Wie private API verwenden?

Ich benutze Klasse-Dump, um alle Header-Dateien von UIKit.framework zu bekommen. In der UIApplication.h generiert von Class-Dump, sah ich die Methode I will verwenden ---- launchApplicationWithIdentifier

Dann legte ich UIApplication.h in meinem Projekt und importieren Sie es kompilieren, ich habe eine Menge von "Redefinition of Enumerator ...." Fehler, weil in der UIKit.framework I Verwenden Sie vorherige, gibt es eine andere UIApplication.h. Aber diese Datei hat nicht die Methode launchApplicationWithIdentifier.

Wenn ich die vorherige UIKit.framework löschen und importieren Sie den Ordner von Class-Dump generiert. Dann erscheint es wie ein Framework, aber wenn ICH Entfalte es, es ist leer.

Dann möchte ich alle generierten Header-Dateien eine Framework-Datei machen und die vorherige UIKit.framework ersetzen. Aber ich weiß nicht wie. Wie wir sehen können, gibt es unter dem System-Framework-Verzeichnis eine Datei, die den gleichen Namen wie das Framework hat und ein Symbol für ein "ausgeführtes Shell-Skript" hat. Wie kann ich diese Datei erstellen?

Ich war wirklich verwirrt. Jemand kann mir eine Hand geben? Vielen Dank.

+0

OMG, ich habe nur Antwort auf Ihre Frage in Ihrer anderen Frage hinzufügen: http://stackoverflow.com/questions/11047176/ios-how-can-i-use-uiapplication-launchapplicationwithidentifier-which-is-in -priv –

Antwort

7

Geben Sie einfach die privaten Methoden in einer Kategorie-Schnittstelle über der Klassenimplementierung, wo Sie es verwenden möchten, wie folgt aus:

@interface UIApplication (Private) 

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

@end 

die ganze Klasse-Dump-Datei und Verbindung mit dem ursprünglichen UIKit nicht Sie importieren Rahmen.

Sie müssen sehr vorsichtig sein, wenn Sie private API verwenden. Diese Methoden können in zukünftigen iOS-Versionen geändert oder entfernt werden!

Überprüfen Sie, ob die Methode mit respondsToSelector: zur Laufzeit wirklich existiert und bereiten Sie auf den Fall vor, dass es nicht existiert.

Ich benutzte eine geheime MapKit-Funktion in meiner eigenen Anwendung und wusste, dass die privaten Methoden nur in iOS 5 existieren. Meine App funktioniert also noch in allen iOS-Versionen, aber diese Funktion ist nur in iOS 5 verfügbar (Apple entfernt oder geändert) es in iOS 6 Beta 1).

+1

Es funktioniert. Vielen Dank :-) Außerdem muss ich meiner Anwendung eine deb-Datei mit dpkg-tool erstellen und sie dann installieren. Nur so kann meine Anwendung eine andere App starten. – wyp