Модуль, скомпільований із Swift 4.0, не можна імпортувати в Swift 4.0.1


91

Однак я перекомпілював фреймворк, використовуючи той самий Xcode, і він все ще видає мені цю помилку.

  • Базовий SDK iOS 11.1 для обох
  • Swift Мовна версія Swift 4.0 для обох
  • Не використовується стручки / Карфаген

Сподіваюся, хтось може це знати


Здається, що Apple повинна переглянути це 10-річне повідомлення про застарівання для Objective C: ^) Це мене покусало на> 1 проект зараз, і на обох це бінарні фреймворки третьої сторони.
Антон Тропашко

Відповіді:


138

Оновлення:

Для випускних версій Xcode:

Ця помилка (та подібні помилки, пов’язані із Swift 4.1, 4.2 тощо), виникає під час відкриття проекту з Xcode 9.1, 9.2, 9.3, 9.4, 10 тощо, який використовує фреймворки, побудовані з попередніми інструментами Xcode.

Щоб виправити проблему, оновіть та carthage update --platform iOSвідновіть свої фреймворки за допомогою Carthage ( ), Cocoapods ( pod updateабо pod install) або вручну за допомогою нових оновлених інструментів Xcode. Інструменти слід оновлювати автоматично під час оновлення Xcode, але якщо ні, то можна виконати кроки, описані нижче в оригінальній відповіді.

Вам також може знадобитися очистити ваш проект cmd + shift + kі, можливо, папку збірки, cmd + option + shift + kщоб Xcode не використовував кешовані збірки фреймворку.

У деяких випадках вам також може знадобитися видалити папку похідних даних (Легко знайти, перейшовши до Налаштування Xcode -> Місцеположення -> Виведена папка даних ( Спасибі Stunner )

Для бета-версій Xcode:

Дивіться оригінальну відповідь нижче, а потім виконайте кроки вище.

Оригінальна відповідь:

Напевно, у вас все ще є інструменти xcodebuild, встановлені на Xcode 9.0, який будується за допомогою Swift 4.0 і несумісний із Swift 4.0.1 бета-версії Xcode 9.1.

Перевірте термінал за допомогою команди:

xcodebuild -version

Або просто перейдіть до параметрів Xcode -> Місцеположення та перевірте / змініть інструменти командного рядка на Xcode 9.1. Тоді вас слід налаштувати.


1
Я також очистив похідні дані та очистив проект, не знаю, чи потрібно це всім, але тут це здавалося. Подяка
Саймон

3
Привіт @Zig. Ретпо, яке я використовую на github (mattdonnelly / swifter), знаходиться на Swift 4.0, але, очевидно, було скомпільовано за допомогою XCode 9.0, тому я отримую цю проблему. Які кроки необхідні для перекомпіляції чужого кокапода на Github для XCode 9.1 і вище?
мама Джозефа Бойса

1
чи є спосіб додати інструмент командного рядка? У мене просто є Xcode 9.3 у спадному меню командного рядка. і у мене теж ця проблема
tara tandel

1
Деякі з моїх стручків не готові до Swift 4.2, тому я повинен був покладати Swift Language Versionна Swift 4тих. Тоді це спрацювало.
skofgar

1
Плюс 1 для комбінації клавіш для очищення папки складання - я не те, що я знав, як це зробити від руки.
Метт

25

Моя проблема виникла через зовнішню структуру, яка не була скомпільована для Swift 4.0.2. Я додав цей файл через Карфаген , тому запускається:

carthage update --platform iOS

А потім очищення cmd + shift + kпапки проекту та збірки cmd + option + shift + kта видалення папки похідних даних (просто переміщення її також у смітник) також спрацювало для мене.


2
справді, це по суті рішення. Те саме відбулося сьогодні (18 квітня) завдяки останньому швидкому оновленню Apple! :)
Fattie

cmd + option + shift + k - ось що вдалося після оновлення Карфагена. Дякую!
Леонардо Лейте,

15

У моєму випадку я завантажив бета-версію xCode 11 для тестування SwiftUI. Коли я запускаю свій проект, я отримую помилку "Модуль, скомпільований Swift 5.1, не може бути імпортований компілятором Swift 5.0.1: ..." .

Щоб вирішити цю проблему. я змінив інструмент командного рядка xCode на новий інструмент рядка коментарів xCode 11. Після цього ви можете створити новий проект xcode за допомогою SwiftUI.

Xcode -> Налаштування -> Розташування -> Інструмент командного рядка XCode

Xcode Commend Line Tool

я сподіваюся, це допоможе тому, хто хоче протестувати за допомогою нової роботи :)


9

Встановіть Xcode Toolchain певної версії Xcode, яка працювала для вас звідси .

Набір інструментів Xcode включає копію компілятора, lldb та інших пов’язаних інструментів, необхідних для забезпечення згуртованого досвіду розробки для роботи в певній версії Swift.

Відкрийте Налаштування Xcode, перейдіть до Компоненти> Ланцюжки інструментів і виберіть встановлений ланцюжок інструментів Swift.

Це дозволить вам скомпілювати та запустити програму на даний момент.


Після 2 днів пошуку та випробування будь-якого можливого рішення з оновленням картриджів, завантаженням, швидкими налаштуваннями мови тощо я знайшов правильну відповідь тут :)
memresubasi

7

Я вирішив цю проблему з бета-версією Xcode 10, яка додає Swift 4.2. Моя проблема не була пов’язана з Карфагеном чи якимись зовнішніми залежностями.

Йти до YourTarget > Build Settings > Swift Language Version всіх ваших цілей Xcode.

Мої всі були налаштовані Swift 4 .

Після додавання фази збірки файлів копіювання я почав отримувати помилку

: 0: помилка: модуль, скомпільований за допомогою Swift 4.1.2, не може бути імпортований компілятором Swift 4.2: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build / MyBabug. MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

Помилка команди MergeSwiftModule з ненульовим кодом виходу

Потім я встановлюю для кожної цілі Swift Language VersionзначенняSwift 4.2 , що усувало помилку.

Однак я не впевнений, чому помилка траплялася, оскільки встановлення всіх цілей Swift 4має бути однаково дійсним.


1
У мене проблеми з пошукомBuild Settings
Чандрю

@Chandrew спочатку натисніть на свою ціль. Оновлена ​​відповідь.
пкамб

3

У моєму випадку (Xcode 9.2):

Я пішов до Xcode Preferences > Locations > Derived Data

Потім я видалив дані та зробив чисту збірку, і все було нормально.


1

У моєму випадку я використовував CocoaPods з плагіном cocoapods-binaryдля попередньої побудови бібліотек до бінарних файлів. Після оновлення Xcode з 10 до 11 Xcode видає мені цю помилку:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

Я виправляю це, видаляючи /Podsкаталог і запускаючи pod install.


0

У моєму випадку я перекомпілював фреймворк з якою б версією він не скаржився.

Щоб перекомпілювати, запустіть pod updateабо оновіть картуз (який ви коли-небудь використовуєте) та побудуйте проект.

Потім шукайте фреймворк у пошуку. Скопіюйте та вставте theFramework.frameworkфайл у свій проект і переконайтеся, що "Скопіюйте елементи, якщо це потрібно". Створіть проект заново, і він повинен працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.