Hashing
Funkcje takie jak
caching lubselektywne wykonywanie testów wymagają sposobu na określenie, czy cel uległ zmianie. Tuist oblicza skrót dla każdego celu w grafie zależności, aby określić, czy cel został zmieniony. Hash jest obliczany na podstawie następujących atrybutów:
- Atrybuty celu (np. nazwa, platforma, produkt itp.).
- Pliki celu
- Skrót zależności celu
Atrybuty pamięci podręcznej
Dodatkowo, obliczając hash dla
caching, hashujemyrównież następujące atrybuty.
Wersja Swift
Skracamy wersję Swift uzyskaną po uruchomieniu polecenia /usr/bin/xcrun swift --version, aby zapobiec błędom kompilacji spowodowanym niezgodnością wersji Swift między celami a plikami binarnymi.
STABILNOŚĆ MODUŁU
Poprzednie wersje buforowania binarnego opierały się na ustawieniu kompilacji BUILD_LIBRARY_FOR_DISTRIBUTION, aby włączyć stabilność modułu i umożliwić korzystanie z plików binarnych z dowolną wersją kompilatora. Powodowało to jednak problemy z kompilacją w projektach z celami, które nie obsługują stabilności modułów. Wygenerowane pliki binarne są powiązane z wersją Swift użytą do ich kompilacji, a wersja Swift musi być zgodna z wersją użytą do kompilacji projektu.
Konfiguracja
Ideą flagi -configuration było zapewnienie, że pliki binarne debugowania nie będą używane w kompilacjach wydania i odwrotnie. Nadal jednak brakuje nam mechanizmu usuwania innych konfiguracji z projektów, aby zapobiec ich użyciu.
Debugowanie
Jeśli zauważysz niedeterministyczne zachowanie podczas korzystania z buforowania w różnych środowiskach lub wywołaniach, może to być związane z różnicami między środowiskami lub błędem w logice mieszania. Zalecamy wykonanie poniższych kroków w celu debugowania problemu:
- Uruchom
tuist hash cachelubtuist hash selective-testing(hashe dlabinary cachinglub selective testing), skopiuj hashe, zmień nazwę katalogu projektu i uruchom polecenie ponownie. Skróty powinny się zgadzać. - Jeśli skróty nie są zgodne, prawdopodobnie wygenerowany projekt zależy od środowiska. Uruchom
tuist graph --format jsonw obu przypadkach i porównaj wykresy. Alternatywnie, wygeneruj projekty i porównaj ich plikiproject.pbxprojza pomocą narzędzia do porównywania, takiego jak Diffchecker. - Jeśli skróty są takie same, ale różnią się w różnych środowiskach (na przykład CI i lokalnym), upewnij się, że wszędzie używana jest ta sama konfiguracja i wersja Swift. Wersja Swift jest powiązana z wersją Xcode, więc upewnij się, że wersje Xcode są zgodne.
Jeśli hashe nadal są niedeterministyczne, daj nam znać, a my pomożemy w debugowaniu.
PLANOWANE LEPSZE DOŚWIADCZENIE DEBUGOWANIA
Ulepszenie naszego doświadczenia w debugowaniu jest na naszej mapie drogowej. Polecenie print-hashes, któremu brakuje kontekstu do zrozumienia różnic, zostanie zastąpione bardziej przyjaznym dla użytkownika poleceniem, które wykorzystuje strukturę podobną do drzewa, aby pokazać różnice między hashami.
