2015-11-09 31 views
10

Ho una struttura dinamica che si collega a Google Maps (che è, per quanto vedo, ancora una specie di libreria statica, se non esattamente, solo con un framework involucro).Libreria statica di collegamento all'interno di una struttura dinamica (Cocoa Touch)

Il problema è che il framework si collega alla libreria statica e sembra anche includere direttamente il suo codice, in quanto non è necessario collegare o incorporare Google Maps nell'app che utilizza il framework e tutto funziona correttamente. Tranne se lavoro con Google Maps anche all'interno dell'app.

O io ottengo "simboli non definiti per l'architettura XY" durante la fase di compilazione, o collego Google Maps contro di esso e poi ho un muro di avvertenze nel debug-console durante app-lancio, come:

Classe GMSPolyline2D è implementato sia in /.../Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework e /..../Bundle/Application/7C73324B-4A42-4063-98AA-879345997DE6/MyApp .app/MyApp. verrà utilizzato uno dei due. Quale è indefinito.

C'è un modo per collegarsi solo a Google Maps nel framework, ma NON includere anche i simboli nel framework-product? Funziona per i framework dinamici, ma le librerie statiche sembrano essere solo incluse. Ho già provato il collegamento debole con -weak_framework e -weak_library, ma non sembra funzionare.

In realtà, non sono riuscito a trovare Xcode per trovare il binario GoogleMaps per -weak_library nella sua dir framework, anche con il collegamento diretto all'interno della cartella .framework come percorso di ricerca della libreria.

Dato che sono l'unico utente del mio framework, posso applicare che ogni app che utilizza il framework DOES include il framework di Google Maps. Finora l'app funziona bene tranne gli avvertimenti (e finora non importa quale delle due classi è utilizzata in fase di esecuzione, poiché entrambi dovrebbero essere gli stessi). Tuttavia, vorrei dormire meglio se ci fosse una soluzione più bello :)


Edit: ho potuto ottenere -weak_library al lavoro semplicemente consegnando il percorso assoluto direttamente nella sezione linker-bandiera invece di utilizzare la libreria Percorso di ricerca impostazione. Tuttavia, il problema rimane, ovviamente è ancora incluso nel framework.

+1

Trovato un problema simile, con una specie di soluzione, ma sembra essere più di una soluzione mi prenderà in considerazione, ma se qualcuno ha un'idea più pulita, io. lo apprezzerei. http://stackoverflow.com/a/29603185/5460596 –

+0

Hai trovato una soluzione per questo? –

+0

Hai trovato una soluzione per questo? – Cosmin

risposta

0

Non fare Dat

La pratica migliore è quella di posizionare tutto il codice di Google Maps-dipendente in una separata libreria che si collega sia alla vostra biblioteca e la libreria statica di Google Maps.

(Credit: la risposta di Robert Napier a How to compile static library that includes optional classes that depend on a third party library

+0

sì, sono tornato a convertire di nuovo il mio framework in una libreria statica e collegarlo al target finale. Sfortunatamente, questo significa che non ho il supporto di Swift, ma bene .. –