Xcode 10, порядок фаз исходного кода и сборки swiftlint - PullRequest
0 голосов
/ 19 сентября 2018

После обновления до Xcode 10 возникают некоторые проблемы с начальными настройками проекта.Шаги выглядят следующим образом:

  1. Создание некоторых файлов с использованием Sourcery
  2. Linting с SwiftLint
  3. Build

И конфигурация работает так:

enter image description here

И это работало нормально в Xcode 9, но, очевидно, оно не работает подСистема сборки Xcode 10.Проблема в том, что я загружаю репозиторий (файлы .generated не являются частью репозитория).И нажав build, он покажет мне результаты вроде:

... Использование файла конфигурации на .sourcery.yml Сканирование источников ... Найдено 239 типов.Загрузка шаблонов ... Загружено 9 шаблонов.Генерация кода ... Закончено.Время обработки 0,491948962211609 секунд ...

Итак, источник работает нормально, затем linting:

Linting 'FromResponse.generated.swift' (1/186)

Работает нормально, как и процесс, но в конце концов сборка завершится с ошибкой:

Ошибка: не найдены входные файлы сборки: '/path/Generated/FromResponse.generated.swift ', ...

Так что это странно, поскольку файлы находятся там физически и в соответствии с настройками сборки файл должен быть скомпилирован позже, чем их генерация.Как мне тогда подходить к исходным текстам в процессе сборки?

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Мы можем «исправить» это аналогично проблеме Github:

https://github.com/mac-cain13/R.swift/issues/438#issuecomment-416982928

Мы должны добавить каждый из сгенерированных файлов с помощью Sourcery в выходную папку, и он будет правильно подобран Xcode.

enter image description here

0 голосов
/ 13 ноября 2018

У меня была похожая проблема с фазой сборки, вызывающей mogenerator для построения классов моей модели данных.Подход, предложенный @Yuchen, должен работать.

@ Andrew: Чтобы всегда (повторно) запускать эту фазу сборки, я добавляю строку

touch .alwaysRun

в качестве последней строки в оболочке.Запустите команду и отметьте фазу сборки «Входные файлы», чтобы иметь $(SRCROOT)/.alwaysRun.Это, кажется, делает трюк.

0 голосов
/ 21 сентября 2018

Это относится к изменениям в новой системе сборки XCode, которая была включена по умолчанию в XCode 10. Если на этапе сборки создаются файлы, которые необходимы в качестве входных данных для более поздней фазы сборки, то необходимо явно указать их в выходных данных.Файлы или список выходных файлов.

В вашем примере фаза сборки Sourcery генерирует исходные файлы Swift, которые необходимы в качестве входных данных для фазы Compile Sources.

Однако проблема заключается в том, что после того, как вы укажете выходные файлы для Sourcery, фаза сборки перезапускается не каждый раз, так как он видит, что выходной файл уже существует.До сих пор я не разработал полезное решение для этой части, кроме запуска таких инструментов, как Sourcery и SwiftGen вручную, или сохранения сгенерированных файлов в Git, чтобы они всегда присутствовали.

...