Перейти к содержимому

Хеширование

Такие функции, как кэширование или выборочное выполнение тестов, требуют способа определить, изменилась ли цель. Tuist вычисляет хэш для каждой цели в графе зависимостей, чтобы определить, изменилась ли цель. Хэш вычисляется на основе следующих атрибутов:

  • Атрибуты цели (например, название, платформа, продукт и т. д.)
  • Файлы цели
  • Хэш зависимостей цели

Атрибуты кэша#

Кроме того, при вычислении хэша для caching мы также хэшируем следующие атрибуты.

Версия Swift#

Мы хэшируем версию Swift, полученную в результате выполнения команды /usr/bin/xcrun swift --version, чтобы избежать ошибок компиляции из-за несовпадения версий Swift в целевых и двоичных файлах.

Module Stability

Предыдущие версии кэширования бинарных файлов полагались на настройку сборки BUILD_LIBRARY_FOR_DISTRIBUTION, чтобы включить стабильность модулей и позволить использовать бинарные файлы с любой версией компилятора. Однако это вызывало проблемы с компиляцией в проектах с целями, не поддерживающими стабильность модулей. Генерируемые двоичные файлы привязываются к версии Swift, используемой для их компиляции, и эта версия должна совпадать с версией Swift, используемой для компиляции проекта.

Конфигурация#

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

Отладка#

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

  1. Выполните команду tuist hash cache или tuist hash selective-testing (хэши для двоичного кэширования или селективного тестирования), скопируйте хэши, переименуйте каталог проекта и выполните команду снова. Хэши должны совпасть.
  2. Если хэши не совпадают, скорее всего, сгенерированный проект зависит от окружения. Запустите tuist graph --format json в обоих случаях и сравните графики. В качестве альтернативы сгенерируйте проекты и сравните их файлы project.pbxproj с помощью инструмента сравнения, например Diffchecker.
  3. Если хэши одинаковы, но отличаются в разных окружениях (например, в CI и локальном), убедитесь, что везде используются одинаковые configuration и Swift version. Версия Swift привязана к версии Xcode, поэтому убедитесь, что версии Xcode совпадают.

Если хэши по-прежнему не детерминированы, сообщите нам, и мы поможем с отладкой.

Планируется Улучшить Эксперимент Отладки

Улучшение опыта отладки входит в нашу дорожную карту. Команда print-hashes, которой не хватает контекста для понимания различий, будет заменена более удобной командой, которая использует древовидную структуру для отображения различий между хэшами.