Le librerie di riferimento non sono incluse (di default) nel prodotto della libreria statica. Il conflitto del linker che stai vedendo è più probabilmente il risultato sia della tua libreria statica che dell'app client utilizzando sia l'obiettivo Pod (implicito) predefinito.
Ogni obiettivo generato da Cocoapods include un file "Pods- target -dummy.m" compilato nel prodotto; se usi il target di pod predefinito, viene chiamato semplicemente "Pods-dummy.m". Quando sia la libreria che il client utilizzano la destinazione predefinita, i simboli identici prodotti dalla compilazione dei file fittizi causeranno un errore di collegamento.
Ho provato personalmente una variazione di Craig's answer e ho riscontrato che l'istruzione è anche responsabile dell'aggancio dell'xcconfig generato da Cocoapods, che fornisce i flag del compilatore che controllano il percorso di ricerca dell'intestazione. È possibile aggiungere manualmente xcconfig (o le impostazioni del progetto del percorso di ricerca dell'intestazione), ma sono andato alla ricerca di una soluzione ripetibile per il mio team.
La mia soluzione è quella di creare un obiettivo esplicito per la biblioteca, con un nome che è improbabile da causare conflitti con un progetto client (ad esempio, il nome della libreria):
target 'XYZLibrary' do
pod 'AFNetworking', '2.5.2'
...
end
è possibile includere un'istruzione link_with
all'interno del blocco target
se il nome della destinazione della libreria statica (nel progetto Xcode) è diverso, ma se è presente un solo obiettivo, di solito preferisco utilizzare lo stesso nome in entrambe le posizioni, rendendo inutile link_with
.
Se si dispone di un target di test unitario, creare due target separati. (. Io attualmente def
una serie di pod comuni che vengono utilizzati in entrambi gli obiettivi, dal momento che gli obiettivi astratti non sono attualmente un'opzione, ma possono essere un giorno) Ecco come si presenta:
def common_pods
pod 'AFNetworking', '2.5.2'
end
target 'XYZLibrary' do
common_pods
end
target 'XYZLibraryTests' do
common_pods
end
La chiave è quella di non avere elementi pod
nella radice del Podfile, in modo che Cocoapods non generi una destinazione predefinita. In questo modo, ogni prodotto riceve un esclusivo "Baccello- target -dummy.m" e non c'è conflitto quando questi file oggetto sono collegati insieme.
Se la risposta che hai aggiunto è quella corretta, contrassegnala come tale in modo che questa domanda non venga più visualizzata come aperta. – memmons