Xcode 8 Beta 3 Используйте устаревшую проблему Swift

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

«Использовать устаревшую языковую версию Swift» (SWIFT_VERSION) необходимо правильно настроить для целей, использующих Swift. Используйте меню [Правка> Преобразовать> В текущий синтаксис Swift…], чтобы выбрать версию Swift, или используйте редактор параметров сборки, чтобы напрямую настроить параметры сборки.

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

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


person Bryan    schedule 18.07.2016    source источник
comment
У меня тоже такая проблема ...   -  person rockdaswift    schedule 19.07.2016


Ответы (19)


Если вы используете CocoaPods и хотите, чтобы это исправлялось автоматически каждый раз, когда вы выполняете pod install, вы можете добавить эти строки в конец вашего 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

РЕДАКТИРОВАТЬ: эта проблема теперь устранена, если вы используете CocoaPods v1.1.1 или новее. Не забудьте удалить параметр ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES из основных целей проекта.

person Tulleb    schedule 19.07.2016
comment
Есть идеи для исправления с помощью Карфагена? - person Tommie C.; 24.08.2016
comment
Если вы пока пытаетесь использовать 2.3 в своей кодовой базе, используйте 2.3 вместо 3.0 Отличное решение! Это фактически превращает "Use Legacy Swift Language Version" в No (или, если вы измените его на 2.3, это Yes). Однако преимущество этой опции в том, что каждый раз, когда вы pod install, она устанавливает эту настройку автоматически! Потрясающие. Я вижу, что SWIFT_VERSION также настроен на проекты Obj-C. Я полагаю, нет никаких негативных последствий? - person Herbal7ea; 14.09.2016
comment
Это здорово, но очень тревожно, что без специалиста по Ruby по StackOverflow тысячи и миллионы проектов являются SOL. Я вручную изменил настройку Xcode SWIFT_VERSION на 2.3 в каждом модуле и в проекте Pod, используя настройки сборки, и это не сработало, но это сработало. Имеется в виду скрытая тревожная магия. Я ненавижу это. - person BaseZen; 18.09.2016
comment
@TommieC. если вам нужен Swift 2.3 и вы используете Xcode 8, вам следует изменить TOOLCHAINS. Итак, карфаген: TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage update --platform iOS - person Aleksey Potapov; 19.09.2016
comment
Примечание: нет необходимости добавлять его в конец подфайла, поскольку вы используете post_install - person Daniel; 21.09.2016
comment
Я буквально вошел в систему, чтобы рассказать вам об этом - person Dnaso; 25.09.2016
comment
У меня есть проект Obj-C с диаграммами (в Swift), AfNetworking и некоторыми другими модулями Obj-C. Я использовал вышеупомянутый скрипт в моем pod-файле. Все ошибки / предупреждения, связанные с swift, исчезли, но теперь мой проект не может найти фреймворк AFNetwoking. - person ibnetariq; 27.09.2016
comment
@Tulleb не мой вопрос, но это как раз мой случай. stackoverflow.com/questions/39622452/ - person ibnetariq; 27.09.2016
comment
Мне нравится, как это нигде не задокументировано, кроме переполнения стека. Кроме того, даже в CocoaPods 1.1.1 и XCode 8.1 это остается важным шагом. - person Glenn Schmidt; 29.11.2016
comment
Зачем это вообще нужно, разве нет возможности сделать это в настройках Xcode? - person Bista; 29.12.2016
comment
@ Mr.Bista Утвержденное решение stackoverflow.com/a/38597681/2854405 позволяет ему работать из настроек Xcode. Но вам, возможно, придется делать это с каждым репозиторием Pod, которое у вас есть каждый раз, когда вы делаете pod install / update. Это решение ускоряет работу. Вы также можете обновить свою версию Cocoapods прямо сейчас: это также должно исправить эту проблему. - person Tulleb; 29.12.2016
comment
@GlennSchmidt Я использую CocoaPods 1.1.1 и Xcode 8.1, и я удалил приведенный выше код из своего Podfile в течение нескольких недель. Все работает в норме. - person Tulleb; 29.12.2016
comment
Я использую CocoaPods 1.2.1, но по какой-то причине я получал ту же ошибку, пока не добавил бит выше в свой Podfile. Кто-нибудь знает почему? Я использую Xcode 8.3.3 и создаю свою цель для iOS 9. - person DHShah01; 18.06.2017

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

Перейдите в настройки сборки проекта или библиотеки и установите для атрибута версии компилятора Swift «Использовать устаревшую версию языка Swift» значение «Не указано» на «Да» или «Нет».

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

person rockdaswift    schedule 19.07.2016
comment
Я не вижу этой опции в моем проекте Objective-C - person Bryan; 19.07.2016
comment
Есть ли в вашем проекте Obj-C какие-либо библиотеки проектов Swift? - person rockdaswift; 19.07.2016
comment
Если вы используете swift и cocoapods, приведенная выше команда в cocoapods эффективно делает это. Если вы не хотите менять это каждый раз, когда pod install, я рекомендую использовать ответ @Tulleb выше. - person Herbal7ea; 14.09.2016
comment
Теперь моя ошибка - ошибка компилятора Swift в собственном классе - person Eduardo Oliveros; 21.09.2016
comment
В моем случае щелкните Pods.xcodeproj, выберите ReactiveCocoa → «Использовать устаревшую языковую версию Swift»: измените неопределенное значение на ДА или НЕТ - person PodBlood; 27.10.2016
comment
Эта опция больше не доступна. - person Hemang; 19.06.2017

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

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

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

скриншот

person Bryan    schedule 26.07.2016
comment
Как ты это нашел? Xcode ничего об этом не говорит. Вы спасли меня. - person Ryan; 14.12.2016
comment
Действительно мое решение и мой спаситель. Спасибо! Глупо, как Apple делает модели Coredata автоматически "Swifty", когда все приложение является объективным-c .... - person Bob de Graaf; 03.04.2017

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

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

Нет.

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

person Shrawan    schedule 08.11.2016
comment
В моем случае установка «Использовать устаревшую языковую версию Swift» на «Да» решила проблему. - person Jayprakash Dubey; 11.11.2016
comment
Убедитесь, что для каждой библиотеки, имеющей эту проблему, вы установили либо «Да», либо «Нет». В моем случае «Нет» работало. - person hanzolo; 01.12.2016
comment
Это сработало для меня. Убедитесь, что вы сделали то же самое и для тестовой цели. - person zizutg; 21.12.2016
comment
@zizutg: - Мы должны перепроверить все цели. Спасибо, что снова указали. - person Shrawan; 21.12.2016

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

  1. Зайдите в настройки сборки
  2. Найдите использование устаревшей языковой версии Swift
  3. Да - Swift 2.3
  4. Нет - Swift 3.0  введите описание изображения здесь
person Mohammad Kamran Usmani    schedule 04.02.2017

Добавьте ниже код в конец подфайла.

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
person Sunil aruru    schedule 07.10.2016

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

Судя по всему, в моем файле project.pbxproj все еще была указана устаревшая версия Swift. Был указан 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

Так вот, я исправил это, изменив версию Swift в файле project-pbxproj на:

SWIFT_VERSION = 3.0;

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

person leviathan    schedule 16.12.2016

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

Выберите проект Target => Go to Build setting => Search for «Swift Language Version» => присвойте Value текущую версию Swift.

Это все, что решило мою проблему

Follow This Image

person khusboo suhasini    schedule 14.08.2017

У меня такая же ошибка. Я попытался выполнить поиск «Использовать устаревшую языковую версию Swift», но не нашел. Я использую Xcode 8.3.3. После того, как я долго просматривал страницы и работал, я нашел это решение, и оно сработало для меня.  введите описание изображения здесь

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.)
person Aklesh Rathaur    schedule 24.10.2017

установите для параметра «Использовать устаревшую версию языка Swift» значение «ДА», если вы используете старую версию swift в своем проекте или любую другую версию Swift от сторонних разработчиков. "Нет", если ваш проект обновлен до текущей быстрой версии. Если вы не настраиваете свою быструю версию, после каждого обновления и установки Pod framework должен указывать это.

person Mohammad Arifuzzaman    schedule 22.09.2016

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

person Mountain Man    schedule 11.10.2016

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

person yoninja    schedule 10.11.2016

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

В Project> Build Settings:

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

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

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

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

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

person Hector Partidas    schedule 30.01.2017

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

person arunjos007    schedule 01.02.2017

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

Вам может понадобиться:

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

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

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

Может это просто так.

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

person Diphaze    schedule 02.03.2017

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

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

person Jorge Irún    schedule 24.04.2017

Перейдите в Project Build Setting для проекта и Target выполните следующие два.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

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

Ошибка устранена.

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

person kiran    schedule 25.04.2017

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

person Niall Kehoe    schedule 06.06.2017
comment
У меня был проект в 9.0b, где установка как проекта, так и цели на Swift 4 продолжала выдавать ошибку, установка обоих на Swift 3.2 удалила ее, и теперь установка обоих обратно на Swift 4 в порядке, поэтому можно сделать все правильно и по-прежнему получаю ошибку. - person green_knight; 12.06.2017

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

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

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

3. затем вернитесь к NO. Перестройте проект, xcode наконец обнаружит ваше изменение на NO!

В этом случае проблема решена!

person Wangdu Lin    schedule 24.01.2017