2016-02-23 35 views
5

Sto lavorando allo sviluppo di pod per un team di sviluppo iOS (su repository privato). Il mio pod di base C/Obj-C di basso livello contiene una libreria statica con alcune intestazioni e viene utilizzato come dipendenza in altri pod (inviato con --use-libraries).Pod privato con libreria statica insieme a swift pod

Ora che il team iOS vuole integrare i pod Swift, è stato necessario aggiungere l'opzione use_framework! nel Pod dei propri progetti. Naturalmente, hanno ottenuto il seguente errore durante pod install:

L'obiettivo 'XXX' ha dipendenze transitive che includono statici binari

ho trascorso una mezza giornata sul web alla ricerca di un modo per fare i miei pod compatibili con l'opzione use_framework!, invano. Questo è molto frustrante, poiché i pod dei servizi di Google sono la dimostrazione che è possibile aggirare questo problema in modo pulito (non con il trucco verify_no_static_framework_transitive_dependencies): il pod principale e quasi tutte le sue dipendenze contengono librerie statiche e tutto funziona perfettamente insieme ai pod Swift . Esemplare con Google/SignIn che dipende da Google/Core (vendored_libraries: Libraries/libGGLCore.a) e GoogleSignIn (vendored_libraries: Libraries/libSignIn.a).

Qualche idea su cosa posso fare per rendere i miei pod compatibili con l'opzione ?

Grazie a tutti,

Cheers,

Tom

+0

Hey Tom, Anche io sto combattendo con questo ... E sinceramente non ho la minima idea in questo momento. Quello che mi stavo chiedendo: sei sicuro che Google ha fatto il trucco? Presumo che GoogleSignIn sia una libreria statica scritta in Objective-C. Quindi mi correggono se mi sbaglio, non devono usare "use_framework!" a tutti ... – niggeulimann

+0

Sì, ma presumo che GoogleSignIn sia statico ... – niggeulimann

+0

Google/SignIn pod dipende da Google/Core pod e GoogleSignIn pod che contengono entrambe solo librerie statiche (eseguibili .a) e intestazioni. Fondamentalmente come i miei pod. Se crei un podfile con il pod Google/SignIn, un pod rapido (ad esempio Alamofire) e l'opzione 'use_framework!', L'installazione _pod funziona perfettamente. Se faccio lo stesso con il mio pod invece di Google/SignIn, ho l'errore "Transitive dependencies" ... Non riesco a capire cosa hanno fatto:/ – LeT0C

risposta

3

Credo di aver trovato un hack per il mio problema. Questo è abbastanza strano, ma direi che è abbastanza pulito da usarlo in produzione;)

L'ho trovato here. L'idea è semplicemente di includere un file sorgente (anche uno vuoto) nella tua lista source_files all'interno del tuo podspec.

In sostanza, la sezione di fonte della mia podspec assomiglia a questo:

s.source_files = "myLib/Empty.m", "myLib/Headers/*.h" 
s.vendored_libraries = "myLib/myLib.a" 

L'unica modifica che ho fatto è quello di aggiungere "myLib/Empty.m" nei file di origine (Empty.m è rigorosamente vuoto) . Senza di esso, ho sistematicamente le dipendenze transitive quando I installazione pod. Con esso, installazione pod funziona correttamente. Ha funzionato per me sia con Cocoapods 0.0.39 che 1.0.0.beta.4.

Bene, sembra che sia una soluzione non così sporca, ma non sono sicuro che funzionerà in ogni caso. E non è una buona notizia sulla pulizia di Cocoapods ...

Come ho menzionato prima nei commenti, Google sembra aver trovato una soluzione più pulita. Quindi se qualcuno ha un'idea della vera soluzione pulita, per favore condividi!

Cheers,

Tom

PS: Penso che il nome del file DirtyCocoapodHack.m invece di vuoto.m, certo che lo adoreranno nella squadra di sviluppo;)

Problemi correlati