Мовна версія Xcode 9 Swift (SWIFT_VERSION)


115

Нещодавно я оновив xcode до версії 9. До цього в Xcode 8.x, коли я це роблю, pod updateвін показує мені код оновлення для перетворення коду на Swift 3, і це робиться для вирішення помилок. Але тепер це дає мені цю помилку:

Налаштування збірки "Swift Language Version" (SWIFT_VERSION) має бути встановлено на підтримуване значення для цілей, які використовують Swift. Цей параметр можна встановити в редакторі налаштувань збірки.

Для цієї помилки я спробував, Build Settings > Swift Language Versionі це було Swift 3.2. Але, як виклик оновлення знову встановив деякі стручки, такі як Alamofire, і він говорить про встановлення Xcode 8.x для перетворення коду в Swift 3, тому мені потрібно встановити додаткова версія з останнім Xcode? Якщо так, то як я можу встановити Xcode 8 з Xcode 9?


спробуйте очистити отримані дані та побудуйте проект на Xcode 9.
iAviator

Яка ваша швидка версія в Xcode 8 ??
santhoshkumar

це було 8.3.3 я думаю. це було останнє перед xcode 9.
Chaudhry

Відповіді:


181

Відповідь на ваше запитання:
Ви можете завантажити Xcode 8.x з порталу завантаження Apple або завантажити Xcode 8.3.3 (або дивіться: Де завантажити старішу версію Xcode ), якщо у вас є преміум-акаунт розробника (ідентифікатор яблука). Ви можете встановити та працювати як з Xcode 9, так і з Xcode 8.x в єдиній (mac) системі. (Переконайтеся, що ви Command Line Toolsпідтримуєте обидві версії Xcode для роботи з терміналом (див. Як встановити "Інструмент командного рядка" ))


Підказка: Як перенести код Xcode 9 сумісні версії Swift (Swift 3,2 або 4)
Xcode 9 дозволяє перетворення / перехід від Swift 3.0до Swift 3.2/4.0тільки. Отже, якщо поточна версія мови Swift вашого проекту нижча за 3,0, тоді ви повинні перенести свій код у сумісну версію Swift 3, використовуючи Xcode 8.x.

Це поширене повідомлення про помилку, яке показує Xcode 9, якщо він ідентифікує мову Swift нижче 3,0 під час міграції.

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


Swift 3.2 підтримується Xcode 9 та Xcode 8 обома.

Проект ► (Виберіть ціль проекту) ► Налаштування збірки ► (Введіть «швидкий» на панелі пошуку) Швидка мова компілятора ► Версія мови швидкої мови ► Клацніть список мов, щоб відкрити її.

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



Перетворіть свій вихідний код із Swift 2.0 в 3.2 за допомогою Xcode 8, а потім продовжуйте з Xcode 9 (Swift 3.2 або 4).


Для легшої міграції коду виконайте наступні кроки: (це допоможе вам перетворити в останню версію швидкої, підтримувану вашим інструментом Xcode)

Xcode: Меню: Редагувати ▶ Приховати ▶ Поточний синтаксис Swift

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


9
Якщо ви приїхали сюди, тому що ви лише зараз (грудень 2018 року) запилили якийсь код Swift 2, ви будете розчаровані, дізнавшись, що Xcode 8 не працює на Mojave.
bugloaf

53

Для об'єктивних проектів C, створених за допомогою Xcode 8 і тепер відкриваються в Xcode 9, він показує ту саму помилку, що і згадується у запитанні.

Щоб виправити це, натисніть кнопку + у налаштуваннях збірки та виберіть Додати визначені користувачем налаштування, як показано на зображенні нижче

налаштування побудови

Потім у новому створеному рядку додати SWIFT_VERSIONяк ключ і 3.2як значення, як показано нижче.

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

Це виправить помилку для об'єктивних проектів c.


2
Це мені допомогло. Дякую.
Андреас Крафт

9
Якщо у вас виникли проблеми з CocoaPods, можливо, вам доведеться додати цей параметр збірки до розділу pods.xcodeproject.
Стюарт Макдональд

1
Це спрацювало для мене. Я також повинен був змінити 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' в налаштуваннях збірки на '$ (успадковано)'
F-1,

1
Ще раз спасибі 2 місяці по тому
Я

1
Оцініть рішення.
користувач366584

4

Я щойно це отримав після створення нового проекту Objective-C в Xcode 10, після того як я додав до проекту файл моделі Core Data.

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

  1. Простий спосіб: відкрийте Інспектор файлів основної моделі моделі даних ( - 1) та змініть мову з Swift на Objective-C

Зміна мови моделі основних даних

  1. Більш тривалий і небезпечний метод

Модель містить файл "вмісту" з цим рядком:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

В є sourceLanguage="Swift"запис. Змініть його на sourceLanguage="Objective-C"і помилка усунеться.

Щоб знайти файл "вмісту", клацніть правою кнопкою миші на .xcdatamodeldXcode і зробіть "Показати в Finder". Клацніть правою кнопкою миші фактичний файл (Finder) і зробіть "Показати зміст пакета"

Також: Змінення мови моделі зупинить Xcode від генерації файлів підкласу керованого об'єкта в Swift.


1

Це може статися, коли ви додали основні дані до існуючого проекту.
Перевірте:
<Name> / <Name> .xcdatamodeld / <Name> .xcdatamodel / content
file.
Цей файл містить запис "sourceLanguage", який (за замовчуванням) міг бути встановлений на "Swift". Змініть його на "Objective-C".


0

Я просто натисніть на останню кнопку швидкого перетворення та встановіть налаштування цілі додатка програми-> Версія мови Swift: swift 4.0,

Сподіваюсь, це допоможе.


0

Це рішення працює, коли більше нічого не працює:

Я витратив більше тижня, щоб перетворити весь проект і прийшов до рішення нижче:

Спочатку деінтегруйте залежність кокоподів від проекту, а потім починайте перетворювати проект на останню швидку версію.

Перейдіть до каталогу проектів у терміналі та введіть:

pod deintegrate

Це призведе до деінтеграції кокоподів від проекту, і жодних слідів від CocoaPods не залишиться. Але в той же час це не видалить xcworkspace та podfiles. Добре, якщо вони присутні.

Тепер вам потрібно відкрити xcodeproj (не xcworkspace), і ви отримаєте безліч помилок, оскільки ви назвали методи залежності cocoapods у своїх основних проектах.

Тож для усунення цих помилок у вас є два варіанти:

  1. Прокоментуйте весь код, який ви використовували з бібліотеки какаоподів.
  2. Створіть клас обгортки, який має фіктивні методи, подібні до бібліотеки кокоподів, а потім назвіть його.

Після усунення всіх помилок ви можете перетворити код на останню швидку версію.

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


0

можливо, вам потрібно завантажити ланцюжок інструментів. Ця помилка виникає, коли у вас немає правильної версії швидкого компілятора.


-3

У моєму випадку всі попередження зникли після того, як я безпосередньо змінив швидку версію з 2.x на 4.0 в налаштуваннях збірки, за винятком двох попереджень.

Ці попередження стосуються myprojectnameTestsта myprojectnameUITestsпапки. Я не помічав, і думав, що це стосується прямої імміграції з Xcode 7 в Xcode 9, і я вважав, що не можу вирішити цю проблему, і мені слід встановити пропущену версію Xcode 8.

У моєму випадку я видалив ці папки, і всі попередження зникли, але ви можете відтворити цю папку та вміст, використовуючи це:

file > new > target > (uitest or unittest extensions)

і використовуйте цю статтю для створення тестових випадків: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html


і хтось скаже мені, в чому моя помилка !?
iman kazemayni

2
Я особисто не став би цього, але нічого не поганого у вашій відповіді, але найкращим місцем буде коментувати питання ОП. Також ви можете поглянути на stackoverflow.com/help/how-to-answer, який допоможе вам придумати правильний спосіб відповісти на питання.
trayburrito
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.