ios - generate - cocoapods documentation



La classe X è implementata sia in<framework> che in<application>, uno dei due verrà utilizzato, quale non è definito (3)

Sto ricevendo questo avviso:

Class X is implemented in both <framework> and <application> one of the two will be used, which one is undefined

Questo avviso è coperto un po 'attraverso il web ma non ho trovato nulla che risponda al problema specifico che sto avendo.

Scenario

Ho creato MyFramework e MyApplication (come applicazione test / demo per MyFramework).

MyFramework usa un CocoaPod (che chiamerò CoolPod), che voglio usare anche in MyApplication (ed è ragionevole presumere che anche un utente di MyFramework lo farebbe).

Devo essere in grado di distribuire MyFramework come un .framework (per closed source). Tuttavia, questo significa che MyFramework incorpora CoolPod nella sua libreria compilata.

Ora quando importo MyFramework e CoolPod in MyApplication ottengo questo conflitto (emettendo l'avviso mostrato sopra) poiché le classi di CoolPod sono già incluse nella libreria di MyFramework (come è incorporato CoolPod).

Quindi abbiamo questa struttura:

CoolPod -> MyFramework \
                        MyApplication
               CoolPod /

Domanda

Come evito questo conflitto?

  • C'è un modo per il mio MyApplication fornire CoolPod a MyFramework?
  • Devo collegare le intestazioni di CoolPod tramite MyFramework?

Ho pensato di includere le intestazioni di CoolPod (ma non la sua lib) in MyApplication, tuttavia questo sembra eccessivamente complesso per quello che dovrebbe essere un caso semplice.

Ogni aiuto è molto apprezzato, questo mi sta davvero bloccando in questo momento.

Grazie,

Indaco

https://ffff65535.com


La mia soluzione era prendere il codice sorgente dal cacao e creare un Cocoa Touch Framework per questo. Poi ho collegato il framework alla mia API e alla mia app di test. Questo non è eccezionale ma è tutto ciò che potrei fare rapidamente. Credo che Cocoapods stia lavorando su framework di supporto in modo che questa soluzione possa essere superata abbastanza presto.

La mia azienda utilizza anche gradle per le dipendenze (java) e lo script di compilazione. Così ho creato un compito groovy / gradle build che costruisce il mio framework e i miei framework di supporto (framework cocoapod) e crea da loro un framework universale. Quindi toglie la cerniera a tutti i quadri. Ciò significa che posso distribuire uno zip con tutti i requisiti. Questo ovviamente non è il modo migliore per distribuirlo (ci sposteremo verso la distribuzione attraverso Cocoapods con dipendenze dai nostri framework closed source), ma è veloce da configurare.


Per le librerie statiche closed-source raccomandiamo cocoapods-packager . Non sono sicuro che sia il supporto per i framework.


Una soluzione è attivare use_frameworks! nel Podfile del framework. Quindi puoi ancora compilare il tuo framework e incorporare il tuo framework nell'app di destinazione. I messaggi di avviso scompariranno (è semplicemente perché i pod del framework sono conformi a un altro framework, ma non lo si incorpora nell'app di destinazione, quindi l'app farà riferimento al proprio binario.)

Ma questa non è una buona soluzione per due motivi: 1. È necessario assicurarsi che l'app di destinazione includa i pod necessari necessari per il framework. 2. L'app potrebbe utilizzare diverse versioni pod per il framework. Se sia il framework che l'app si riferiscono allo stesso binario del pod, potrebbe causare un arresto anomalo.

Dubito che ci sia una buona soluzione per questo problema.





ios-frameworks