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 지정한 라이브러리 예



  • swift3 지정한 라이브러리 예


  • 보충



    Podfile에 정의하지 않고 XCode에서 "Swift Language Version"의 항목을 수동으로 변경하여 라이브러리마다 Swift 버전을 전환 할 수 있습니다.

    다만 그 경우는, 「pod install」등에서의 리빌드의 마다, 디폴트 설정으로 돌아 버리기 때문에,
    Podfile로 중앙에서 관리하는 것이 좋습니다.

    좋은 웹페이지 즐겨찾기