Xcode 9 Swift Language Version (SWIFT_VERSION)

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

Для параметра сборки "Версия языка Swift" (SWIFT_VERSION) должно быть установлено поддерживаемое значение для целей, использующих Swift. Этот параметр можно установить в редакторе параметров сборки.

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

4 ответа

Решение

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


Подсказка: как перенести ваш код в 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

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

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

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

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

Это исправит ошибку для объективных проектов.

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

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

  1. Откройте инспектор файлов модели (⌥⌘-1) и измените язык с Swift на Objective-C

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

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

<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.

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

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

Я потратил больше недели, чтобы преобразовать весь проект и пришел к решению ниже:

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

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

pod deintegrate

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам