Преобразовать в текущий синтаксис Swift - "Нет такого модуля" (Swift 4, Xcode 9)

В Xcode 9 я пытаюсь сделать автоматическое преобразование в Swift 4. Он выходит из строя со следующим сообщением:

введите описание изображения здесь

Ошибка перехода к текущему синтаксису Swift
Перед попыткой переноса убедитесь, что все выбранные цели успешно сработали с текущей версией Swift.

Он жалуется на недостающий модуль. Но когда я делаю регулярную сборку, проблем нет. Не уверен, что это актуально, но модуль (который отсутствует в Xcode) уже был преобразован в Swift 4 ранее (в нем собственный проект).

Примечание: здесь не используются Cocoapods/Carthage.

Примечание. Два решения пробовали (и работали), но не затрагивают основную проблему.

  • Одно из решений заключается в том, чтобы выполнить преобразование вручную (измените версию Swift на 4 в настройке сборки и примените Fix-Its по одному, пока не будет больше ошибок сборки).
  • Еще одно решение - отключить стороннюю структуру (закомментировать весь код, где она была использована), выполнить автоматическую миграцию, а затем снова включить фреймворк. Это может стать довольно сложным с большими проектами.

Ответ 1

Я пока не могу найти решение.

Сейчас я исправляю настройку Swift Language Version

enter image description here

После изменения с 3.2 на 4.0 я компилирую и исправляю ошибки и предупреждения вручную.
Я жду лучшего решения!

Ответ 2

У меня также возникла проблема при преобразовании моего проекта в Swift 4.0. Похоже, проблема возникает при попытке конвертировать цель, которая импортирует фреймворк, который уже находится в Swift 4.0. На скриншоте вы пытаетесь преобразовать "RecipeTextParser", который импортирует "SovaTools" , который уже является Swift 4.0.

Я нашел грязное, но рабочее решение. При конвертации вы можете использовать более старую (Swift 3.2) версию "SovaTools" . Вы должны НЕ проверить его отметку в окне выбора цели инструмента преобразования. Затем, когда "RecipeTextParser" будет успешно преобразован, вы можете снова использовать версию Swift 4.0 "SovaTools" .

Ответ 3

Я получил эту ошибку, и в моем случае один из моих Pods (один Xcode жаловался) был целью Swift 4, а остальные были Swift 3.2. Глядя на журналы сборки, похоже, что Xcode построил эту инфраструктуру в одном месте и искал ее в другом. Когда я вернул это Pod в более старую версию (использующую Swift3.2), проблема исчезла. Очевидно, ошибка Xcode. HTH

Ответ 4

Функция миграции языка Xcode (Xcode 9) не так точна, что может переносить ваш полный код/​​проект из одной быстрой версии в другую с нулевым допуском. Он пропускает немного миграции кода для нас (разработчиков). Это может быть ошибка или неточность инструмента. Но вам нужно также приложить некоторые усилия вручную, чтобы полностью перенести быструю языковую версию для вашего проекта/кода.

Теперь, согласно вашему снимку, отображается Xcode и ошибка для рамки "RecipeTextParser". Я думаю, что это внешняя/сторонняя структура. Еще одно замечание: вы интегрировали эту инфраструктуру с помощью CocoaPods:

Любая из следующих причин может быть причиной отказа в миграции кода:

  • CocoaPods блокирует фреймворк (файлы) для редактирования. Таким образом, процесс миграции языка не может переносить (или идентифицировать) код для внешней/третьей стороны.
  • В общих чертах, Framework - это пакет файлов кода, поэтому сама фреймворк может не разрешать редактирование файла/исходного кода.

Предложение как решение:

  • Обновите свои модули cocoa, а также все фреймворки, интегрированные с помощью модулей cocoa, совместимых с последней версией быстрой версии.
  • Если вы вручную интегрировали/добавили внешние/сторонние фреймворки, вам также необходимо их обновить и заменить.

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

Ответ 5

Просто обновите ваш модуль, и это решит проблему.

Чтобы обновить модуль:

  • откройте терминал и перейдите в каталог вашего проекта
  • обновление типа pod

Это решило мою проблему.