Модуль, скомпилированный с помощью Swift 4.2.1, не может быть импортирован компилятором Swift 5.0

Я пытаюсь реализовать интеграцию стороннего приложения в проект согласно инструкции https://github.com/Paytm-Payments/Paytm_iOS_App_Kit/tree/master/Swift/BitCodeDisabled/PaytmNativeSDK

Я вижу следующую ошибку в сборке

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

Я пробовал наборы инструментов https://medium.com/xcblog/switching-swift-versions-inside-xcode-using-toolchains-755b28831c43 Ошибка изменяется на Причина: Несовместимая версия библиотеки: PaytmNativeSDK требует версию 1.0.0 или более позднюю, но libswiftCore.dylib предоставляет версию 0.0.0

Как мне настроить XCode или библиотеку, чтобы она работала. Производитель не может обновить библиотеку Swift 5.0 и сделать ее доступной для POD.

Ответ 1

Для пользователей Carthage: после обновления до Xcode 10.2 я столкнулся с той же самой проблемой с платформой, которую я импортировал, используя Carthage.

Я решил это, перестроив структуру:

carthage update --no-use-binaries --platform iOS

Ответ 2

Правильное решение - скачать Xcode 10.1 и ждать, пока Apple исправит ошибку.

Не тратьте время на исправление сторонней ошибки.


Проблема моего проекта в том, что мы используем Alamofire, который не удалось обновить в Карфагене.

Ответ 3

Я хотел использовать Swift 4.2 (который Xcode 10.2 должен по-прежнему поддерживать, я установил его в версии Swift Language), но он все равно дал мне ошибку о компиляторе Swift 5.0. Поэтому после попытки очистить все, например, папку сборки, производные данные и прочее, я пришел к выводу, что это не работает в Xcode 10.2.

Я вернулся к Xcode 10.1, который вы можете скачать здесь. Это работает. Поэтому, пока Apple не исправит эту ошибку, я вынужден оставаться на Xcode 10.1.

Ответ 4

Это произойдет, если у вас есть внешние библиотеки в вашем проекте, которые все еще построены с использованием компилятора 4.2, тогда как новый Xcode пытается построить ваш проект в компиляторе 5.0.

В моем случае у меня было несколько библиотек, импортированных с использованием Carthage. К счастью, библиотеки, которые я использовал, выпустили обновления за последние несколько дней, что делает его совместимым с компиляторами Swift 5.0. Если эти внешние библиотеки не обновили его для поддержки Swift 5.0, возможно, вам сейчас не повезло.

По дороге вы можете столкнуться с несколькими проблемами, и вот несколько советов, которые помогут вам избежать дальнейших проблем.

  1. Удалите файл cartfile.resolved и Carthage полностью
  2. Убедитесь, что вы удалили все копии библиотек, добавленных в ваш проект ранее.
  3. Удалите встроенные библиотеки и связанные инфраструктуры и библиотеки из своих целей> Yourapp> General.
  4. Продукт> Очистить папку сборки
  5. Обновите файл корзины и загрузите новые источники, используя команду обновления Carthage.
  6. Теперь импортируйте библиотеки обратно в ваш проект.

Надеюсь, это работает.

Ответ 5

Моя проблема с Карфагеном была связана с фазой xcode, которая копирует двоичные файлы в фазу "карфагенских копий-фреймворков".

Я немного отличаюсь от того, что прокомментировано в fooobar.com/questions/17095424/..., потому что это решение также обновляет версии зависимостей в некоторых случаях.

Итак, я только что выполнил "сборку карфагена". Я также включил очистку кеша для Carthage, чтобы исправить возможные ошибки в подзадачах (в моем случае, сбой в git clone с "кодом выхода 1")

rm -rf ~/Library/Caches/org.carthage.CarthageKit
carthage build --no-use-binaries --platform iOS --verbose

Ответ 6

В одном из моих проектов Swift 4.2 я использую ATVPlayer. У меня была такая же проблема, как описано выше, когда я использовал Xcode 10.2. Я смог построить свой проект с ATVPlayer 2.0.2 только потому, что эта версия библиотеки создана с помощью Swift 5 (однако в примечаниях к выпуску они упоминали Swift 4.2). Но теперь я использую Xcode 10.2.1 и могу сказать, что я не получаю никаких ошибок, связанных с ATVPlayer, даже если я использую v.2.0.1, которая была создана с более старой версией компилятора Swift.

Следовательно, вы должны обновить свой экземпляр Xcode до 10.2.1.

Ответ 7

Разработчикам фреймворка необходимо предоставить обновление, которое встроено в Xcode 10.2.

Объяснение для разработчиков фреймворка:
Даже если вы создали платформу в Xcode 10.2 или с версией по умолчанию, используемой CI, ваши пользователи все равно могут столкнуться с такой ошибкой. Вы должны убедиться, что Xcode 10.2 является вашим инструментом командной строки по умолчанию. Вы можете проверить это в терминале с помощью команды xcodebuild -version. Версия по умолчанию может быть скорректирована в Xcode → Preferences → Locations → Command Line Tools.