Модуль, скомпилированный с Swift 4.1.2, не может быть импортирован в Swift 4.1.50: Ошибка Xcode 10

Swift 4.2 вышел, и я получаю это сообщение об ошибке в моем проекте при использовании ObjectMapper и некоторых других модулей:

Модуль, скомпилированный с Swift 4.1.2, не может быть импортирован в Swift 4.1.50

Итак, как мне сообщить Xcode начать обновление моего проекта и перенести его в Swift 4.2?

Ответ 1

В Swift 4.2 происходит изменение в реализации Implicitly Unwrapped Optional (IUO), согласно быстрому блогу теперь подразумевается развернутый дополнительный T! будет рассматриваться как T? с и дополнительным флагом для компилятора, чтобы знать, что это неявное разворачивание необязательно.

Новая ментальная модель для IUO - это та, где вы считаете! быть синонимом? с добавлением, что он добавляет флаг в объявление, позволяя компилятору знать, что объявленное значение может быть неявно разворачиваться.

Из-за этого изменения может возникнуть проблема с совместимостью с исходным кодом, которая может потребовать изменения кода перед его компиляцией.

В Swift 3 объявления типа var a: Int? приведет к наличию типа "Необязательно" и деклараций типа var b: String! приведет к тому, что b будет иметь тип ImplicitlyUnwrappedOptional. Он изменился в Swift 4.2, следовательно, появилась ошибка для ObjectMapper для Xcode 10, которая поставляется с быстрым 4.2, и аналогичная реализация была выполнена для 3. * для Xcode 10.

В библиотеке Objectmapper есть некоторые декларации функций, которые ранее показывали предупреждения для swift 4.1, теперь показывающие как ошибку для swift 4.2. Обратитесь к приведенному ниже изображению для предупреждений в Xcode 9.4 и быстрой версии 4.1

enter image description here

В репозитории ObjectMapper GitHub есть несколько запросов на загрузку, которые исправили проблему, но они ждут новой версии бета-версии Xcode в соответствии с обсуждениями, поскольку она использует функцию- совместитель, которая была недавно принята, будет выпущена с новой бета-версией Xcode.

Ответ 2

Вы не компилируете свой модуль Carthage с соответствующей быстрой версией. Поэтому вам нужно:

  1. Убедитесь, что ваш терминал указывает на ваше приложение Xcode 10 Beta, а не ваш обычный Xcode:

sudo xcode-select -switch Xcode_beta_10.app

  1. Обновите файлы Carthage:

обновление картриджа --platform iOS - нетрадиционные файлы

  1. Вернитесь к проекту в Xcode, очистите, постройте

Ответ 3

Запустите эту команду ниже в каталоге проекта с помощью терминала. Он обновит ваш контейнер. Надеюсь, что это решит вашу проблему.

pod update ObjectMapper

Ответ 4

Вам нужно переключить бета-версию Xcode в терминал. И удалите старый проект Carthage в своем проекте. обновить обновление Carthage carthage update --platform iOS --no-use-binaries.

Ответ 5

У меня была такая же проблема с Аламофиром.

Мое исправление было

  1. очистить мою сборку
  2. перейдите в File/Workspace Settings и убедитесь, что вы используете Legacy Build System для Build System. И тогда проблема исчезла.