Версия Xcode 9 Swift Language (SWIFT_VERSION)

Я недавно обновил xcode до версии 9. До этого в Xcode 8.x всякий раз, когда я использую to do pod update, он показывает мне код обновления для преобразования кода в Swift 3 и устранения ошибок. Но теперь он дает мне эту ошибку:

Параметр сборки «Swift Language Version» (SWIFT_VERSION) должен иметь поддерживаемое значение для целей, использующих Swift. Этот параметр можно установить в редакторе настроек сборки.

Для этой ошибки я пробовал Build Settings > Swift Language Version, и это был Swift 3.2. Но поскольку при вызове обновления были переустановлены некоторые модули, такие как Alamofire, и он говорит об установке Xcode 8.x для преобразования кода в Swift 3, поэтому мне нужно установить дополнительная версия с последним Xcode? Если да, то как я могу установить Xcode 8 с Xcode 9?


person Chaudhry Talha    schedule 21.09.2017    source источник
comment
попробуйте очистить производные данные и построить проект на Xcode 9.   -  person iAviator    schedule 21.09.2017
comment
Какая у вас быстрая версия в Xcode 8 ??   -  person santhoshkumar    schedule 21.09.2017
comment
я думаю была 8.3.3. это была последняя версия до xcode 9.   -  person Chaudhry Talha    schedule 21.09.2017


Ответы (8)


Ответ на свой вопрос:
Вы можете загрузить Xcode 8.x с портала загрузки Apple или Загрузите Xcode 8.3.3 (или см .: Где скачать старую версию Xcode), если у вас есть учетная запись разработчика премиум-класса (идентификатор Apple). Вы можете установить и работать как с Xcode 9, так и с Xcode 8.x в одиночной (Mac) системе. (Убедитесь, что вы Command Line Tools поддерживаете обе версии Xcode для работы с терминалом (см .: Как установить 'Command Line Tool'))


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

Это распространенное сообщение об ошибке, которое Xcode 9 показывает, если определяет язык Swift ниже 3.0 во время миграции.

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


Swift 3.2 поддерживается как Xcode 9, так и Xcode 8.

Проект ► (Выберите цель проекта) ► Параметры сборки ► (Введите «swift» в строке поиска) Язык компилятора Swift ► Версия языка Swift ► Щелкните список языков, чтобы открыть его.

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



Преобразуйте исходный код из Swift 2.0 в 3.2 с помощью Xcode 8, а затем продолжите с Xcode 9 (Swift 3.2 или 4).


Для упрощения миграции кода выполните следующие действия: (это поможет вам преобразовать в последнюю версию swift, поддерживаемую вашим Xcode Tool)

Xcode: Меню: Редактировать ▶ Скрыть ▶ В текущий синтаксис Swift

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

person Krunal    schedule 21.09.2017
comment
Если вы пришли сюда, потому что только сейчас (декабрь 2018) отряхиваете немного кода Swift 2, вы будете разочарованы, узнав, что Xcode 8 не работает в Mojave. - person bugloaf; 27.12.2018

Для проектов Objective C, созданных с использованием Xcode 8 и теперь открывающихся в Xcode 9, отображается та же ошибка, что и в вопросе.

Чтобы исправить это, нажмите кнопку + в настройках сборки и выберите Добавить пользовательскую настройку, как показано на изображении ниже.

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

Затем в новой созданной строке добавьте SWIFT_VERSION в качестве ключа и 3.2 в качестве значения, как показано ниже.

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

Это исправит ошибку для проектов с целью c.

person R. Mohan    schedule 28.11.2017
comment
Это мне помогло. Спасибо. - person Andreas Kraft; 10.12.2017
comment
Добро пожаловать. Этот комментарий меня порадовал :) @akr - person R. Mohan; 11.12.2017
comment
Если у вас возникла эта проблема с CocoaPods, вам может потребоваться добавить этот параметр сборки в раздел pods.xcodeproject. - person Stewart Macdonald; 25.02.2018
comment
Это сработало для меня, мне также пришлось изменить «ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES» в настройках сборки на «$ (унаследовано)» - person F-1; 18.02.2019
comment
Спасибо еще раз 2 месяца спустя - person Jan; 26.04.2019
comment
Оцените решение. - person user366584; 18.05.2019

Я получил это только после создания нового проекта Objective-C в Xcode 10, после того, как добавил в проект файл модели Core Data.

Я нашел два способа исправить это:

  1. Простой способ: откройте инспектор файлов модели Core Data ( - 1) и измените язык с Swift на Objective-C

Изменить язык модели основных данных

  1. Более длительный и опасный метод

Модель содержит файл «содержимого» со строкой:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

Там есть запись sourceLanguage="Swift". Измените его на sourceLanguage="Objective-C", и ошибка исчезнет.

Чтобы найти файл «содержимого», щелкните правой кнопкой мыши .xcdatamodeld в Xcode и выберите «Показать в Finder». Щелкните правой кнопкой мыши фактический файл (Finder) и выберите «Показать содержимое пакета».

Также: изменение языка модели остановит Xcode от создания файлов подкласса управляемых объектов в Swift.

person nevan king    schedule 19.02.2019

Это может произойти, если вы добавили Core Data в существующий проект.
Проверьте файл:
‹Name› / ‹Name› .xcdatamodeld / ‹Name› .xcdatamodel / contents
.
Этот файл содержит запись «sourceLanguage», которая (по умолчанию) могла иметь значение «Swift». Измените его на «Objective-C».

person digitaldaemon    schedule 31.12.2018

Я просто нажимаю последнюю кнопку быстрого преобразования и устанавливаю настройку целевой сборки приложения-> Языковая версия Swift: swift 4.0,

Надеюсь, это поможет.

person Atal Singh    schedule 13.03.2018

Это решение работает, когда ничего не работает:

Я потратил больше недели на преобразование всего проекта и пришел к следующему решению:

Сначала деинтегрируйте зависимость cocopods от проекта, а затем начните преобразование проекта в последнюю версию Swift.

Перейдите в каталог проекта в терминале и введите:

pod deintegrate

Это приведет к деинтеграции кокоподов из проекта, и в проекте не останется никаких следов CocoaPods. Но в то же время он не удалит xcworkspace и подфайлы. Ничего страшного, если они присутствуют.

Теперь вам нужно открыть xcodeproj (не xcworkspace), и вы получите много ошибок, потому что вы вызвали методы зависимостей cocoapods в своих основных проектах.

Итак, чтобы удалить эти ошибки, у вас есть два варианта:

  1. Прокомментируйте весь код, который вы использовали из библиотеки cocoapods.
  2. Создайте класс-оболочку, у которого есть фиктивные методы, похожие на библиотеку cocopods, и затем вызовите его.

Как только все ошибки будут удалены, вы можете преобразовать код в последнюю версию Swift.

Иногда, если вы получаете странные ошибки, попробуйте очистить производные данные и повторите попытку.

person Shubham Mishra    schedule 08.05.2019

возможно, вам нужно скачать набор инструментов. Эта ошибка возникает, когда у вас нет нужной версии компилятора Swift.

person dalmate    schedule 05.06.2019

В моем случае все предупреждения исчезли после того, как я напрямую изменил версию swift с 2.x на 4.0 в настройках сборки, за исключением двух предупреждений.

Эти предупреждения относятся к папкам myprojectnameTests и myprojectnameUITests. Я не заметил, и я подумал, что это связано с прямой иммиграцией из Xcode 7 в Xcode 9, и я подумал, что не могу решить эту проблему, и мне нужно установить пропущенную версию Xcode 8.

В моем случае я удалил эти папки, и все предупреждения исчезли, но вы можете воссоздать эту папку, содержащую следующее:

file > new > target > (uitest or unittest extensions)

и используйте эту статью для создания тестовых примеров: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html

person iman kazemayni    schedule 09.02.2018
comment
а кто подскажет в чем моя ошибка !? - person iman kazemayni; 26.02.2018
comment
Я бы лично не стал отрицать это, в вашем ответе нет ничего плохого, но лучше всего будет прокомментировать вопрос OP. Также вы можете взглянуть на stackoverflow.com/help/how-to-answer, который поможет вам в дальнейшем как правильно отвечать на вопросы. - person grassyburrito; 09.03.2018