it-roy-ru.com

Установить цель развертывания для модуля CocoaPods

Я использую CocoaPods для управления зависимостями в моем проекте. Я написал Подфайл: 

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

Этот файл хорошо работает с CocoaPods 0.x, но я не могу скомпилировать проект после обновления до CocoaPods 1.0. После того, как я бегу 

pod update 

Я не могу скомпилировать свой проект с ошибкой:

/Users/<...>/Pods/KeepLayout/Sources/KeepAttribute.m:195:1: Невозможно синтезировать слабое свойство, поскольку текущая цель развертывания не поддерживает слабые ссылки

Я видел, что каждая библиотека построена с разными целями развертывания. Например, KeepLayout построен с целью развертывания 4.3.

Как определить цель сборки для каждой зависимости от модуля? 

30
Andrew Romanov

В то время как в некоторых версиях CocoaPod для разработчиков (а также в версиях до 1.0) цель развертывания проекта могла распространяться вплоть до пакетов, но это больше не имеет место в 1.0 . Чтобы обойти это, текущий разработчик рекомендует с помощью переустановки.

Вот подход грубой силы, чтобы принудительно установить жестко заданную цель развертывания для каждого модуля в сгенерированном проекте модулей. Вставьте это в end вашей 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
70
Alex Nauda

Поскольку «pods» project установил цель развертывания, вам просто нужно удалить развертывание target каждой цели сборки. Добавьте это в end вашей 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

Вдохновленный github post и ответом Alex Nauda.

7
DawnSong

1) Поиск IPHONEOS_DEPLOYMENT_TARGET 

2) Изменить цель развертывания iOS

 enter image description here

0
Francesco