Хеширование
Такие функции, как
кэширование иливыборочное выполнение тестов, требуют способа определить, изменилась ли цель. Tuist вычисляет хэш для каждой цели в графе зависимостей, чтобы определить, изменилась ли цель. Хэш вычисляется на основе следующих атрибутов:
- Атрибуты цели (например, название, платформа, продукт и т. д.)
- Файлы цели
- Хэш зависимостей цели
Атрибуты кэша
Кроме того, при вычислении хэша для
caching мы такжехэшируем следующие атрибуты.
Версия Swift
Мы хэшируем версию Swift, полученную в результате выполнения команды /usr/bin/xcrun swift --version, чтобы избежать ошибок компиляции из-за несовпадения версий Swift в целевых и двоичных файлах.
MODULE STABILITY
Предыдущие версии кэширования бинарных файлов полагались на настройку сборки BUILD_LIBRARY_FOR_DISTRIBUTION, чтобы включить стабильность модулей и позволить использовать бинарные файлы с любой версией компилятора. Однако это вызывало проблемы с компиляцией в проектах с целями, не поддерживающими стабильность модулей. Генерируемые двоичные файлы привязываются к версии Swift, используемой для их компиляции, и эта версия должна совпадать с версией Swift, используемой для компиляции проекта.
Конфигурация
Идея флага -configuration заключалась в том, чтобы исключить использование отладочных бинарников в сборках релизов и наоборот. Однако нам все еще не хватает механизма для удаления других конфигураций из проектов, чтобы предотвратить их использование.
Отладка
Если вы заметили недетерминированное поведение при использовании кэширования в разных окружениях или вызовах, это может быть связано с различиями между окружениями или ошибкой в логике хэширования. Мы рекомендуем выполнить следующие шаги для отладки проблемы:
- Выполните команду
tuist hash cacheилиtuist hash selective-testing(хэши для двоичного кэширования илиселективного тестирования), скопируйте хэши, переименуйте каталог проектаи выполните команду снова. Хэши должны совпасть. - Если хэши не совпадают, скорее всего, сгенерированный проект зависит от окружения. Запустите
tuist graph --format jsonв обоих случаях и сравните графики. В качестве альтернативы сгенерируйте проекты и сравните их файлыproject.pbxprojс помощью инструмента сравнения, например Diffchecker. - Если хэши одинаковы, но отличаются в разных окружениях (например, в CI и локальном), убедитесь, что везде используются одинаковые configuration и Swift version. Версия Swift привязана к версии Xcode, поэтому убедитесь, что версии Xcode совпадают.
Если хэши по-прежнему не детерминированы, сообщите нам, и мы поможем с отладкой.
ПЛАНИРУЕТСЯ УЛУЧШИТЬ ЭКСПЕРИМЕНТ ОТЛАДКИ
Улучшение опыта отладки входит в нашу дорожную карту. Команда print-hashes, которой не хватает контекста для понимания различий, будет заменена более удобной командой, которая использует древовидную структуру для отображения различий между хэшами.
