How-to: Silence individual warnings for select cocoapods

As usual, Xcode 9 introduced new default warnings and tightened existing ones. Some of these changes don’t seem to get applied to existing projects during the upgrade check. For better or worse though, running pod install or pod update has the effect of setting warnings for all pods like it’s a new project. This led to me seeing a lot of warnings in the form of 'RandomCocoaTouchAPI' is only available on iOS 10.0 or newer in certain pods. The build setting responsible is CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE.

Since there’s no telling when these warnings are going to be fixed, if ever, I used the following post_install snippet in my Podfile to manually relax just this setting on the offending pods. It’s a better solution than suppressing all warnings. It also prints out a notice to remind me to check later if the warnings have been fixed.

post_install do |installer|
  # Manually relax CLANG_WARN_UNGUARDED_AVAILABILITY for some pods temporarily
  unguardedAvailabilityTargets = ['FBSDKCoreKit']
  installer.pods_project.targets.each do |target|
    if unguardedAvailabilityTargets.include? target.name
      target.build_configurations.each do |config|
        config.build_settings['CLANG_WARN_UNGUARDED_AVAILABILITY'] = 'YES'
      end
      puts "CLANG_WARN_UNGUARDED_AVAILABILITY was set to YES for #{target.name}"
    end
  end
end

If you don’t care to enumerate individual pods, you can also change the setting at the pod project level.

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings['CLANG_WARN_UNGUARDED_AVAILABILITY'] = 'YES'
    puts "CLANG_WARN_UNGUARDED_AVAILABILITY was set to YES for all pods"
  end
end