2009-12-08 6 views
9

Maintenant qu'Apple exécute une sorte d'analyse statique pour vérifier automatiquement l'utilisation de l'API privée, un certain nombre de personnes ont été interceptées à cause de la bibliothèque Three20. J'utilise une autre bibliothèque tierce (que je compile moi-même à partir du code) et je voudrais l'auditer automatiquement pour une utilisation privée de l'API avant de la soumettre à Apple, afin que je puisse éliminer/réécrire ces parties.Comment détecter et éviter l'utilisation d'API privées dans des bibliothèques tierces

Si j'exécute nm sur mon exécutable d'application, j'obtiens une liste de symboles, et je vois des symboles que je n'utilise pas. Par exemple je vois _AudioServicesPlaySystemSound, et si je recherche "AudioServicesPlaySystemSound" dans XCode je n'obtiens aucun résultat. Est-il possible de discriminer automatiquement les appels aux API privées, par exemple, je remarque que Apple a l'habitude de les nommer avec un trait de soulignement initial.

Cependant: si j'inclue délibérément un appel à une API privée, il n'apparaît pas dans la sortie de nm, mais il apparaît si j'exécute strings sur le binaire. Sur cette base, une idée que j'avais était de compiler une énorme liste de tous les appels d'API privés dans une table énorme, et de les rechercher automatiquement dans la sortie des chaînes. Je n'ai pas encore fait ça.

Est-ce que quelqu'un a des conseils sur la façon d'attraper automatiquement ce genre de choses, alors je ne fais que suivre le processus de révision une fois?

+0

Ils s'opposent à Three20? C'est en fait écrit par le développeur qui a créé l'application Facebook pour iPhone. Si votre application est rejetée à cause de Three20, l'application Facebook devrait être trop ... Heh. Justin ;-) –

+0

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

+0

J'imagine que la prochaine fois que Facebook soumettra une mise à jour, elle sera rejetée si ils n'utilisent pas la dernière version conforme aux règles d'Apple. – bpapa

Répondre

4

Vous pouvez essayer de faire tourner 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 car l'une des fonctions que vous appelez à tour de rôle appelle AudioServicesPlaySystemSound.

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

otool -ov <object file> 
3

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

+1

Ce lien soit brisé. Essayez ceci: https://github.com/ChimpStudios/App-Scanner – chown

+0

Est-ce que APP Scanner fonctionne vraiment? Quelle est la précision est que – Kiarash

+0

Projet est mort et aucune version. –

Questions connexes