2009-12-08 5 views
9

Jetzt, da Apple eine Art von statischen Analyse ausführt, um automatisch für private API-Verwendung zu überprüfen, wurden eine Reihe von Menschen wegen der Three20-Bibliothek gefangen. Ich verwende eine andere Third-Party-Bibliothek (die ich selbst aus dem Code kompiliere) und möchte sie automatisch für die private API-Nutzung prüfen, bevor ich sie an Apple übergebe, damit ich diese Teile eliminieren/neu schreiben kann.Wie erkennen und vermeiden Sie die Verwendung von privaten APIs in Bibliotheken von Drittanbietern

Wenn ich nm auf meiner ausführbaren Anwendung ausführen, erhalte ich eine Liste von Symbolen, und ich sehe Symbole in dort, die ich nicht verwende. Zum Beispiel sehe ich _AudioServicesPlaySystemSound, und wenn ich in XCode nach "AudioServicesPlaySystemSound" suche, bekomme ich keine Ergebnisse. Gibt es eine Möglichkeit, Anrufe automatisch zu privaten APIs zu diskriminieren, zum Beispiel, dass Apple die Angewohnheit hat, sie mit einem Anfangsunterstrich zu benennen.

Allerdings: wenn ich absichtlich einen Aufruf an eine private API einschließen, wird es nicht in der Ausgabe von nm angezeigt, aber es zeigt sich, wenn ich strings auf der binären ausführen. Eine Idee, die ich hatte, bestand darin, eine riesige Liste aller privaten API-Aufrufe in eine riesige Tabelle zu kompilieren und automatisch in der Zeichenkettenausgabe nach ihnen zu suchen. Das habe ich noch nicht getan.

Hat jemand irgendwelche Tipps, wie man dieses Zeug automatisch fängt, so dass ich nur einmal durch den Überprüfungsprozess gehe?

nm -g -j *.o | sort | uniq 

Die Objekte sollten im build/<app>.build/*/<app>.build/Objects-normal Unterverzeichnis: Statt der verknüpften ausführbaren

+0

Sie widersprechen Three20? Das wurde tatsächlich von dem Entwickler geschrieben, der die Facebook App für das iPhone erstellt hat. Wenn Ihre App wegen Three20 abgelehnt wird, sollte die Facebook-App auch zu ... Heh. Sag einfach ;-) –

+0

Ja ... http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139 –

+0

Ich könnte mir vorstellen, dass Facebook das nächste Mal, wenn Facebook ein Update einreicht, abgelehnt wird Sie verwenden nicht die neueste Version, die den Apple-Richtlinien entspricht. – bpapa

Antwort

4

könnten Sie versuchen nm auf die Dateien Objekt ausgeführt wird.

Sie sehen einen Verweis auf AudioServicesPlaySystemSound, da eine der Funktionen, die Sie aufgerufen haben, wiederum AudioServicesPlaySystemSound aufruft.

Objective C Anrufe werden im Allgemeinen nicht in nm Deponien auftauchen, werden Sie otool dafür verwenden müssen:

otool -ov <object file> 
3

verwenden Entwickler-Tool, App Scanner. Es durchsucht Ihre APP-Datei nach privaten API-Methoden. Eine zukünftige Version wird auch nach privaten API-Instanzvariablen suchen.

+1

Dieser Link ist kaputt. Versuchen Sie Folgendes: https://github.com/ChimpStudios/App-Scanner – chown

+0

Funktioniert APP Scanner wirklich? Wie genau ist das – Kiarash

+0

Projekt ist tot und keine Freigaben. –