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

やること

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で一元的に管理する方がよいです。


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。