2014-04-10 3 views
5

Ich bin dumm in iOS vor allem in privaten API.Wie neu generierte private API-Header in iOS laden?

Ich habe Anwendung zum Testen und jetzt muss ich private API verwenden (diese Anwendung nicht für App Store).

Ich habe generierte Header von iOS-Runtime-Headers heruntergeladen und was als nächstes?

Unter /System/Library/ habe ich eine Liste der Bibliotheken, die Frameworks, ..., PrivateFrameworks auch enthalten.

Muss ich das Originalframework durch eines ersetzen, das ich von iOS-Runtime-Headers kopiert habe?

Weil ich andere Anwendungen habe, die nur verwenden, und ich will sie nicht beschädigen.

Von posted Link sagen sie Bibliothek zum Beispiel zur Validierung von:

NSBundle *b = [NSBundle 
     bundleWithPath:@"/System/Library/PrivateFrameworks/GAIA.framework"]; 
BOOL success = [b load]; 

Aber hier der Pfad auf ursprünglichen Pfad.

Oder ich etwas vermissen,

Danke

Antwort

6

Zunächst ersetzen Sie keine Header, die von Apple zur Verfügung gestellt werden.

Im Allgemeinen ist es eine von zwei Arten erfolgen:

1) Sie können einige dieser Header in Ihr Projekt kopieren und fügen Sie einfach diese Dateien auf die gleiche Weise wie Sie andere Header enthalten

#import "SomeHeader.h" 

2) Manchmal musst du sie ein wenig säubern (bearbeiten). Oft hat dieser Header so etwas wie in in ihnen:

#import "NSObject.h" 

Und compliller nicht in der Lage sein, es zu finden, weil NSObject eingebaut ist Klasse. Also musst du das entfernen.

3) Wenn Sie nur ein paar Methoden brauchen, dann ist Tuukka Nori Lösung richtig.

Darüber hinaus müssen Sie (statisch oder dynamisch) mit dem entsprechenden privaten Framework verknüpfen (nur die Header sind nicht genug).

+0

Im Allgemeinen möchte ich Gerät mithilfe der privaten API in den Ruhezustand versetzen.Ich weiß, dass es sich nicht auf meine Frage bezieht, aber ich sah Ihre Antworten in den meisten Fragen beziehen sich auf private API. Haben Sie eine Idee, wo Sie den richtigen Header sehen können? Weil die meisten Antworten heute nicht relevant sind (ich benutze 6.1). Danke trotzdem – snaggs

+0

@fessy: Ich konnte nicht einmal eine Lösung finden, die vollständig auf ios 6.x funktioniert. Alle diese DimScreen und BlankScreen Bildschirm nur teilweise Dimmen (nicht von ihnen vollständig vom Bildschirm ausgeschaltet). Also bin ich mir nicht sicher. Sie können versuchen, Sprungbrett rückwärts zu entwickeln und dort zu suchen. Es könnte jedoch durch eine gewisse Berechtigung geschützt werden. –

4

keine Dateien ersetzen Sie. Schreiben Sie stattdessen eine Headerdatei mit dem Symbol, das Sie verwenden möchten. Wenn Sie eine Objective-C-Methode benötigen, fügen Sie eine Kategorie mit einem eindeutigen Namen hinzu, z.

@interface NSString (MyOwnPrivateCategory) 
- (void) privateMethodDeclaredInRuntimeHeaders; 
@end 

Importieren Sie es und verwenden Sie die Methode, wie Sie möchten.

Der angegebene Beispielcode zeigt, wie ein Framework zur Laufzeit geladen wird, falls Sie nicht mit ihm verlinken möchten. Da einige Frameworks privat sind, sind sie möglicherweise nicht in allen iOS-Versionen verfügbar.