CocoapodsでSwiftの異なるversionを指定する

はじめに

Rubiという翻訳アプリをリリースしているのですが、その中で使用しているSwiftyTesseractという文字認識のライブラリがSwift5.0だとエラーが出てしまうという問題にぶつかりました。

issueにこの問題が上がっているのですが半年以上修正されないのでCocoaPodsの方で入れているライブラリの使っているSwiftのversionを4.2と5.0で分けました。

Podfileの修正

Podfileにはpost_installというものが用意されており、これはライブラリをインストールした後に行いたい処理を記述できるもののようです。

Podfile Syntax Referenceに使い方が書かれています。

ドキュメントを読み、ライブラリの文字列で引っ掛けるようにしSwiftyTesseractだけSwiftのversionを4.2にするように修正しました。

# Uncomment the next line to define a global platform for your project
platform :ios, '12.2'

target 'Rubi' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  
  pod 'ReachabilitySwift', '4.3.1'
  pod 'lottie-ios', '3.1.6'
  pod 'SwiftyTesseract', '2.1.0'
  pod 'Sketch', '3.0'

  # Pods for Rubi

  target 'RubiTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'RubiUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

#インストールが終わった後に設定したい処理
post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if 'SwiftyTesseract'.include? target.name
                config.build_settings['SWIFT_VERSION'] = "4.2"
            else
                config.build_settings['SWIFT_VERSION'] = "5.0"
            end
        end
    end
end

参考文献

Podfile Syntax Reference

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