2013-08-29 5 views
14

Używam CocoaPods już od kilku tygodni z moją aplikacją na iOS i działa idealnie z jednym celem, który testowałem (nazwijmy to "MainApp"). Jednak teraz chcę zbudować inny cel ("MyAppLite") i zauważyłem, że kompilacja nie powiodła się (plik nie został znaleziony w jednym z plików nagłówkowych strąków).Łączenie kapsuł ze wszystkimi celami

Różnice ustawienia kompilacji Zauważyłem są następujące:

  • inne flagi Linker nie zawiera wymaganych ram w MyAppLite
  • ram/Header/Library wyszukiwania Ścieżki są puste w MyAppLite
  • Żadne ustawienia kompilacji zdefiniowanych przez użytkownika w MainApp są obecne w MyAppLite

Skąd mogę mieć pewność, że gdy uruchamiam pod install, wszystkie TA rgets mają połączone biblioteki?

Dla porównania, tutaj jest mój 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

Proszę odnieść się do http://stackoverflow.com/a/34905278/1033581 dla Cocoapods 1.0.0 kompatybilności. –

Odpowiedz

13

Można użyć dyrektywy

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 To będzie produkować libPods.a i będzie połączyć go Target1 i Target1 .

Stosowna documentation:

  • Zauważ, że cocoapods automatycznie łączy każdy cel w podfile ze swoim projektem. Z tego powodu nazwy celów powinny być zgodne. Jeśli z jakiegoś powodu chcesz określić cel w swojej podfile pod inną nazwą, można ustawić atrybut link_with:

    target :test, :exclusive => true do 
        link_with 'MyAppTests' 
    end 
    
  • Targets, domyślnie są wyłącznie, jeśli ich rodzic ma inną platformę.

  • Główny cel Podfile jest zawsze powiązany z pierwszym celem ostatecznego projektu.

+2

To jest zasadniczo to, co zrobiłem, ale musiałem zdefiniować wyraźny cel zawierający wszystkie strąki, a następnie linię 'link_with ['MyApp', 'MyAppLite']' przed listą strąków. – colincameron

+0

Czy mogę zapytać, dlaczego musiałeś to zrobić? –

+0

Nie jestem pewien, nie działałby inaczej. – colincameron

2

Od docs:

Jeśli żaden wyraźny cel jest określony, wówczas cel Pods będzie połączony z pierwszym celem w projekcie.

Możesz użyć link_with do połączenia z dalszymi celami.

zobaczyć również Multiple Targets w dokumentacji Cocoapods jeśli trzeba różne konfiguracje zależnościami dla różnych celów

+0

Ustawienia kompilacji są ustawiane automatycznie za pomocą 'pod install' - nie chcę uruchamiać ręcznie rzeczy, które powinny być poprawnie generowane automatycznie - czyż nie jest to cały punkt CocoaPods? – colincameron

+0

Również chcę ustawić dokładnie takie same zależności dla wszystkich celów. – colincameron

+0

OK. Zaktualizowałem odpowiedź. Mam nadzieję, że to pomoże. – serrrgi

24

Na CocoaPods 1.0.0, zalecenie deweloperom jest za pomocą abstract_target (ale nie jest zgodna z 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 

Na CocoaPods 0.39.0 +1,0.0 zgodność korzystając def działa dobrze (ale nie jest to zalecane przez deweloperów):

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