Xcode 8 Beta 3 Use Legacy Swift выдает
У меня есть проект Objective-C в Xcode 8 Beta 3. После обновления при каждой попытке сборки я получаю следующую ошибку:
"Использовать устаревшую версию языка Swift" (SWIFT_VERSION) необходимо правильно настроить для целей, использующих Swift. Используйте меню [Правка> Преобразовать> В текущий синтаксис Swift...], чтобы выбрать версию Swift, или используйте редактор параметров сборки, чтобы напрямую настроить параметры сборки.
Кто-нибудь сталкивался с этим? Поскольку это проект Objective-C, здесь нет параметров сборки для настройки Swift. Я также удостоверился, что ни одна из зависимостей проекта или CocoaPods не использует Swift. Единственное решение, которое у меня есть, - это использование бета-версии 2. Есть идеи, как мне решить эту проблему?
Я должен также упомянуть, что я использую OSX 10.12 Beta 2.
20 ответов
Я некоторое время игнорировал эту проблему и в то же время просто работал над другими вещами - наконец-то я нашел решение своей проблемы.
Так как мой проект Objective-C, я подумал, что, возможно, один из используемых мной Стручков использует Swift, я проверил каждый из них, и ни один из них не был.
Окончательное решение состояло в том, что моя базовая модель данных была настроена на генерацию кода в Swift, хотя я вручную генерировал их в меню "Файл"> "Создать"> "NSManagedObjectSubclass". Все, что мне нужно было сделать, это переключить его на Objective-C.
Если вы используете 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
установка из ваших основных целей проекта.
Я только нашел способ это исправить.
Перейдите к настройкам Build проекта или библиотеки и задайте для атрибута Версия компилятора Swift "Использовать устаревшую версию Swift Language" от Не указано до Да или Нет.
Эта проблема также видна в Xcode-8.1 . Когда мы добавляем новую цель, такую как Extension или Widget, сторонняя библиотека интегрируется в новую цель с помощью кокоподов. После установки Pod. Мы можем столкнуться с той же ошибкой, что и выше.
Измените версию Legacy Swift Language в каждой настройке библиотеки на
Нет
Если вы используете Xcode 8 или новее
Добавьте приведенный ниже код в конец подфайла.
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
Я работаю над проектом, в котором смешаны код 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;
Кажется, спецификатор версии уровня патча был слишком конкретным.
В моем случае я просто делаю следующее
Выберите проект Target=> Перейти к настройке сборки => Искать "Swift Language Version" => присвоить значение текущей версии Swift
Это все, что это исправило мою проблему
Я получил ту же ошибку. Я пытался найти "Использовать версию 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.)
Установите "Использовать версию Legacy Swift Language" на "ДА", если вы используете старую версию swift в своем проекте или любую стороннюю версию swift. "Нет", если ваш проект обновлен до текущей быстрой версии. если вы не конфигурируете свою версию swift, после каждого обновления и установки, Pod Framework должен указать это.
Мне действительно пришлось искать "Legacy Swift", чтобы изменить его с неопределенного на "Да". Когда я просто прокрутил страницу, описанную выше, я не смог ее изменить. Надеюсь, это кому-нибудь поможет.
Мой проект написан на Swift. Я получил ту же ошибку с fastlane
, Произошло автоматическое обновление моего Xcode, поэтому мне пришлось обновить свой проект до Swift 3.0. Есть куча ошибок. Исправление и отладка занимали слишком много времени, и в тот момент это не стоило того, поэтому я решил установить более старую версию Xcode. Вернул мой код до 2.3. затем fastlane beta
больше не работал Оказывается, мне нужно было установить инструмент командной строки на 7.3.
В Xcode 9 beta. Зайдите в Настройки проекта, Настройки сборки, найдите версию Swift Language. В Xcode 9 вы должны указать, используете ли вы Swift 3.2 или Swift 4.
Начиная с 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 для этой цели проекта.
Перейдите в раздел "Настройка сборки проекта" для проекта и "Цель" ниже двух.
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version = Swift 3
Изменить на последний Swift 3
,
Ошибка устранена.
Если это исправило вашу ошибку, пожалуйста, нравится.
У меня была такая же проблема, и я решил ее следующим образом:
В 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, как предлагается здесь.
Если вы измените ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
в NO
до сих пор не работает, это потому, что проблема XCode, а не ваша проблема. Делаем следующие шаги:
1.Change ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
свойство быть YES
на цели предупреждения
2. затем на левой панели появится предупреждение, которое рекомендует вам перейти на swift 3.0
3. затем вернитесь к NO
, Перестройте проект, xcode наконец обнаружит ваше изменение NO
!
Проблема решена в этом случае!
Прежде чем пробовать сложные решения, вот базовая проверка, которую вы должны сделать, если вы новичок в 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. Установите флажок «Не показывать диагностическую проблему об устаревании системы сборки».
2 - установите для системы сборки значение Устаревшая система сборки (общая рабочая область)
3 — установите для системы сборки значение «Устаревшая система сборки» (рабочая область для предварительного пользователя).