J'utilise CocoaPods pour gérer les dépendances dans mon projet. J'ai écrit Podfile:
target 'MyApp' do
platform :ios, '8.0'
# Uncomment this line if you're using Swift or would like to use dynamic frameworks
#use_frameworks!
# Pods for MyApp
pod 'KeepLayout', :git => 'https://github.com/iMartinKiss/KeepLayout', :tag => 'v1.6.0'
pod 'EasyMapping'
target 'MyAppTests' do
inherit! :search_paths
# Pods for testing
end
target 'MyAppUITests' do
inherit! :search_paths
# Pods for testing
end
end
Ce fichier fonctionne bien avec CocoaPods 0.x mais je ne peux pas compiler le projet après avoir mis à jour CocoaPods 1.0. Après avoir couru
pod update
Je ne peux pas compiler mon projet avec une erreur:
/Users/<...>/Pods/KeepLayout/Sources/KeepAttribute.m:195:1: Impossible de synthétiser une propriété faible car la cible de déploiement actuelle ne prend pas en charge les références faibles.
J'ai vu que chaque bibliothèque est construite avec une cible de déploiement différente. Par exemple, KeepLayout est construit avec la cible de déploiement 4.3.
Comment puis-je déterminer la cible de génération pour chaque dépendance de pod?
Certaines versions de développement de CocoaPods (ainsi que les versions antérieures à 1.0) peuvent avoir propagé la cible de déploiement du projet jusqu'aux modules, mais il s'agit de ce n'est plus le cas dans la version 1.0 . Pour contourner ce problème, le développeur actuel le recommande à l'aide d'un hook post-installation.
Voici une approche de force brute pour imposer une cible de déploiement codée en dur pour chaque pod du projet Pods généré. Collez ceci à la fin de votre Podfile
:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.2'
end
end
end
Les "pods" project ayant défini la cible de déploiement, il vous suffit de supprimer le déploiement cible de chaque cible de construction. Ajoutez ceci à la fin de votre Podfile
post_install do |lib|
lib.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
end
end
end
Inspiré par le github post et la réponse d'Alex Nauda.