Ho un progetto Xcode che è essenzialmente una singola app che viene incorporata in diversi obiettivi quasi identici. Ho spostato quasi tutte le impostazioni di configurazione delle build in posizioni centrali, ma non riesco a capire come spostare il collegamento con una libreria statica (libMantle.a) su xcconfig. Ho provato i flag -framework
e -l
, come sto usando per varie altre librerie, ma non funzionano. C'è un modo per ottenere file .a dal pannello Link binary with Libraries, quindi non è necessario mantenere tutti i target sincronizzati manualmente?Collegamento binario con libreria statica in xcconfig
risposta
capito ...
Diciamo che si desidera collegare contro il file libGoogleAnalyticsServices.a
. Ci sono fondamentalmente tre cose che dovresti avere nel tuo .xcconfig per farlo funzionare.
Prima di tutto, assicurati di avere il percorso della libreria nel percorso di ricerca. Quindi è necessario passare due flag per rendere felice il linker -L
con il percorso della directory e -l
con la libreria.
Mettere tutto insieme ti porterà qualcosa di simile:
LIBRARY_SEARCH_PATHS = $(inherited) "$(SRCROOT)/Vendor/Google Analytics"
OTHER_LDFLAGS = $(inherited) -L"$(SRCROOT)/Vendor/Google Analytics" -lGoogleAnalyticsServices
(si avrebbe bisogno di regolazione per i vostri percorsi relativi)
La cosa più utile per ottenere questo risolto era il registro Navigatore (comando + 8 in Xcode). Inserendo la libreria statica nel pannello Fasi di creazione Link Binary With Libraries
e realizzando una compilazione di successo, è possibile visualizzare i dettagli del passaggio del linker nei registri e vedere come sta passando la libreria di Analytics al compilatore. Da lì è solo la replica di quei flag in xcconfig.
Posso chiedere come gestisci i file di origine per vari target? Li aggiungi anche ai file xcconfig? È possibile? – vinzenzweber
I file xcconfig specifici della destinazione diventano piuttosto disordinati, dal momento che non esiste un vero e proprio modo di farlo. Raramente ho progetti i cui obiettivi hanno dipendenze di librerie drasticamente diverse, però. Cosa stai cercando di fare in particolare? – farski
Ho un progetto con 9 obiettivi. Ho solo bisogno di questi obiettivi per impostare UN SINGOLO macro del preprocessore per ciascun target. Principalmente per modificare l'URL dell'API di base per diversi ambienti (sviluppo, gestione temporanea, produzione). Quindi mi piacerebbe avere un singolo file che specifica la configurazione di build di base, inclusi tutti i file di origine e le risorse da copiare. – vinzenzweber