やること
XCode9では、Swift4.0とSwift3.2が利用できます。
オープンソースのライブラリはアップデートの状況がマチマチなので、
プロジェクトがSwift4.0なのに、利用したいライブラリがSwift3.2系しかなかったりする場合がままあります。
CocoaPodsでパッケージ管理を行う場合で、
プロジェクトのSwiftバージョンに関わらず、それぞれのライブラリが対応しているSwiftバージョンでコンパイルされるように、
そしてそれをPodfileで管理できるように設定していきます。
前提
知識
- CocoaPodsの環境が整っている
- XCodeを使える
筆者の環境
- macOS sierra
- CocoaPods 1.3.1
- XCode 9
結論
恐らく色々な方法があると思いますが、ここでは**「デフォルトをSwift3.2として、Swift4に対応しているライブラリを個別に書き出す」**ようにします。
Podfileで、以下のように書きます。
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
platform :ios, '9.0'
def install_pods
pod 'Some-Swift4-Library1'
pod 'Some-Swift4-Library2'
pod 'Some-Swift3-Library1'
pod 'Some-Swift3-Library2'
target 'SomeProject' do
install_pods
end
swift4_names = [
'Some-Swift4-Library1',
'Some-Swift4-Library2'
]
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if swift4_names.include? target.name
config.build_settings['SWIFT_VERSION'] = "4.0"
else
config.build_settings['SWIFT_VERSION'] = "3.2"
end
end
end
end
「pod install」を実行して、恙無く完了すれば成功です。
ポイント
「swift4_names」で定義したライブラリ名だった場合には、ライブラリのビルド設定にて SWIFT_VERSION=4.0 を設定しています。
本当にライブラリ毎にSwiftバージョンが設定されているかの確認方法
「pod install」を実行した後に、『{プロジェクト名}.xcworkspace』を開いて、Podsプロジェクトを覗きます。
Swift4で指定したライブラリ、指定していないライブラリが、それぞれ正しい「Swift Language Version」が設定されていればOKです。
- swift4指定したライブラリ例
- swift3指定したライブラリ例
補足
Podfileで定義せずに、XCodeより同『Swift Language Version』の項目を手動で変更することでも、ライブラリ毎にSwiftバージョンを切り替えることができます。
ただしその場合は、「pod install」等でのリビルドの毎に、デフォルト設定に戻ってしまいますので、
Podfileで一元的に管理する方がよいです。