2013-10-04 16 views
5

Sono stato in fase di refactoring del codice e ho creato una libreria statica che sto utilizzando in un framework che viene utilizzato in alcune app. Sto usando cocoapod e sto avendo problemi ad integrare correttamente la mia nuova libreria statica nel podspec.Cocoapods podspec issue

Sto trovando che i build non funzionano perché la libreria statica manca nella compilazione. Se aggiungo manualmente la libreria statica all'app finale, il framework e l'app funzionano correttamente. Un team di build genera le versioni finali delle app e, a causa di ciò, sono stato solo responsabile dell'aggiornamento di podspec solo per il framework.

È possibile modificare la specifica del pod per impostare la libreria statica come una libreria collegata che viene visualizzata nelle fasi di creazione dell'app finale?

UPDATE:

Quando si aggiunge il lib statica all'attributo framework.library del mio sub spec mi sto library not found for -lMyStaticLib

SUBSPEC PER RIFERIMENTO:

s.subspec 'MyStaticLibrary' do |msl| 
    mss.source_files = 'FrameworkSource/My-Static-Library/*.{h,a}' 
    msl.library = 'MyStaticLib' 
    msl.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**', 'LIBRARY_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**' } 
    #msl.frameworks = 'MyStaticLib' 
    end 

UPDATE 2: I modificato l'attributo su msl.vendored_libraries = 'MyStaticLib' Percorsi validati anche in podspec. Tutto 'sembra' da verificare. Sto ancora ricevendo errori di compilazione. Quando ho costruito per un dispositivo (ottengo lo stesso errore ma per i386 quando costruire per simulatore):

Undefined symbols for architecture armv7: 
    "_OBJC_CLASS_$_MyStaticLibrary", referenced from: 
     objc-class-ref in MyFramework(FileInFramework.o) 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Ho anche verificato ancora una volta che, se mi basta andare a fasi di creazione della app e attraversare i cartelle baccelli e manualmente aggiungi il file MyStaticLibrary.a al progetto che genera senza problemi.

+0

Ancora nessuna correzione? Mi sto imbattendo in un problema simile e apprezzerei la tua saggezza nel caso in cui tu riuscissi a risolverlo. – brainray

risposta

3

È possibile aggiungere definitivamente il framework nel podspec. Controlla la wiki entry on the Podspec format.


Edit: Ah, quello che stai cercando o vendored_frameworksvendored_libraries che è stata aggiunta in 0.23.0. Sembra che quelli non siano stati ancora aggiunti al wiki. Aggiorneremo quello ora!

+0

Penso che il link che intendevi fosse https://github.com/CocoaPods/CocoaPods/wiki/The-podspec-format I tuoi link a Steelcase ;-) Ho aggiornato il mio post con maggiori informazioni. – propstm

+0

Oops! Risolto il problema e aggiornata la mia risposta. – MishieMoo

+0

Ho aggiornato il mio post con maggiori informazioni. Ora sto ricevendo errori di architettura non definiti. È come se il progetto vedesse la libreria ma non potesse accedere a nulla in essa. – propstm

2

Provare a rinominare il file MyStaticLib.a in libMyStaticLib.a. Stavo anche ricevendo l'errore library not found for -lMyStaticLib e l'ho risolto aggiungendo un prefisso lib al nome file.

+0

Anche questo era un mio problema, grazie –

1

Per l'errore Library not found for -lxxxxxxx, se si nome libreria statica è MyStaticLib.a, prova a rinominare a libMyStaticLib.a e lo mise in perserve_paths proprietà in modo che la vostra libreria statica non saranno rimossi dopo essere stato scaricato:

msl.libraries = 'MyStaticLib' 
msl.perserve_paths = 'libMyStaticLib.a' 

Poi, vai alle impostazioni di costruzione del tuo progetto: per assicurarti di avere il parametro -lMyStaticLib in "Altri linker flag".

per il braccio e le questioni architettura i386, ARM significa dispositivo iOS, e i386 significa simulatore, meglio per rendere la vostra libreria statica universale, allora funzionerà su entrambe le architetture.

+0

Perché ho bisogno di '' Other Linker Flags''? Non è sufficiente metterlo in "LIBRARY_SEARCH_PATHS''? – confile

0

cambiamento del:

msl.vendored_libraries = 'MyStaticLib'

a:

msl.vendored_libraries = 'FrameworkSource/My-Static-Library/libMyStaticLib.a'

e cocoapods aggiungerà un percorso di ricerca.