Xcode 8 Beta 3 Use Legacy Swift выдает

196

У меня есть проект Objective-C в Xcode 8 Beta 3. Начиная с обновления, всякий раз, когда я пытаюсь построить, я получаю следующую ошибку:

"Использовать устаревшую версию языка Swift" (SWIFT_VERSION) необходимо правильно настроить для целей, которые используют Swift. Используйте меню [Edit > Convert > To Current Swift Syntax...] для выбора версии Swift или используйте редактор настроек Build, чтобы напрямую настроить параметры сборки.

Кто-нибудь сталкивался с этим? Поскольку в проекте Objective-C нет настройки сборки для настройки Swift. Я также убедился, что ни одна из зависимостей проекта или CocoaPods не использует Swift. Единственное решение, которое у меня есть, это использовать бета-версию 2. Любые идеи, как я могу исправить эту проблему?

Я также должен упомянуть, что я запускаю OSX 10.12 Beta 2.

  • 0
    У меня также есть эта проблема ...
Теги:
xcode8

19 ответов

32
Лучший ответ

Я уже некоторое время игнорирую эту проблему и просто работаю над другими вещами, тем временем я нашел решение своей проблемы.

Поскольку мой проект Objective-C, я подумал, что, возможно, один из Pods, который я использую, использовал Swift, я проверил каждый Pod, и никто из них не был.

Окончательное решение заключалось в том, что моя модель Core Data была настроена на создание кода в Swift, хотя я вручную их создавал в меню File > New > NSManagedObjectSubclass. Все, что мне нужно было сделать, это переключить его на Objective-C.

Изображение 1762

  • 1
    Как ты это нашел? Xcode ничего не говорит об этом. Вы спасли меня.
  • 2
    Действительно мое решение и мой спаситель. Спасибо! Глупо, как Apple делает модели Coredata автоматически «Swifty», когда все приложение объективно-c ....
Показать ещё 3 комментария
346

Если вы используете CocoaPods и хотите, чтобы он был автоматически исправлен каждый раз, когда вы выполняете pod install, вы можете добавить эти строки в конец вашего подфайла:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

EDIT: эта проблема теперь исправлена, если вы используете CocoaPods v1.1.1 или новее. Не забудьте удалить параметр ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES из основных целей проекта.

  • 0
    Любые идеи для исправления с помощью Карфагена?
  • 24
    Если вы в настоящее время пытаетесь использовать 2.3 в своей кодовой базе, используйте 2.3 вместо 3.0 Отличное решение! Это фактически делает "Use Legacy Swift Language Version" на « No (или, если вы измените ее на 2.3 это « Yes ). Преимущество этого параметра заключается в том, что каждый раз, когда вы pod install он устанавливает этот параметр автоматически! Потрясающие. Я вижу, что SWIFT_VERSION устанавливается на проекты Obj-C . Я предполагаю, что нет никаких неблагоприятных воздействий?
Показать ещё 11 комментариев
118

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

Перейдите к настройкам сборки проекта или библиотеки и установите атрибут Swift Compiler Version "Использовать устаревшую версию языка Swift" из Unspecified в Yes или NO.

Изображение 1763

  • 13
    Я не вижу эту опцию в своем проекте Objective-C
  • 0
    У вас есть какие-либо библиотеки проектов Swift в вашем проекте Obj-C?
Показать ещё 4 комментария
18

Эта проблема также видна в Xcode-8.1. Когда мы добавляем новый Target, например Extension или Widget, а сторонняя библиотека интегрируется в новую цель с помощью cocopods. После Подстроить. Мы можем столкнуться с такой же ошибкой, как указано выше.

Измените Использовать устаревшую версию языка Swift в каждой настройке сборки библиотеки на

Нет.

Изображение 1764

  • 0
    В моем случае настройка Use Legacy Swift Language Version на Yes решила проблему.
  • 0
    Убедитесь, что для каждой библиотеки, имеющей эту проблему, вы установили Да или Нет .. в моем случае Нет сработало
Показать ещё 2 комментария
9

Если вы используете Xcode 8 или более позднюю версию

  • Перейдите к настройкам сборки
  • Найти прежнюю быструю языковую версию
  • Да - Swift 2.3
  • Нет - Swift 3.0 Изображение 1765
5

Добавьте ниже код в конец podfile.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end
4

Я получил ту же ошибку. Я попытался найти "Использовать устаревшую версию языка Swift", но не найден. Я использую Xcode 8.3.3 После серфинга слишком много и работая, я нашел это решение, и это сработало для меня. Изображение 1766

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)
4

В моем случае я просто делаю следующие вещи

Выберите проект Target = > Перейти к настройке сборки = > Искать "Быстрая версия языка" = > дать значение текущей версии Swift

Thats all Он исправил мой вопрос

Изображение 1767

  • 0
    Это сработало для меня, спасибо.
4

Я работаю над проектом с смешанным objective-c и быстрым кодом Я ранее использовал быструю версию 2.3 и после обновления до быстрого 3 я не смог построить проект. Xcode пожаловался на указанное сообщение об ошибке.

По-видимому, в моем файле project.pbxproj была еще устаревшая версия Swift. Был указан быстрый 3.0.1:

SWIFT_VERSION = 3.0.1;

В то время как у меня уже был установлен 3.0.2:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Sooo, я исправил его, изменив версию Swift в файле project-pbxproj на:

SWIFT_VERSION = 3.0;

Кажется, спецификатор версии уровня патча был слишком специфичным.

3

установите "Использовать устаревшую версию языка Swift" на "YES", если вы используете старую версию swift в своем проекте или любую быструю стороннюю сторону. "Нет", если ваш проект переместится в текущую быструю версию. если вы не настроите свою быструю версию, после каждого обновления и установки под Framework Pod необходимо указать это.

2

Мой проект написан в Swift. Я получил ту же ошибку с fastlane. То, что произошло, было моим обновленным Xcode, поэтому мне пришлось обновить свой проект до Swift 3.0. Получил массу ошибок. Фиксация и отладка занимала слишком много времени, и в тот момент это не стоило того, поэтому я решил установить более старую версию Xcode. Вернул мой код в 2.3. Тогда fastlane beta больше не работал. Оказывается, мне нужно было установить Command Line Tool на 7.3. Изображение 1768

2

Мне действительно нужно было выполнить поиск "Legacy Swift", чтобы изменить его с неопределенного на "Да". Когда я просто прокручивался до раздела, описанного выше, я не смог его изменить. Надеюсь, это поможет кому-то.

1

В Xcode 9 beta. Перейдите в раздел "Настройки проекта", "Настройки сборки", "Поиск версии Swift Language". В Xcode 9 вы должны указать, используете ли вы Swift 3.2 или Swift 4.

  • 0
    У меня был проект в 9.0b, где установка и проекта, и цели на Swift 4 продолжала вызывать ошибку, установка на Swift 3.2 убрала ее, и теперь установка обоих обратно на Swift 4 - это хорошо, так что можно все сделать правильно и все еще получаю ошибку.
1

Перейдите к настройке сборки проекта для проекта и цели ниже двух.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Изменить на последний Swift 3.

Ошибка решена.

Если исправлено исправление ошибки, пожалуйста, понравится.

1

У меня была такая же проблема после обновления до xcode 8.3.2, но опция "Использовать устаревший язык Swift" исчезла. Кажется, теперь это вариант изменения: Изображение 1769

Используется это исправление с Alamofire и другими libs, и все работает нормально.

1

Прежде чем приступать к сложным решениям, выполните базовую проверку, если вы новичок в Cocoapods, и у вас возникла эта проблема.

Вам может потребоваться:

  • Откройте свой подфайл еще
  • Убедитесь, что строка для платформы не закомментирована символом '#'. Наконец-то это должно выглядеть примерно так:

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • Сохраните свой подфайл, закройте Xcode и запустите pod install снова
  • Откройте проект project.xcworkspace

Возможно, это именно так.

Если нет, вы можете пойти выше; -)

1

Начиная с XCode 8, вы можете использовать swift 2.3, хотя XCode 8 использует swift 3.x в качестве быстрой версии по умолчанию. Чтобы использовать swift 2.3, просто включите флаг Использовать устаревшую версию языка Swift с YES из настройки Build, тогда XCode будет использовать Swift 2.3 для этой цели проекта.

1

У меня была эта же проблема и я решил ее сделать, выполнив следующие действия:

В проекте > Настройки сборки:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

Затем в моем подфайле:

config.build_settings['SWIFT_VERSION'] = '3.0'

Использование этих трех настроек удалило все предупреждения и позволило мне правильно скомпилировать.

Самое неясное и то, что на самом деле получило прогресс для компиляции, заключалось в изменении SWIFT_VERSION в подфайле от 3 до 3.0, как предложено здесь.

1

Если изменить ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES к NO все еще не работает, это потому, что вопрос Xcode, не ваша проблема. Выполнение следующих шагов:

1.Измените свойство ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES как YES для целевой цели предупреждения

2. затем он покажет предупреждение на левой панели, которое рекомендует вам перейти на swift 3.0

3. Затем измените значение NO. Перестройте проект, xcode, наконец, определит ваше изменение NO !

Проблема решена в этом случае!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню