Как построить проект xcode 9 с Swift 4.0 с помощью Pods в Swift 3?

Я хочу, чтобы основной модуль моего приложения iOS собирал Swift 4.0, в то время как модуль CocoaPods компилирует swift 3.

PS: Использование Xcode 9 beta 2.

Ответы

Ответ 1

Наконец, я получил его на работу: все, что мне нужно было сделать, это поместить этот script в конец подфайла:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.2'
        end
    end
end

Ответ 2

Если вы используете некоторые стручки, написанные в Swift 4, но некоторые из них являются Swift 3.2, вот как вы можете указать для них значение SWIFT_VERSION:

swift_32 = ['Pod1', 'Pod2', 'Pod3'] # if these pods are in Swift 3.2
swift4 = ['Pod4', 'Pod5', 'Pod6'] # if these pods are in Swift 4

post_install do |installer|

    installer.pods_project.targets.each do |target|
        swift_version = nil

        if swift_32.include?(target.name)
            swift_version = '3.2'
        end

        if swift4.include?(target.name)
            swift_version = '4.0'
        end

        if swift_version
            target.build_configurations.each do |config|
                config.build_settings['SWIFT_VERSION'] = swift_version
            end
        end

    end

end

Ответ 3

Вот гораздо менее подробный способ установить нужные вам элементы 3.2 и оставить все остальные в 4.0

post_install do |installer|
  installer.pods_project.targets.each do |target|
      if ['AirMapSDK', 'PhoneNumberKit', 'Lock', 'RxSwift', 'RxSwiftExt', 'RxCocoa', 'RxDataSources', 'ProtocolBuffers-Swift'].include? target.name
          target.build_configurations.each do |config|
              config.build_settings['SWIFT_VERSION'] = '3.2'
          end
      end
  end
end

Просто измените массив в инструкции if. все остальное по умолчанию будет 4.0

Ответ 4

Навигатор проектов > Выберите "Pods" > Выберите Swift 3.2 Pod > "Настройки сборки" > Прокрутите вниз, а затем установите версию Swift Language в 3.2 в разделе "Swift Compiler - Language".

При этом Xcode покажет одну проблему сборки. Он попросит вас преобразовать исходный код контейнеров в Swift 4. Не делайте этого. Нажмите на эту проблему > Снимите флажок "Напомнить мне" > Нажмите "Преобразовать позже".

Навигатор проектов

Навигатор проекта

Настройки сборки

Настройки сборки

Ответ 5

Установите Swift 4.0 для всех целей, кроме рамки, которая должна быть Swift 3.2

Это то, что я сейчас делаю в проекте