Skip to content

Перевод 🌍

Вы можете перевести или улучшить перевод этой страницы.

Внести вклад

Хеширование

Такие функции, как

кэширование или

выборочное выполнение тестов, требуют способа определить, изменилась ли цель. 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, которой не хватает контекста для понимания различий, будет заменена более удобной командой, которая использует древовидную структуру для отображения различий между хэшами.

Released under the MIT License.