2013-08-29 10 views
14

Ich verwende CocoaPods seit ein paar Wochen mit meiner iOS App und es funktioniert perfekt mit dem einen Ziel, das ich getestet habe (nennen wir es "MainApp"). Ich möchte nun ein anderes Ziel erstellen ("MyAppLite") und festgestellt haben, dass der Build fehlgeschlagen ist (Datei nicht in einer der Header-Dateien der Pods gefunden).Integrieren von Pods mit allen Zielen

Die Unterschiede in den Build-Einstellungen habe ich bemerkt, sind wie folgt:

  • Andere Linker Flags in die erforderlichen Rahmenbedingungen enthält keine MyAppLite
  • Rahmen/Header/Bibliothek Suchpfade sind alle leer in MyAppLite
  • Keiner der Benutzerdefinierte Build-Einstellungen in MainApp vorhanden sind in MyAppLite

Wie kann ich sicherstellen, dass, wenn ich laufen pod install, alle ta RGETS haben die Bibliotheken verknüpft?

Als Referenz hier ist mein 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

Bitte beachten Sie http://stackoverflow.com/a/34905278/1033581 für Cocoapods 1.0.0 Kompatibilität. –

Antwort

13

Sie benötigen die link_with Direktive benutzen

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" 

Diese libPods.a produzieren wird, und es wird es Target1 verknüpfen und Target1 .

Relevante documentation:

  • Hinweis, die jedes Ziel in der podfile mit Ihrem Projekt automatisch verbindet cocoapods. Aus diesem Grund sollten die Namen der Ziele übereinstimmen. Wenn aus irgendeinem Grund wollen Sie mit einem anderen Namen ein Ziel in Ihrem podfile angeben, können Sie das link_with Attribut:

    target :test, :exclusive => true do 
        link_with 'MyAppTests' 
    end 
    
  • Ziele, die standardmäßig ausschließen, wenn ihre Eltern eine andere Plattform hat.

  • Das Hauptziel des Podfiles ist immer mit dem ersten Ziel des endgültigen Projekts verknüpft.

+2

Dies ist im Wesentlichen, was ich getan habe, aber ich musste ein explizites Ziel definieren, das alle Pods enthält, gefolgt von der Zeile 'link_with ['MyApp', 'MyAppLite']' vor der Liste der Pods. – colincameron

+0

Kann ich fragen, warum Sie das tun mussten? –

+0

Nicht sicher, es würde sonst nicht funktionieren. – colincameron

2

Aus der Dokumentation:

Wenn kein explizites Ziel angegeben wird, dann wird das Pods Ziel wird mit dem ersten Ziel in Ihrem Projekt verknüpft werden.

Sie können link_with verwenden, um mit weiteren Zielen zu verknüpfen.

Siehe auch Multiple Targets in der Cocoapods Dokumentation, wenn Sie unterschiedliche Abhängigkeits Konfigurationen für verschiedene Ziele

+0

Build Einstellungen werden automatisch mit 'pod install' eingestellt - ich möchte nicht manuell mit Dingen, die korrekt automatisch generiert werden sollten, herumhantieren - ist das nicht der ganze Sinn von CocoaPods? – colincameron

+0

Außerdem möchte ich genau die gleichen Abhängigkeiten für alle Ziele festlegen. – colincameron

+0

OK. Ich habe die Antwort aktualisiert. Ich hoffe es hilft. – serrrgi

24

Für CocoaPods 1.0.0 Empfehlung devs verwendet abstract_target (aber nicht kompatibel mit 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 

Für CocoaPods 0.39.0 + 1,0.0 Kompatibilität, def mit funktioniert gut (aber nicht von Devs empfohlen):

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