Модуль, скомпилированный с 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?

5 ответов

Решение

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

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

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

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

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

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

Обновление: проблема устранена в версии ObjectMapper 3.3.0.

Вы не компилируете свой модуль Carthage с верной версией Swift. Так что вам нужно:

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

sudo xcode-select -switch Xcode_beta_10.app

  1. Обновите ваши файлы в Карфагене:

обновление карфагена --platform iOS --no-use-binaries

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

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

pod update ObjectMapper

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

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

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

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