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


201

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

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

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

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


У меня также есть эта проблема ...
Rockdaswift

Ответы:


364

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


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

8
Это здорово, но довольно тревожно, что без эксперта по Ruby в StackOverflow тысячи и миллионы проектов являются SOL. Я вручную изменил настройку Xcode SWIFT_VERSION на 2.3 в каждом модуле и в проекте Pod, используя настройки сборки, и это не сработало, но это сработало. Значение скрытой тревожной магии. Я ненавижу это.
BaseZen

5
Я буквально вошел в систему, просто чтобы дать вам реквизит на этом
Dnaso

1
У меня есть проект Obj-C с диаграммами (в Swift), AfNetworking и некоторыми другими модулями Obj-C. Я использовал вышеуказанный скрипт в моем файле pod. Все ошибки / предупреждения, связанные с swift, исчезли, но теперь мой проект не может найти среду AFNetwoking.
ibnetariq

1
@ Mr.Bista Утвержденное решение stackoverflow.com/a/38597681/2854405 позволяет работать с настройками XCode . Но вам, возможно, придется делать это с каждым репо Pod, который у вас есть каждый раз, когда вы делаете pod install / update. Это решение делает вещи быстрее. Вы также можете обновить версию Cocoapods сейчас: она также должна решить эту проблему.
Туллеб

119

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

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

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


13
Я не вижу эту опцию в своем проекте Objective-C
Брайан

У вас есть какие-либо библиотеки проектов Swift в вашем проекте Obj-C?
rockdaswift

2
Если вы используете swift и cocoapods, приведенная выше команда в cocoapods эффективно делает это. Если вы не хотите менять это каждый раз, pod installя рекомендую использовать ответ @Tulleb выше.
Herbal7ea 13.09.16

Теперь моя ошибка - ошибка компилятора Swift в собственном классе
Эдуардо Оливерос

1
Эта опция больше не доступна.
Hemang

33

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

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

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

Скриншот


1
Как ты это нашел? Xcode ничего не говорит об этом. Ты спас меня.
Райан

2
Действительно мое решение и мой спаситель. Спасибо! Глупо, как Apple делает модели Coredata автоматически «Swifty», когда все приложение объективно-c ....
Боб де Грааф

18

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

Измените версию Legacy Swift Language в каждой настройке сборки библиотеки на

Нет .

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


В моем случае настройка Use Legacy Swift Language Version на Yes решила проблему.
Джайпракаш Дубей

Убедитесь, что для каждой библиотеки, имеющей эту проблему, вы либо установили Да, либо Нет .. в моем случае Нет, сработало
hanzolo

Это сработало для меня. Пожалуйста, убедитесь, что вы делаете то же самое для цели теста
zizutg

@zizutg: - Мы должны перепроверить все цели. Спасибо, что снова указал.
Шраван

9

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

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

5

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

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

Я работаю над проектом, в котором смешаны код target-c и swift. Ранее я использовал swift версии 2.3, а после обновления до swift 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

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

SWIFT_VERSION = 3.0;

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


4

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

Выберите проект Target => Перейти к настройке сборки => Искать «Swift Language Version» => присвоить значение текущей версии Swift

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

Следуйте за этим изображением


4

Я получил ту же ошибку. Я пытался найти "Использовать версию Legacy Swift Language", но не нашел. Я использую 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.)

3

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


2

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


2

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


1

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

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

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, как предлагается здесь .


1

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


1

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

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

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

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снова запустите
  • Откройте свой проект. Xcworkspace

Может быть, это просто так.

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


1

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

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


1

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

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

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

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

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


1

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


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

1

Если вы ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESпо- NOпрежнему не работаете, это потому, что проблема с Xcode, а не ваша проблема. Делаем следующие шаги:

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.