Xcode 9 Swift Language Version (SWIFT_VERSION)
Недавно я обновил 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?
Ответы
Ответ 1
Ответ на ваш вопрос:
Вы можете скачать Xcode 8.x с Apple Download Portal или Download Xcode 8.3.3 (или посмотреть: Где скачать старую версию Xcode), если у вас есть премиум-аккаунт разработчика (apple id). Вы можете установить и работать как с 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 во время миграции.
![enter image description here]()
Swift 3.2 поддерживается Xcode 9 и Xcode 8 одновременно.
Проект ► (Выберите цель проекта) ► Параметры сборки ► (Введите "swift" на панели поиска) Язык компилятора Swift ► Версия языка Swift ► Нажмите на Список языков, чтобы открыть его.
![enter image description here]()
Преобразуйте ваш исходный код из Swift 2.0 в 3.2, используя Xcode 8, а затем перейдите к Xcode 9 (Swift 3.2 или 4).
Чтобы упростить миграцию кода, выполните следующие действия: (это поможет вам перейти на последнюю версию swift, поддерживаемую вашим Xcode Tool)
Xcode: Меню: Редактировать ▶ Скрывать ▶ К текущему синтаксису Swift
![enter image description here]()
Ответ 2
Для проектов Objective C, созданных с использованием Xcode 8 и теперь открытых в Xcode 9, он показывает ту же ошибку, что и в вопросе.
Чтобы исправить это, нажмите кнопку + в настройках сборки и выберите "Добавить пользовательские настройки", как показано на рисунке ниже
![build setting]()
Затем в новой строке, созданной, добавьте SWIFT_VERSION
в качестве ключа и 3.2
как значение, как показано ниже.
![введите описание изображения здесь]()
Он исправит ошибку для объектных проектов c.
Ответ 3
Я только что получил это после создания нового проекта Objective-C в Xcode 10, после того как я добавил файл модели Core Data в проект.
Я нашел два способа исправить это:
- Простой способ: открыть инспектор файлов модели базовых данных (⌥ ⌘ - 1) и изменить язык с Swift на Objective-C
![Change Core Data model language]()
- Более длинный и опасный метод
Модель содержит файл содержимого с этой строкой:
<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
в .xcdatamodeld
и выполните "Показать в Finder". Щелкните правой кнопкой мыши на фактическом (Finder) файле и выполните "Показать содержимое пакета".
Также: изменение языка модели остановит Xcode от создания файлов подклассов управляемых объектов в Swift.
Ответ 4
Это может произойти, когда вы добавили базовые данные в существующий проект.
Проверить:
<Имя>/<имя>.xcdatamodeld/<Имя>.xcdatamodel/содержимое
файл.
Этот файл содержит запись "sourceLanguage", которая (по умолчанию) могла быть установлена в "Swift". Измените его на "Objective-C".
Ответ 5
Я просто нажимаю на последнюю кнопку быстрого преобразования и устанавливаю целевую сборку приложения setting-> языковая версия Swift: swift 4.0,
Надеюсь, это поможет.
Ответ 6
Как swift 3.0 конвертировать в 4.0? Все ли цели выбраны?
преобразовать не удалось
Ответ 7
Это решение работает, когда ничего не работает:
Я потратил больше недели, чтобы преобразовать весь проект и пришел к решению ниже:
Во-первых, деинтегрируйте зависимость cocopods от проекта, а затем начните преобразовывать проект в последнюю версию Swift.
Перейдите в каталог проектов в терминале и введите:
pod deintegrate
Это приведет к деинтеграции кокопод из проекта, и в проекте не останется никаких следов CocoaPods. Но в то же время он не удалит xcworkspace и подфайлы. Это нормально, если они присутствуют.
Теперь вам нужно открыть xcodeproj (не xcworkspace), и вы получите много ошибок, потому что вы вызвали методы зависимости cocoapods в ваших основных проектах.
Таким образом, чтобы удалить эти ошибки, у вас есть два варианта:
- Прокомментируйте весь код, который вы использовали из библиотеки cocoapods.
- Создайте класс-обертку, который имеет фиктивные методы, подобные библиотеке cocopods, и затем вызовите его.
Как только все ошибки будут удалены, вы можете преобразовать код в последнюю версию Swift.
Иногда, если вы получаете странные ошибки, попробуйте очистить производные данные и попробуйте снова.
Ответ 8
может быть, вам нужно скачать набор инструментов. Эта ошибка возникает, когда у вас нет правильной версии компилятора swift.
Ответ 9
В моем случае все предупреждения исчезли после того, как я непосредственно изменил версию 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