Domanda

Ora che Apple è in esecuzione un qualche tipo di analisi statica per controllare automaticamente per l'utilizzo di API private, un certo numero di persone che sono state catturate a causa della libreria Three20. Io uso un'altra libreria di terze parti (che io compilo dal codice) e mi piacerebbe controllare automaticamente per un uso privato API prima di invio ad Apple, in modo da poter eliminare / ri-scrivere quelle parti.

Se eseguo nm sul mio eseguibile dell'applicazione, ho un elenco di simboli, e sto vedendo i simboli in là che io non uso. Per esempio io vedo _AudioServicesPlaySystemSound, e se cerco "AudioServicesPlaySystemSound" in XCode ottengo alcun risultato. C'è un modo per distinguere automaticamente le chiamate alle API private, per esempio ho notato che Apple ha l'abitudine di dar loro un nome, con una sottolineatura iniziale.

Comunque: se ho deliberatamente includono una chiamata a un privato API che non compare nell'output di nm, ma non rivela se corro strings sul binario. Sulla base di questa, un'idea che avevo era quella di compilare una lista enorme di tutte le chiamate API private in una tabella enorme, e la ricerca automatica per loro nell'output stringhe. Non ho ancora fatto.

Qualcuno ha qualche consiglio su come catturare automaticamente questa roba così sto solo passando attraverso il processo di revisione una volta?

È stato utile?

Soluzione

Si potrebbe provare a eseguire nm sui file oggetto invece del eseguibile collegato:

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

Gli oggetti dovrebbero essere nella sottodirectory build/<app>.build/*/<app>.build/Objects-normal.

Si sta vedendo un riferimento a AudioServicesPlaySystemSound perché una delle funzioni che ha chiamato a sua volta chiama AudioServicesPlaySystemSound.

chiamate Obiettivo C non in genere mostra in discariche nm, avrete bisogno di utilizzare otool per questo:

otool -ov <object file>

Altri suggerimenti

Utilizzare questo strumento dev, App Scanner . Si esegue la scansione del file .app per i metodi di API private. Una versione futura sarà anche verificare la presenza di variabili di istanza API private.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top