2013-08-29 19 views
14

Utilizzo CocoaPods da alcune settimane con la mia app iOS e funziona perfettamente con l'obiettivo che ho testato (chiamiamolo "MainApp"). Tuttavia, ora voglio creare un target diverso ("MyAppLite") e ho notato che la compilazione non è riuscita (file non trovato su uno dei file di intestazione dei pod).Integrazione di pod con tutti gli obiettivi

Le differenze nelle impostazioni di generazione che ho notato sono i seguenti:

  • Altre Bandiere linker non contengono i quadri richiesti nei MyAppLite
  • quadro/Header/Library percorsi di ricerca sono tutti vuoti in MyAppLite
  • Nessuno dei definiti dall'utente impostazioni di generazione in MainApp sono presenti in MyAppLite

Come posso assicurare che quando ho eseguito pod install, tutto ta i rgets hanno le librerie collegate?

Per riferimento, ecco la mia Podfile:

platform :ios, '5.0' 

pod 'TTTAttributedLabel', '~> 1.7.0' 
pod 'iRate', '~> 1.7.5' 
pod 'MBProgressHUD', '~> 0.6' 
pod 'FlurrySDK', '~> 4.2.3' 
pod 'ACSimpleKeychain', '~> 0.0.1' 
pod 'WEPopover', '~> 0.0.1' 
pod 'AFNetworking', '~> 1.3.1' 
pod 'Nimbus', '~> 1.0.0' 
pod 'QuincyKit', '~> 2.1.9' 
+0

Si prega di fare riferimento al http://stackoverflow.com/a/34905278/1033581 per Cocoapods 1.0.0 compatibilità. –

risposta

13

È possibile utilizzare la direttiva

platform :ios, '5.0' 

pod 'TTTAttributedLabel', '~> 1.7.0' 
pod 'iRate', '~> 1.7.5' 
pod 'MBProgressHUD', '~> 0.6' 
pod 'FlurrySDK', '~> 4.2.3' 
pod 'ACSimpleKeychain', '~> 0.0.1' 
pod 'WEPopover', '~> 0.0.1' 
pod 'AFNetworking', '~> 1.3.1' 
pod 'Nimbus', '~> 1.0.0' 
pod 'QuincyKit', '~> 2.1.9' 

link_with "MyApp" 
link_with "MyAppLite" 

link_with Ciò produrrà libPods.a e si collegherà al Target1 e Target1 .

Rilevante documentation:

  • nota, che cocoapods collega automaticamente ogni destinazione nel podfile con il progetto. Per questo motivo i nomi degli obiettivi dovrebbero corrispondere. Se per qualsiasi motivo si desidera specificare un bersaglio nella vostra podfile con un nome diverso, è possibile impostare l'attributo link_with:

    target :test, :exclusive => true do 
        link_with 'MyAppTests' 
    end 
    
  • Obiettivi, per impostazione predefinita, sono esclusivi se il loro genitore ha una piattaforma diversa.

  • L'obiettivo principale del Podfile è sempre collegato al primo obiettivo del progetto finale.

+2

Questo è essenzialmente ciò che ho fatto, ma ho dovuto definire un target esplicito contenente tutti i pod, seguito dalla riga 'link_with ['MyApp', 'MyAppLite']' prima dell'elenco dei pod. – colincameron

+0

Posso chiederti perché hai dovuto farlo? –

+0

Non sono sicuro, altrimenti non funzionerebbe. – colincameron

2

Dalla documentazione:

Se non viene specificato alcun obiettivo esplicito, allora l'obiettivo Pods sarà collegato con il primo obiettivo del progetto.

È possibile utilizzare link_with per collegarsi con ulteriori destinazioni.

vedono anche Multiple Targets nella documentazione Cocoapods se avete bisogno di diverse configurazioni di dipendenza per target diversi

+0

Le impostazioni di generazione sono impostate automaticamente con 'pod install'. - Non voglio iniziare a fare scherzi manualmente con cose che dovrebbero essere generate automaticamente correttamente - non è questo il punto principale di CocoaPods? – colincameron

+0

Inoltre, voglio impostare esattamente le stesse dipendenze per tutti i target. – colincameron

+0

OK. Ho aggiornato la risposta. Spero che sia d'aiuto. – serrrgi

24

Per CocoaPods 1.0.0, raccomandazione da sviluppatori sta usando abstract_target (ma non è compatibile con 0.39.0):

platform :ios, '5.0' 

abstract_target 'defaults' do 
    pod 'TTTAttributedLabel', '~> 1.7.0' 
    pod 'iRate', '~> 1.7.5' 
    pod 'MBProgressHUD', '~> 0.6' 
    pod 'FlurrySDK', '~> 4.2.3' 
    pod 'ACSimpleKeychain', '~> 0.0.1' 
    pod 'WEPopover', '~> 0.0.1' 
    pod 'AFNetworking', '~> 1.3.1' 
    pod 'Nimbus', '~> 1.0.0' 
    pod 'QuincyKit', '~> 2.1.9' 

    target 'MyApp' 
    target 'MyAppLite' 
end 

Per CocoaPods 0.39.0 + 1.0.0 compatibilità, usando def funziona bene (ma non è consigliato per sviluppatori):

platform :ios, '5.0' 

def default_pods 
    pod 'TTTAttributedLabel', '~> 1.7.0' 
    pod 'iRate', '~> 1.7.5' 
    pod 'MBProgressHUD', '~> 0.6' 
    pod 'FlurrySDK', '~> 4.2.3' 
    pod 'ACSimpleKeychain', '~> 0.0.1' 
    pod 'WEPopover', '~> 0.0.1' 
    pod 'AFNetworking', '~> 1.3.1' 
    pod 'Nimbus', '~> 1.0.0' 
    pod 'QuincyKit', '~> 2.1.9' 
end 

target 'MyApp' do 
    default_pods 
end 

target 'MyAppLite' do 
    default_pods 
end