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) и измените язык с Swift на Objective-C
Более длинный и опасный метод
Модель содержит файл содержимого с этой строкой:
<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 в ваших основных проектах.
Таким образом, чтобы удалить эти ошибки, у вас есть два варианта:
- Прокомментируйте весь код, который вы использовали из библиотеки cocoapods.
- Создайте класс-обертку, который имеет фиктивные методы, подобные библиотеке 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