How to set the Legacy Swift Versions for each Pod in Podfile
I found this while searching how to set the SWIFT_VERSION to 3.2 for Xcode 9.
Using the AirMapSDK which itself and multiple dependencies need 3.2 instead of 4.0 Here is an example of how to set pod specific SWIFT_VERSION for others that may come across this question.
post_install do |installer| installer.pods_project.targets.each do |target| if ['AirMapSDK', 'PhoneNumberKit', 'Lock', 'RxSwift', 'RxSwiftExt', 'RxCocoa', 'RxDataSources', 'ProtocolBuffers-Swift'].include? target.name target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '3.2' end end endend
You can change the if array to specify whatever pod you need to set the version too.
If you need to manage multiple Swift versions for pods, you can build a mapping.
DEFAULT_SWIFT_VERSION = '4'POD_SWIFT_VERSION_MAP = { 'Dotzu' => '3'}post_install do |installer| installer.pods_project.targets.each do |target| swift_version = POD_SWIFT_VERSION_MAP[target.name] || DEFAULT_SWIFT_VERSION puts "Setting #{target.name} Swift version to #{swift_version}" target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = swift_version end endend
Details
- CocoaPods v1.6.1
- Xcode 10.2.1 (10E1001)
Ruby code in podfile
swift_versions_of_pods = { 'swiftScan' => '4.0', 'GRDB.swift' => '4.2' }post_install do |installer| installer.pods_project.targets.each do |target| defined_swift_version = swift_versions_of_pods[target.name] next if defined_swift_version.blank? target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = defined_swift_version end endend