Модуль, скомпилированный с помощью Swift 4.0, нельзя импортировать в Swift 4.0.1.

92

Однако я перекомпилировал фреймворк, используя тот же Xcode, и он все еще дает мне эту ошибку.

  • Базовый SDK iOS 11.1 для обоих
  • Swift Language Version Swift 4.0 для обоих
  • Не используется Pods / Carthage

Я надеюсь, что кто-нибудь может знать

Саймон
источник
Похоже, Apple необходимо пересмотреть это уведомление о 10-летнем прекращении поддержки Objective C: ^) Меня это укусило на> 1 проекте, и оба они являются бинарными фреймворками сторонних производителей.
Антон Тропашко

Ответы:

139

Обновить:

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

Эта ошибка (и аналогичные ошибки, связанные с Swift 4.1, 4.2 и т. Д.) Будут возникать при открытии проекта с Xcode 9.1, 9.2, 9.3, 9.4, 10 и т. Д., Который использует фреймворки, созданные с помощью более ранних инструментов Xcode.

Чтобы решить эту проблему, обновите и перестройте свои фреймворки с помощью Carthage ( carthage update --platform iOS), 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 и несовместим с бета-версией Xcode 9.1 Swift 4.0.1.

Зарегистрируйтесь в терминале с помощью команды:

xcodebuild -version

Или просто зайдите в настройки Xcode -> Locations и проверьте / измените инструменты командной строки на Xcode 9.1. Тогда вы должны быть настроены.

Зиг
источник
1
Я также очистил производные данные и очистил проект, не знаю, нужно ли всем, но вот вроде бы. Спасибо
Саймон
3
Привет @Zig. Репо, которое я использую на github (mattdonnelly / swifter), находится в Swift 4.0, но, очевидно, было скомпилировано с использованием XCode 9.0, поэтому у меня возникает эта проблема. Какие шаги необходимы, чтобы перекомпилировать чужой cocoapod на Github для XCode 9.1 и выше?
Мама Джозефа Бойса
1
есть ли способ добавить инструмент командной строки? У меня только Xcode 9.3 в раскрывающемся списке командной строки. и у меня тоже есть эта проблема
Тара Тандель
1
Некоторые из моих стручков не готовы к Swift 4.2, поэтому я должен был возлагать Swift Language Versionна Swift 4тех. Тогда это сработало.
skofgar
1
Плюс 1 за ярлык для очистки папки сборки - я не знал, как это сделать насквозь.
Мэтт
25

Моя проблема была связана с тем, что внешний фреймворк не компилировался для Swift 4.0.2. Я добавил этот файл через Carthage , поэтому запустил:

carthage update --platform iOS

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

Stunner
источник
2
действительно, это по сути решение. То же самое произошло сегодня (18 апреля) из-за последнего быстрого обновления Apple! :)
Fattie
cmd + option + shift + k - вот что помогло после обновления Carthage. Благодарность!
Леонардо Лейте
15

В моем случае я загрузил бета-версию xCode 11, чтобы протестировать SwiftUI. Когда я запустил свой проект, я получил ошибку «Модуль, скомпилированный с помощью Swift 5.1, не может быть импортирован компилятором Swift 5.0.1: ...» .

Чтобы исправить эту проблему. Я изменил инструмент командной строки xCode на новый инструмент строки комментариев xCode 11. После этого вы можете создать новый проект xcode с помощью SwiftUI.

Xcode -> Настройки -> Местоположение -> Инструмент командной строки XCode

Инструмент Xcode Commend Line

Надеюсь, это поможет кому-то, кто хочет потестить новый фреймворк :)

Эмре Гюрсес
источник
9

Установите Xcode Toolchain конкретной версии Xcode, которая работала для вас отсюда .

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

Откройте настройки Xcode, перейдите к «Компоненты»> «Цепочки инструментов» и выберите установленную цепочку инструментов Swift.

Это позволит вам скомпилировать и запустить приложение.

Тина
источник
После 2 дней поиска и опробования всех возможных решений с обновлением carthage, начальной загрузкой, настройками быстрого языка и т. Д. Я нашел здесь правильный ответ :)
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/MyAppbug/Device MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

Команда MergeSwiftModule завершилась ошибкой с ненулевым кодом выхода

Затем я каждый целевой объект Swift Language Versionк Swift 4.2, который устранил ошибку.

Я не уверен, почему вообще произошла ошибка, поскольку все установленные цели Swift 4должны быть одинаково действительными.

пкамб
источник
1
У меня проблемы с поискомBuild Settings
Чандрю
@Chandrew сначала нажмите на свою цель. Обновленный ответ.
pkamb
3

В моем случае (Xcode 9.2):

Я пошел в Xcode Preferences > Locations > Derived Data

Затем я удалил данные и сделал чистую сборку, и все было в порядке.

user3288482
источник
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или обновить carthage (какой бы вы ни использовали) и построить проект.

Затем найдите фреймворк в Finder. Скопируйте и вставьте в theFramework.frameworkсвой проект и убедитесь, что "Копировать элементы, если необходимо". Создайте проект снова, и он должен работать.

Джозеф Фрэнсис
источник