LoginSignup
20
12

More than 5 years have passed since last update.

Swift4とSwift3が混在するライブラリたちをCocoaPodsで何とかする

Last updated at Posted at 2018-02-13

やること

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指定したライブラリ例 swift4指定したライブラリ例


  • swift3指定したライブラリ例 swift3指定したライブラリ例

補足

Podfileで定義せずに、XCodeより同『Swift Language Version』の項目を手動で変更することでも、ライブラリ毎にSwiftバージョンを切り替えることができます。

ただしその場合は、「pod install」等でのリビルドの毎に、デフォルト設定に戻ってしまいますので、
Podfileで一元的に管理する方がよいです。

20
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
12