Tout d'abord, j'ai activé use_framework! dans Podfile.
Supposons que le projet principal est MAIN_APP et que les deux sous-projets sont FRAMEWORK_A et FRAMEWORK_B.
MAIN_APP nécessite FRAMEWORK_A et FRAMEWORK_B, et FRAMEWORK_B nécessite également FRAMEWORK_A.
Tous les projets/cibles utilisent CocoaPods pour gérer des bibliothèques tierces.
Pour l'instant, mon Podfile ressemble à:
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
J'ai ajouté manuellement FRAMEWORK_A pour créer les paramètres de FRAMEWORK_B et FRAMEWORK_A et FRAMEWORK_B pour créer les paramètres de MAIN_APP.
Tout le code se compile bien, mais lors de l'exécution de MAIN_APP, le programme plante car il ne peut pas charger Framework of PodB.
Je sais que je peux également ajouter manuellement PodB à MAIN_APP et FRAMEWORK_B, mais est-il possible de définir ce type de dépendance de cible dans Podfile?
Btw, quand pod install
, j'ai eu l'avertissement:
[!] Le fichier podfile contient des cibles pour le cadre, pour lesquelles il ne contient pas de cibles hôtes (cibles qui intègrent le cadre).
Si ce projet concerne le développement de framework, vous pouvez ignorer ce message. Sinon, ajoutez une cible au fichier podfile qui incorpore ces frameworks pour que ce message disparaisse (par exemple, une cible de test).
Comme je le sais, je peux utiliser une cible imbriquée pour des cibles hôtes telles que:
target :FRAMEWORK_A
target :MAIN_APP
end
end
Ainsi, CocoaPods configurera MAIN_APP pour utiliser FRAMEWORK_A et héritera des dépendances de pod de FRAMEWORK_A. Mais il semble que je ne peux pas le faire avec plusieurs dépendances comme:
target :FRAMEWORK_A
target :MAIN_APP
end
end
target :FRAMEWORK_B
target :MAIN_APP
end
end
Parce que la cible: MAIN_APP ne peut pas être déclarée deux fois.
Existe-t-il de meilleures solutions au lieu de définir les dépendances de pod en tant que fonction dans Podfile et de les inclure dans toutes les cibles?
C'est une excellente question et je me suis battu avec une situation similaire. Ceci est mon 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
Comme vous pouvez le constater, je n'utilise pas de framework et j'utilise un abstract_target
pour tout regrouper. Je souhaite que ces types de dépendances soient plus faciles à faire dans CocoaPods. Je sais que cela ne répond pas vraiment à votre question, mais cela pourrait néanmoins être utile.
Je pense que vous pouvez également contourner ce problème en faisant simplement FrameworkA
et FrameworkB
dans des modules locaux (bibliothèque statique). Ainsi, tout sera dupliqué pour vous et intégré correctement dans l'application hôte.
Exemples: https://github.com/rob-keepsafe/PodFrameworksIssue
master
affiche les classes en double et les frameworks comme vousdeduped
transforme les frameworks dynamiques internes en pods locaux (en tant que bibliothèques statiques) afin de les dupliquer et de les lier aux dépendances