2013-08-13 18 views
11

Ispezionando un'app archiviata, è possibile vedere il percorso completo elencato per alcuni file di codice sorgente nel binario dell'app. Non tutti i file del codice sorgente sono elencati.L'app iOS contiene informazioni sul percorso dello sviluppatore

strings - the_binary_app | grep "\.m"

svela

/Users/bbarnhart/myPath/myPath/App/path/path/SourceCodeFile.m

nonché alcuni altri. Non riesco a determinare in che modo i percorsi completi per alcuni file di codice sorgente sono incorporati nel binario dell'app. Mi piacerebbe rimuoverli. Qualche idea? Si tratta di un'impostazione di build o il file di progetto è leggermente danneggiato?

Alcuni appartengono a una lib e altri sono file che appartengono al progetto.

+1

Stai costruendo in modalità "debug"? In tal caso, il file binario contiene i simboli di debug, che potrebbero contenere informazioni sul percorso. (Sto solo supponendo che, comunque.) – bdesham

+0

Ho usato l'archivio che è stato inviato ad Apple. – bbarnhart

+0

Non penso che ciò significhi necessariamente che non sei ancora in modalità di debug. Vai a Prodotto> Schema e assicurati di avere uno schema "Rilascio" o "Distribuzione" selezionato. – bdesham

risposta

8

La macro __FILE__ si espande nel percorso completo del file corrente. Questo è un probabile modo in cui potresti ottenere i percorsi nel tuo eseguibile. Ad esempio, l'espansione della macro assert include la macro __FILE__.

Controllare l'output della pipeline strings | grep. Per ognuno di questi file, vai nel tuo progetto in Xcode e apri quel file. Poi vai al doodad file correlati e scegliere “pre-elaborazione”:

related files doodad

quindi cercare attraverso l'uscita preprocessore per il percorso del file. Troverai molti falsi positivi, perché ci saranno un sacco di # numero di riga/direttive di percorso. Puoi ignorarli, perché producono solo l'output di debug, che non è incluso nel tuo file eseguibile (a meno che tu non abbia fatto qualcosa di strano con le impostazioni di compilazione). Potrebbe essere più rapido salvare l'output del preprocessore in un file, quindi aprire il file e collegarlo tramite grep oppure utilizzare una ricerca/sostituzione regolare per eliminare tutte le righe che iniziano con #.

Trova le altre istanze in cui il percorso viene visualizzato come costante di stringa. Ad esempio, se si è utilizzato la macro assert, troverete qualcosa di simile:

(__builtin_expect(!(argc > 0), 0) ? __assert_rtn(__func__, "/Volumes/b/Users/mayoff/TestProjects/textViewChanged/textViewChanged/main.m", 16, "argc > 0") : (void)0); 

Questo è un caso in cui il percorso finirà incorporato nel vostro eseguibile.

Se non trovi tutti i luoghi in cui stai incorporando il tuo percorso, prova a selezionare "Assemblaggio" dal file Doodad File correlati. L'assemblea sarà piena di commenti contenenti il ​​tuo percorso; tutto dopo @ è un commento nell'output dell'assieme, quindi ignorale.

Vedrete anche i vostri percorsi nelle direttive .file. Credo che questi producano solo output di simboli di debug, che non vanno nel tuo eseguibile, quindi puoi ignorarli anche tu.

Vedrete i vostri percorsi nelle direttive .asciz subito dopo le direttive .section DWARF,.... Questo è più materiale di debug che puoi ignorare.

Cercare i casi rimanenti in cui il percorso viene visualizzato nell'output dell'assieme. Devi capire come eliminare questi casi.Il modo in cui lo fai dipenderà dal contesto in cui appaiono i percorsi, quindi se hai bisogno di più aiuto, aggiorna la domanda con ciò che trovi.

+0

Ho cercato "assert" nei file incriminati e ho scoperto che questa era la causa. Grazie per la risposta dettagliata. – bbarnhart

+0

@bbarnhart seguendo i tuoi suggerimenti, siamo stati in grado di vedere i percorsi dei file in assert. Come facciamo a rimuovere questi percorsi ora? solo commentare le righe di codice funzionerà? – dreamdeveloper

+0

@dreamdeveloper Rimuovendo o commentando assert e NSAssert dovrebbero rimuoverli. – bbarnhart

2

Sembra che il tuo codice contenga la macro __FILE__ da qualche parte.

Problemi correlati