Set deployment target for CocoaPods's pod

Andrew Romanov picture Andrew Romanov · May 11, 2016 · Viewed 32.6k times · Source

I use CocoaPods to manage dependencies in my project. I've written 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

This file works well with CocoaPods 0.x but I can't compile project after I've updated to CocoaPods 1.0. After I've run

pod update 

I can't compile my project with error:

/Users/<...>/Pods/KeepLayout/Sources/KeepAttribute.m:195:1: Cannot synthesize weak property because the current deployment target does not support weak references

I've seen that every library is builded with different deployment target. For example KeepLayout is builded with 4.3 deployment target.

How I can determine build target for every pod dependency?

Answer

Alex Nauda picture Alex Nauda · May 18, 2016

While some development versions of CocoaPods (as well as pre-1.0 versions) may have propagated the deployment target of the project down to the pods, this is no longer the case in 1.0. To work around this, the current developer recommends using a post-install hook.

Here's a brute force approach to force a hard-coded deployment target for every pod in the generated Pods project. Paste this at the end of your 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