Xcode 8 Beta 3 Використовуйте проблему Legacy Swift


201

У мене є проект Objective-C в Xcode 8 Beta 3. Після оновлення, коли я намагаюся створити, я отримую таку помилку:

"Використовувати Legacy Swift Language Version" (SWIFT_VERSION) потрібно правильно налаштувати для цілей, які використовують Swift. Використовуйте меню [Edit> Convert> To Current Swift Syntax…], щоб вибрати версію Swift, або скористайтеся редактором Build Settings для прямого налаштування налаштування збірки.

Хтось із цим стикався? Оскільки це проект Objective-C, немає налаштування збірки для налаштування Swift. Я також переконався, що жодна із проектних залежностей або CocoaPods не використовує Swift. Єдине рішення, яке я маю - використовувати Beta 2. Будь-які ідеї, як я можу виправити цю проблему?

Я також повинен зазначити, що я запускаю OSX 10.12 Beta 2.


У мене теж є таке питання ...
rockdaswift

Відповіді:


364

Якщо ви використовуєте 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

EDIT: Ця проблема тепер виправлена, якщо ви використовуєте 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

8
Це чудово, але це дуже тривожно, що без експерта Ruby по StackOverflow тисячі та мільйони проектів є SOL. Я вручну змінив налаштування Xcode SWIFT_VERSION на 2.3 у кожному модулі та в проекті Pod, використовуючи Build Settings, і це не спрацювало, але це зробило. Значення прихованої тривожної магії. Я ненавиджу це.
BaseZen

5
Я буквально увійшов до системи, щоб надати вам реквізити про це
Днасо,

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

1
@ Mr.Bista Затверджене рішення stackoverflow.com/a/38597681/2854405 дозволяє працювати з настройками Xcode. Але вам, можливо, доведеться це робити з кожним кожним репостом Pod, який ви маєте кожен раз, коли ви робите pod install / update. Це рішення робить все швидше. Ви також можете оновити свою версію Cocoapods зараз: це також має вирішити цю проблему.
Тюллеб

119

Я просто знайшов спосіб це виправити.

Перейдіть до налаштувань збірки проекту чи бібліотеки та встановіть атрибут версії Swift Compiler Version "Use Legacy Swift Language Version" з Не визначено на Так або НЕТ.

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


13
Я не бачу цього варіанту в моєму проекті Objective-C
Брайан

Чи є у вашому проекті Obj-C бібліотеки Swift?
rockdaswift

2
Якщо ви використовуєте swift та cocoapods, команда, наведена вище у cocoapods, ефективно робить це. Якщо ви не хочете змінювати це щоразу, pod installрекомендую скористатися відповіддю @Tulleb вище.
Herbal7ea

Тепер моя помилка - помилка компілятора Swift у
самокласі

1
Ця опція більше недоступна.
Хеман

33

Я вже деякий час ігнорую цю проблему і тим часом працюю над іншими речами - я нарешті знайшов рішення своєї проблеми.

Оскільки мій проект - «Objective-C», я зрозумів, що, можливо, один із Pods, який я використовую, користувався Swift, я перевірив кожен Pod і жоден з них не був.

Остаточним рішенням було те, що моя основна модель даних була встановлена ​​для генерації коду в Swift, хоча я вручну генерував їх у меню Файл> Нове> NSManagedObjectSubclass. Все, що мені потрібно було зробити, це переключити його на Objective-C.

скріншот


1
Як ти це знайшов? Xcode про це нічого не говорить. Ти врятував мене.
Райан

2
Справді моє рішення і мій рятівник. Дякую! Дурне, як Apple робить моделі Coredata автоматично "стрімкими", коли вся програма об'єктивна-c ....
Боб де Грааф

18

Ця проблема також помітна в Xcode-8.1. Коли ми додаємо нові цілі, такі як розширення або віджет, а третя сторона бібліотека інтегрується в нову ціль за допомогою кокоподів. Після встановлення Pod . Ми можемо зіткнутися з тією ж помилкою, що і вище.

Змініть версію мови Legacy Swift у всіх налаштуваннях збірки бібліотеки на

Ні .

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


У моєму випадку налаштування Use Legacy Swift Language Version для Так вирішила проблему.
Джайпракаш Дубей

Переконайтесь, що для кожної з проблем, які мають цю проблему, ви встановили "Так" або "ні". В моєму випадку "Не працювало"
hanzolo

Це працювало для мене. Будь ласка, переконайтеся, що ви зробите те ж саме і для
Тестової

@zizutg: - Ми повинні перехрестити перевірку у всіх цілях. Дякуємо, що вказуєте ще раз.
Шраван

9

Якщо ви використовуєте Xcode 8 або новішої версії

  1. Перейдіть до Налаштування збірки
  2. Знайдіть використовувати застарілу швидку мовну версію
  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, раніше я використовував швидку версію 2.3, і після переходу на swift 3 я не зміг скласти проект. Xcode скаржився на згадане повідомлення про помилку.

Мабуть, у моєму проекті projekt.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;

Здається, специфікатор версії рівня патчу був надто конкретним.


4

У моєму випадку я просто виконую наступні речі

Виберіть ціль проекту => Перейти до налаштування збірки => Пошук "Версії мови Swift" => дати значення поточній версії Swift

Ось і все це виправило мою проблему

Дотримуйтесь цього зображення


4

Я отримав таку ж помилку. Я намагався шукати "Використовувати застарілу мову швидкої версії", але не знайшов. Я використовую 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" на "ТАК", якщо ви використовуєте стару версію swift у своєму проекті чи будь-яку швидку третю сторону. "Ні", якщо ваш проект оновлений до поточної швидкої версії. якщо ви не налаштовуєте свою швидку версію, після кожного оновлення та встановлення, у рамках Pod потрібно вказати це.


2

Я фактично повинен був здійснити пошук "Legacy Swift", щоб мати змогу змінити його з невизначеного на "Так". Коли я просто прокрутився до описаного вище розділу, я не зміг його змінити. Я сподіваюся, що це комусь допоможе.


2

Мій проект написаний на Swift. Я отримав ту саму помилку із fastlane. Сталося, що мій Xcode автоматично оновлювався, тому мені довелося оновити проект до Swift 3.0. Отримав безліч помилок. Виправлення та налагодження займало занадто багато часу, і на той момент цього не варто було, тому я вирішив встановити старішу версію Xcode. Я повернув свій код до 2.3. Тоді fastlane betaбільше не працював. Виходить, мені потрібно було встановити інструмент командного рядка на 7,3. введіть тут опис зображення


1

У мене виникло це саме питання, і я вирішив це, зробивши наступне:

У проекті> Налаштування збірки:

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 ви можете використовувати швидкий 2.3, навіть якщо XCode 8 використовує swift 3.x як версію для швидкої версії за замовчуванням. Для використання swift 2.3 просто увімкніть прапор Use Legacy Swift Language Version на YES з налаштування збірки, тоді 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, але параметр "Use Legacy Swift Language" не було. Зараз, здається, є можливість змінити: Версія Swift Lang

Використовували це виправлення за допомогою Alamofire та інших ліб, і все працює добре.


1

Перейдіть до Налаштування побудови проекту для проекту, а ціль - нижче двох.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Змінити на останню Swift 3.

Помилка вирішена.

Якщо виправлено помилку, будь ласка, сподобається.


1

У бета-версії Xcode 9. Перейдіть до "Налаштування проекту", "Налаштування збірки", знайдіть версію мови Swift. У 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.