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

115

Я недавно обновил xcode до версии 9. До этого в Xcode 8.x всякий раз, когда я его использовал, 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?

Чаудхри Тальха
источник
попробуйте очистить производные данные и построить проект на Xcode 9.
iAviator
Какая у вас быстрая версия в Xcode 8 ??
santhoshkumar
я думаю была 8.3.3. это была последняя версия до xcode 9.
Chaudhry

Ответы:

181

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


Подсказка: как перенести код. Xcode 9-совместимые версии Swift (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

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

Krunal
источник
9
Если вы пришли сюда, потому что только сейчас (декабрь 2018 г.) стираете пыль с кода Swift 2, вы будете разочарованы, узнав, что Xcode 8 не работает в Mojave.
bugloaf
53

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

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

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

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

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

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

Р. Мохан
источник
2
Это мне помогло. Спасибо.
Андреас Крафт
9
Если у вас возникла эта проблема с CocoaPods, вам может потребоваться добавить этот параметр сборки в раздел pods.xcodeproject.
Стюарт Макдональд
1
Это сработало для меня, мне также пришлось изменить «ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES» в настройках сборки на «$ (унаследовано)»
F-1
1
Еще раз спасибо 2 месяца спустя
Я
1
Оцените решение.
user366584
4

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

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

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

Изменить язык модели Core Data

  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.

Неванский король
источник
1

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

digitaldaemon
источник
0

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

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

Атал Сингх
источник
0

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

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

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

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

pod deintegrate

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

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

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

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

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

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

Шубхам Мишра
источник
0

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

dalmate
источник
-3

В моем случае все предупреждения исчезли после того, как я напрямую изменил версию 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

Иман Каземайни
источник
а кто подскажет в чем моя ошибка !?
Иман Каземайни
2
Я бы лично не стал отрицать это, в вашем ответе нет ничего плохого, но лучше всего будет прокомментировать вопрос OP. Также вы можете взглянуть на stackoverflow.com/help/how-to-answer, который поможет вам найти правильный способ ответа на вопросы.
Grassyburrito