Pamięć podręczna modułów
::: ostrzeżenie WYMAGANIA
- Projekt wygenerowany przez
- Konto i projekt Tuist
:::
Tuist Module cache zapewnia potężny sposób na optymalizację czasu kompilacji poprzez buforowanie modułów jako plików binarnych (.xcframeworks) i udostępnianie ich w różnych środowiskach. Pozwala to na wykorzystanie wcześniej wygenerowanych plików binarnych, zmniejszając potrzebę wielokrotnej kompilacji i przyspieszając proces rozwoju.
Ocieplenie
Tuist efektywnie wykorzystuje skróty dla każdego celu w grafie zależności w celu wykrycia zmian. Wykorzystując te dane, tworzy i przypisuje unikalne identyfikatory do plików binarnych pochodzących z tych celów. W czasie generowania grafu Tuist płynnie zastępuje oryginalne cele ich odpowiednimi wersjami binarnymi.
Ta operacja, znana jako "rozgrzewanie" , tworzy pliki binarne do użytku lokalnego lub do udostępniania członkom zespołu i środowiskom CI za pośrednictwem Tuist. Proces rozgrzewania pamięci podręcznej jest prosty i można go zainicjować za pomocą prostego polecenia:
bash
tuist cachePolecenie ponownie wykorzystuje pliki binarne, aby przyspieszyć proces.
Użycie
Domyślnie, gdy polecenia Tuist wymagają wygenerowania projektu, automatycznie zastępują zależności ich binarnymi odpowiednikami z pamięci podręcznej, jeśli są one dostępne. Dodatkowo, jeśli określisz listę celów, na których chcesz się skupić, Tuist zastąpi również wszelkie zależne cele ich buforowanymi plikami binarnymi, pod warunkiem, że są one dostępne. Dla tych, którzy preferują inne podejście, istnieje opcja całkowitej rezygnacji z tego zachowania poprzez użycie określonej flagi:
bash
tuist generate # Only dependencies
tuist generate Search # Dependencies + Search dependencies
tuist generate Search Settings # Dependencies, and Search and Settings dependencies
tuist generate --no-binary-cache # No cache at allbash
tuist testWARNING
Buforowanie binarne to funkcja przeznaczona dla przepływów pracy deweloperskiej, takich jak uruchamianie aplikacji na symulatorze lub urządzeniu lub uruchamianie testów. Nie jest przeznaczona do kompilacji wersji. Podczas archiwizacji aplikacji należy wygenerować projekt ze źródłami przy użyciu flagi --no-binary-cache.
Profile pamięci podręcznej
Tuist obsługuje profile pamięci podręcznej, aby kontrolować, jak agresywnie cele są zastępowane buforowanymi plikami binarnymi podczas generowania projektów.
- Wbudowane elementy:
only-external: zastępuje tylko zewnętrzne zależności (domyślne ustawienie systemowe).all-possible: zastąp jak najwięcej celów (w tym cele wewnętrzne).brak: nigdy nie zastępuje buforowanych plików binarnych
Wybierz profil za pomocą --cache-profile na tuist generate:
bash
# Built-in profiles
tuist generate --cache-profile all-possible
# Custom profiles (defined in Tuist Config)
tuist generate --cache-profile development
# Use config default (no flag)
tuist generate
# Focus on specific targets (implies all-possible)
tuist generate MyModule AnotherTarget
# Disable binary replacement entirely (backwards compatible)
tuist generate --no-binary-cache # equivalent to --cache-profile nonePierwszeństwo podczas rozwiązywania skutecznego zachowania (od najwyższego do najniższego):
--no-binary-cache→ profilnone- Skupienie na celu (przekazywanie celów do
generuje) → profilwszystko-możliwe --cache-profile- Konfiguracja domyślna (jeśli ustawiona)
- Domyślne ustawienia systemowe (
only-external)
Obsługiwane produkty
Tylko następujące produkty docelowe mogą być buforowane przez Tuist:
- Frameworki (statyczne i dynamiczne), które nie zależą od XCTest.
- Pakiety
- Makra Swift
Pracujemy nad obsługą bibliotek i celów, które zależą od XCTest.
UPSTREAM DEPENDENCIES
Gdy cel nie jest buforowalny, powoduje to, że cele nadrzędne również nie są buforowalne. Na przykład, jeśli mamy graf zależności A > B, gdzie A zależy od B, jeśli B jest niebuforowalne, A również będzie niebuforowalne.
Wydajność
Poziom wydajności, który można osiągnąć za pomocą buforowania binarnego, zależy w dużej mierze od struktury grafu. Aby osiągnąć najlepsze wyniki, zalecamy następujące rozwiązania:
- Unikaj bardzo zagnieżdżonych grafów zależności. Im płytszy graf, tym lepiej.
- Zdefiniuj zależności z celami protokołów/interfejsów zamiast celów implementacji oraz implementacje wstrzykiwania zależności z najwyższych celów.
- Podziel często modyfikowane cele na mniejsze, których prawdopodobieństwo zmiany jest niższe.
Powyższe sugestie są częścią
Architektury Modułowej, którą proponujemy jako sposób na ustrukturyzowanieprojektów w celu zmaksymalizowania korzyści nie tylko z buforowania binarnego, ale także z możliwości Xcode.
Zalecana konfiguracja
Zalecamy posiadanie zadania CI, które uruchamia się przy każdym zatwierdzeniu w głównej gałęzi, aby ogrzać pamięć podręczną. Zapewni to, że pamięć podręczna zawsze będzie zawierać pliki binarne dla zmian w głównej, dzięki czemu gałąź lokalna i CI będą budować na nich przyrostowo.
CACHE WARMING USES BINARIES
Polecenie tuist cache również korzysta z binarnej pamięci podręcznej, aby przyspieszyć nagrzewanie.
Poniżej przedstawiono kilka przykładów typowych przepływów pracy:
Deweloper rozpoczyna pracę nad nową funkcją
- Tworzą nową gałąź z
głównego. - Uruchamiają
tuist generują. - Tuist pobiera najnowsze pliki binarne z
maini generuje z nich projekt.
Deweloper przesyła zmiany w górę strumienia
- Potok CI uruchomi
xcodebuild buildlubtuist testw celu zbudowania lub przetestowania projektu. - Przepływ pracy pobierze najnowsze pliki binarne z
maini wygeneruje z nich projekt. - Następnie będzie budować lub testować projekt przyrostowo.
Konfiguracja
Limit współbieżności pamięci podręcznej
Domyślnie Tuist pobiera i wysyła artefakty z pamięci podręcznej bez limitu współbieżności, maksymalizując przepustowość. Zachowanie to można kontrolować za pomocą zmiennej środowiskowej TUIST_CACHE_CONCURRENCY_LIMIT:
bash
# Set a specific concurrency limit
export TUIST_CACHE_CONCURRENCY_LIMIT=10
tuist generate
# Use "none" for no limit (default behavior)
export TUIST_CACHE_CONCURRENCY_LIMIT=none
tuist generateMoże to być przydatne w środowiskach o ograniczonej przepustowości sieci lub w celu zmniejszenia obciążenia systemu podczas operacji pamięci podręcznej.
Rozwiązywanie problemów
Nie używa binariów dla moich celów
Upewnij się, że skróty
są deterministyczne w różnych środowiskach i uruchomieniach. Możesię tak zdarzyć, jeśli projekt zawiera odniesienia do środowiska, na przykład poprzez ścieżki bezwzględne. Można użyć polecenia diff, aby porównać projekty wygenerowane przez dwa kolejne wywołania tuist generate lub między środowiskami lub uruchomieniami.
Upewnij się również, że cel nie zależy bezpośrednio lub pośrednio od celu
non-cacheable.Brakujące symbole
Podczas korzystania ze źródeł, system kompilacji Xcode, poprzez Derived Data, może rozwiązywać zależności, które nie zostały jawnie zadeklarowane. Jeśli jednak polegasz na binarnej pamięci podręcznej, zależności muszą być jawnie zadeklarowane; w przeciwnym razie prawdopodobnie zobaczysz błędy kompilacji, gdy nie można znaleźć symboli. Aby to debugować, zalecamy użycie polecenia
`tuist inspect implicit-imports` i skonfigurowanie go w CI, abyzapobiec regresjom w niejawnym łączeniu.
