2016-12-23 8 views
19

Po pierwsze, włączyłem use_framework! w Podfile.Jak używać CocoaPods z wieloma podprojektami Framework

Założono, że głównym projektem jest MAIN_APP, a dwa podprojekty to FRAMEWORK_A i FRAMEWORK_B.

MAIN_APP wymaga FRAMEWORK_A i FRAMEWORK_B, a FRAMEWORK_B również FRAMEWORK_A.

Wszystkie projekty/cele używają CocoaPods do zarządzania bibliotekami stron trzecich.

Na razie mój Podfile wygląda następująco:

target :MAIN_APP do 
    project 'MAIN_APP' 
    pod 'PodA' 
end 

target :FRAMEWORK_A do 
    project 'FRAMEWORK_A' 
    pod 'PodB' 
end 

target :FRAMEWORK_B do 
    project 'FRAMEWORK_B' 
    pod 'PodC' 
end 

ręcznie dodane FRAMEWORK_A zbudować ustawienia FRAMEWORK_B i oba FRAMEWORK_A i FRAMEWORK_B zbudować ustawienia MAIN_APP.

Cały kod kompiluje się dobrze, ale po uruchomieniu MAIN_APP ulega awarii, ponieważ nie może załadować Framework of PodB.

Wiem, że mogę ręcznie dodać PodB do MAIN_APP i FRAMEWORK_B, ale czy jest możliwe określenie tego rodzaju zależności docelowej w Podfile?

Btw, kiedy pod install, dostałem ostrzeżenie: [!]

Podfile zawiera cele ramowe, dla których Podfile nie zawiera cele hostów (cele, które osadzić ramy).

Jeśli ten projekt służy do opracowywania ram, możesz zignorować tę wiadomość. W przeciwnym razie dodaj cel do Podfile, który osadza te frameworki, aby ten komunikat zniknął (np. Cel testowy).

Ponieważ wiem, czy mogę używać zagnieżdżonych cel dla celów gospodarza jak:

target :FRAMEWORK_A 
    target :MAIN_APP 
    end 
end 

Więc CocoaPods będzie konfiguracja MAIN_APP używać FRAMEWORK_A i dziedziczyć zależności kapsułowymi z FRAMEWORK_A. Ale wydaje się, że nie może tego zrobić z wieloma zależnościami jak:

target :FRAMEWORK_A 
    target :MAIN_APP 
    end 
end 
target :FRAMEWORK_B 
    target :MAIN_APP 
    end 
end 

Ponieważ cel: MAIN_APP nie może być uznana za dwa razy.

Czy istnieją jakieś lepsze rozwiązania zamiast definiowania zależności pod w postaci funkcji w Podfile i uwzględnienia we wszystkich celach?

+0

jakikolwiek postęp? czy to rozwiązałeś? – zaxy78

+0

@ zaxy78 Rozdzielam je na osobne podprojekty zamiast na cele, ponieważ zauważyłem, że jeśli są w jednym projekcie, mimo że są dodawane do różnych celów, możesz importować nagłówki za pomocą '" Header.h "', ale ja chcesz wymusić użycie '' do importowania nagłówków z frameworków. –

+0

Mamy podobną strukturę, która spowodowała pewne dziwactwo po migracji do najnowszej wersji XCode i CocoaPods. Obecnie próbuje debugować, jak najlepiej zarządzać tym stylem podfile. –

Odpowiedz

0

To jest świetne pytanie i zmagałem się z podobną sytuacją. To jest mój PodFile:

platform :ios, '8.0' 

workspace 'mygreatapp.xcworkspace' 

project 'app/MyGreatApp/MyGreatApp.xcodeproj' 
project 'platform/MyGreatFramework/MyGreatFramework.xcodeproj' 

abstract_target 'This can say whatever you want' do 

    target 'MyGreatApp' do 
     project 'app/MyGreatApp/MyGreatApp.xcodeproj' 
     pod 'AFNetworking', '~> 2.6.0' 
     pod 'PromiseKit', '~> 1.5' 
     pod 'PromiseKit/Join' 
     pod 'KVOController', '~> 1.0' 
     pod 'FLAnimatedImage', '~> 1.0' 
     pod 'Crashlytics', '~> 3.3' 
     pod 'SSZipArchive' 
    end 

    target 'MyGreatAppTests' do 
     project 'app/MyGreatApp/MyGreatApp.xcodeproj' 
     pod 'OCMock', '~> 3.1' 
    end 

    target 'MyGreatFramework' do 
     project 'platform/MyGreatFramework/MyGreatFramework.xcodeproj' 
     pod 'SSZipArchive' 
    end 

    target 'MyGreatFrameworkTests' do 
     project 'platform/MyGreatFramework/MyGreatFramework.xcodeproj' 
     pod 'OCMock', '~> 3.1' 
    end 

    post_install do |installer| 
     installer.pods_project.targets.each do |target| 
     target.build_configurations.each do |config| 
      config.build_settings['ENABLE_BITCODE'] = 'NO' 
     end 
     end 
    end 
end 

Jak widać nie używam ram i używam abstract_target do grupy to wszystko razem. Chciałbym, żeby tego rodzaju zależności były łatwiejsze do zrobienia w CocoaPods. Wiem, że to nie odpowiada na twoje pytanie, ale może być pomocne.

Powiązane problemy