Как создать проект Swift 3 на Xcode 9?

В Примечания к выпуску Xcode 9 говорится, что Swift 3 поддерживается компиляция:

Один компилятор для Swift 4 и Swift 3, цели Swift 4 и Swift 3 могут быть скомпилированы вместе в одном проекте.

Я установил бета-версию Xcode 9. Но когда я нажимаю Build, он показывает кучу ошибок. Нужно ли делать какие-то специальные приготовления при использовании Swift 3 в Xcode 9?

UPD: Модуль, скомпилированный с помощью Swift 3.1, не может быть импортирован в Swift 4.0

Модуль, скомпилированный с помощью Swift 3.1, не может быть импортирован в Swift 4.0


person Exey Panteleev    schedule 06.06.2017    source источник
comment
Какую ошибку вы получили? Обычно, когда вы открываете проект, созданный с помощью Xcode 8.3.2 в бета-версии Xcode 9, он определяет правильную версию Swift (Swift 3.x) и правильно компилируется. В любом случае, у вас установлен Xcode 8.3.x?   -  person Duyen-Hoa    schedule 06.06.2017
comment
Те, кто проезжает мимо, могут загрузить Xcode 9 по адресу developer.apple.com/download/more (хотя это может быть доступно только платным разработчикам, не уверен)   -  person Allison    schedule 04.05.2019


Ответы (5)


Выберите цель, перейдите к Build Settings > Swift Language Version:

введите описание изображения здесь

person vadian    schedule 06.06.2017
comment
это не помогло =(( - person khabiroff; 11.06.2017
comment
Когда, черт возьми, появился Swift 3.2? Это пришло с Xcode 8.3.3? Я не вижу его на swift.org/download/#releases. - person Chris Prince; 06.07.2017
comment
Да, @ChrisPrince; Swift 3.2 появился в Xcode 8.3. Интересно, что версия 3.2 не отображается на Swift.org. Странный... - person leanne; 28.09.2017
comment
Swift 3.2 — это Swift 3.1, подключенный к iOS 11 SDK. - person I make my mark; 17.10.2017
comment
Я использую Xcode 10.2, и в раскрывающемся списке нет опции Swift 3.2. Итак, что нужно сделать? - person Jayprakash Dubey; 07.11.2019
comment
@JayprakashDubey Используйте более старую версию Xcode в более старой системе или перенесите код вручную. - person vadian; 07.11.2019

Все приведенные выше ответы отвечают на неправильный вопрос. При использовании Xcode 9 вы используете компилятор Swift 4 (даже если вы используете его для компиляции кода Swift 3), чтобы исправить это, перекомпилируйте с использованием соответствующего компилятора/Xcode.

Если вы пытаетесь сделать это через командную строку, вы можете использовать sudo xcode-select -switch для переключения между версиями xcode. Удачи!

person Jeremie D    schedule 14.09.2017

Обновление для Xcode 10.1 и Swift 4.2

Цели Swift 3, 4 и 4.2 могут сосуществовать и связываться друг с другом.

Вы сами решаете, когда и хотите ли вы мигрировать отдельно для каждой цели, когда это имеет смысл для вашего проекта. Хотя переход на Swift 4.2 определенно приветствуется, это не процесс «все или ничего», поскольку цели Swift 3, 4 и 4.2 могут сосуществовать и связываться друг с другом.

Также могут сосуществовать разные какаоподы и разные версии проекта.

Если вы хотите, чтобы версия Cocopod отличалась от версии вашего проекта, вам следует внести следующие изменения в конец файла вашего модуля:

post_install do |installer|
    print "Setting the default SWIFT_VERSION to 4.2\n"
    installer.pods_project.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '4.2'
    end

    installer.pods_project.targets.each do |target|
        if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}"
            print "Setting #{target}'s SWIFT_VERSION to 3.0\n"
            target.build_configurations.each do |config|
                config.build_settings['SWIFT_VERSION'] = '3.0'
            end
        else
            print "Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)\n"
            target.build_configurations.each do |config|
                config.build_settings.delete('SWIFT_VERSION')
            end
        end
    end
end

Иногда даже после того, как вы запустите pod update, ваш xcode принудительно обновит версию вашего проекта Cocopod, затем в этом случае выберите проект pod CocoaPod и измените версию swift в настройках сборки.

person Shubham Mishra    schedule 30.11.2018

У меня была такая же проблема (я установил модуль, версия Swift которого была 3x, а версия Swift моего проекта была Swift 4. Поэтому я получил так много ошибок компилятора. Позже я изменил форму версии Swift 4 на 3.2 и попытался собрать проект, снова я получил ошибки компилятора. Я думаю, это происходит из-за того, что я запускаю установку модуля, когда мой проект был в Swift 4.)

  • Сначала вам нужно изменить «языковую версию Swift» в настройках сборки.
  • Если вы установили какой-либо модуль, изменение только «Языковой версии Swift» не поможет. Возможно, вам потребуется запустить pod install для проекта.
person Jeni Khant    schedule 25.10.2017

Xcode 9 требует, чтобы фреймворк был построен с помощью Swift 3.2 или выше. Перейдите на страницу https://github.com/emaloney/CleanroomLogger и нажмите Загрузить ZIP. Откройте xcodeproj в Xcode 9. Нажмите ⌘B. CleanroomLogger.framework меняет цвет с красного на черный. Перетащите фреймворк в свой проект. См. соответствующий вопрос: Проблема Realm с Swift 3.1

построить

person AtomicBoolean    schedule 15.06.2017
comment
это не делает общую сборку. Если вы создадите фреймворк таким образом, он будет работать только для устройств iOS (у вас есть общая цель сборки устройства iOS) и не будет работать с симулятором. - person RestingRobot; 18.10.2017