Comment détecter et éviter l'utilisation des API privées dans les bibliothèques de tiers

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

  •  16-09-2019
  •  | 
  •  

Question

Maintenant que Apple est en cours d'exécution une sorte d'analyse statique pour vérifier automatiquement l'utilisation de l'API privée, un certain nombre de personnes ont été capturées en raison de la bibliothèque Three20. J'utilise une autre bibliothèque tiers (que je me compilation à partir) et je voudrais vérifier qu'il automatiquement pour une utilisation de l'API privée avant de soumettre à Apple, donc je peux éliminer / réécrire les parties.

Si je cours sur mon nm exécutable de l'application, je reçois une liste de symboles, et je vois des symboles là que je ne l'utilise. Par exemple, je vois _AudioServicesPlaySystemSound, et si je recherche « AudioServicesPlaySystemSound » dans XCode je reçois aucun résultat. Est-il possible de distinguer automatiquement les appels vers les API privées, par exemple, je remarque que Apple a l'habitude de les nommer avec un trait de soulignement initial.

Cependant: si je délibérément inclure un appel à une API privée, il ne se présente pas dans la sortie de nm, mais il n'apparaîtraient si je lance strings sur le binaire. Sur cette base, une idée que j'avais été de compiler une liste énorme de tous les appels API privées dans une grande table, et recherche automatiquement pour eux dans la sortie des chaînes. Je ne l'ai pas encore fait.

Quelqu'un at-il des conseils sur la façon d'attraper automatiquement ce genre de choses alors je vais seulement par le processus d'examen une fois?

Était-ce utile?

La solution

Vous pouvez essayer d'exécuter nm sur les fichiers objet au lieu de l'exécutable lié:

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

Les objets doivent être dans le sous-répertoire build/<app>.build/*/<app>.build/Objects-normal.

Vous voyez une référence à AudioServicesPlaySystemSound parce que l'une des fonctions que vous avez appel à son tour appelle AudioServicesPlaySystemSound.

appels Objective C ne montrent généralement dans les décharges nm, vous aurez besoin d'utiliser otool pour cela:

otool -ov <object file>

Autres conseils

Utilisez cet outil de dev, App Scanner . Il scanne votre fichier .app pour les méthodes de l'API privées. Une future version vérifiera également pour les variables privées d'instance API.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top