2015-03-28 12 views
5

cercando di costruire una libreria Cocoapod che dipende di altra libreria Cocoapod pubblicato che possiedo, ha ottenuto il progetto in XCode per costruire OK, ma in esecuzione pod lib lint di comando per il controllo pod validità non riesce con error: include of non-modular header inside framework module su i file di intestazione della libreria (pod) a cui sto dipendendo. Tutta la fonte è Obj-C non Swift.Creazione di un baccello che si basa su un altro pod

Ho provato quanto segue, in base alle indicazioni fornite here

  • Impostazione dei file di intestazione della biblioteca dipendente come public invece di project
  • Impostazione CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES per ogni bersaglio
  • verificare che il relativo le intestazioni nelle fasi di compilazione sono sotto public.

ma il problema persiste, non posso pubblicare il pod né testarlo.

Aggiornamento quando io commento la linea s.dependency 'OldPodIDependOn' nel mio file podspec del mio nuovo pod poi errore scompare ma le intestazioni dipendenti non si trovano. se non si include il pod io dipendo nel Podfile nella cartella ./Example, in questo modo:

target 'NewPod', :exclusive => true do 
    pod "NewPod", :path => "../" 
    pod "OldPodIDependOn", :path => "../../OldPodIDependOn/" 
end 

quindi progetto sarà solo non costruire in XCode dal momento che i file OldPodIDependOn non fanno parte del progetto. Ho un po 'di problemi con la gallina o con l'uovo.

Update 2 provato anche rimuovere il componente :path => "../../OldPodIDependOn/" per fare riferimento al pod che è stato pubblicato, invece di un locale, uno - non aiuta.

pena ricordare che questo pod includerà un'interfaccia utente, quindi, uno storyboard sarà incluso e referenziato, ho aggiunto s.resources = 'Pod/Classes/UI/NewPod.storyboard' riga al file podspec, e rimosso lo storyboard dal bersaglio pod compilare sorgenti (altrimenti Xcode non costruire) . Non penso che questo abbia qualcosa a che fare con il problema, ma vale la pena menzionarlo, forse sto facendo qualcosa di sbagliato lì dentro.

Cosa sto sbagliando? Qualsiasi aiuto sarà molto apprezzato!

risposta

4

Per risolvere definitivamente questo problema, ho dovuto scartare lo spazio di lavoro creato da pob lib create - non c'era modo di aggirarlo, ho provato tutte le combinazioni possibili/raccomandazioni/modifiche al codice per eliminare gli errori di "intestazione non modulare all'interno di framework" ma niente sembrava funzionare. pod lib lint SEMPRE fallito.

ho creato il mio progetto Xcode libreria statica da zero, quindi eseguire pod update su di esso dopo aver aggiunto il baccello dipendente al Podfile, poi creato un file .podspec per questo lib e ha aggiunto i file di intestazione pod dipendenti ai "Copia file" fase di compilazione del target lib statico + file libPods.a alla fase di build "Link Binary with libs". Puf! non più errori di "intestazione non modulare" da pod lib lint, anche se praticamente sto facendo esattamente la stessa cosa. Lezione appresa è che pod lib create non è raccomandato per TUTTI i casi di cocoapod.

+0

In realtà, il problema non modulare si riposa solo nel framework dinamico quando si costruisce cocoapods, se si è usato il libPods.a per importarlo, esattamente non lo ha fatto. – Itachi

1

In generale error: include of non-modular header inside framework module implica che uno dei file di intestazione all'interno del framework risultante (i lacci CocoaPods per i framework e le librerie ora) non è archiviato all'interno del framework o classificato come intestazione pubblica.

Questo in genere può essere risolto spostando lo imports esterno nei file di implementazione, vedere questo Modified to support using framework #353.

+0

Ho rimosso tutte le intestazioni di OldPod dalle intestazioni NewPod e le ho spostate nei file di implementazione. Ancora non funzionerà. Ora due file H della libreria pod che sto cercando di costruire dovrebbero essere pubblici - quindi non so cosa intendi quando dici 'classed come public header'. Il problema è che l'errore che sto ottenendo è per la creazione di OldPod (da cui dipende NewPod), sebbene questo pod sia attivo e pubblicato. Ancora non riesco a capirlo ...: -/ – mindbomb

+0

c'è un modo per forzare 'pod lib lint' da compilare usando" consenti include non modulare in moduli framework = SÌ "? è impostato come SÌ nel progetto XCode, non è sicuro se questo influisce sul rilascio di librerie di librerie – mindbomb

+0

No, tutti i metadati sono conservati all'interno di podspec, eventuali modifiche di Xcode non si riflettono nel pod. Esegui con '--verbose' e ​​lo vedrai scaricando e creando il proprio xcodproj. – orta

2

Ho avuto lo stesso problema, e ho usato

pod lib lint MyPod.podspec --allow-warnings --use-libraries 

Quando si aggiunge l'opzione --use-librerie, ha funzionato.

+0

Bel colpo, ho provato un sacco di cose prima di questo. Funziona :) grazie – tryp

+0

Grazie !! Funziona. – Nori

Problemi correlati