Wie zu erkennen, und die Verwendung von privaten APIs in Bibliotheken von Drittanbietern zu vermeiden

StackOverflow https://stackoverflow.com/questions/1863764

  •  16-09-2019
  •  | 
  •  

Frage

Nun, dass Apple eine Art statischer Analyse läuft für private API verwenden, um automatisch zu überprüfen, hat eine Reihe von Menschen wegen der Three20 Bibliothek gefangen. Ich benutze eine andere Drittanbieter-Bibliothek (die ich selbst von Code zu kompilieren), und ich möchte es automatisch Verwendung für private API prüfen, bevor ich an Apple einreichen, so kann ich beseitigen / die Teile neu schreiben.

Wenn ich nm auf meine Anwendung ausführbare Datei ausführen, erhalte ich eine Liste von Symbolen, und ich Symbole dort sehe, dass ich nicht verwenden. Zum Beispiel sehe ich _AudioServicesPlaySystemSound, und wenn ich für „AudioServicesPlaySystemSound“ in XCode suchen erhalte ich keine Ergebnisse. Gibt es eine Möglichkeit, automatisch Anrufe an privaten APIs zu unterscheiden, zum Beispiel ich feststellen, dass Apple eine Gewohnheit zu benennen, sie mit einem Unterstrich am Anfang hat.

Allerdings: Wenn ich absichtlich einen Anruf an eine private API enthalten es zeigt nicht, in der Ausgabe von nm, aber es zeigt, wenn ich strings auf dem binären laufen. Auf dieser Grundlage war eine Idee, die ich hatte eine riesige Liste aller privaten API-Aufrufe in eine große Tabelle zu erstellen, und für sie automatisch in den Saiten Ausgang suchen. Ich habe nicht getan, dass noch.

Hat jemand irgendwelche Tipps, wie automatisch das Zeug zu fangen, damit ich nur einmal durch den Review-Prozess gehe?

War es hilfreich?

Lösung

Sie könnten versuchen nm Dateien auf dem Objekt ausgeführt wird anstelle der verknüpften ausführbaren:

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

Die Objekte in dem build/<app>.build/*/<app>.build/Objects-normal Unterverzeichnis sein sollten.

Du siehst ein Verweis auf AudioServicesPlaySystemSound, weil eine der Funktionen, die Sie wiederum angerufen hat ruft AudioServicesPlaySystemSound.

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

otool -ov <object file>

Andere Tipps

Mit diesem Entwickler-Tool, App Scanner . Es scannt Ihre .app-Datei für private API-Methoden. Eine zukünftige Version wird überprüft auch für private API Instanzvariablen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top