Skip to content

Tłumaczenie 🌍

Możesz przetłumaczyć lub poprawić tłumaczenie tej strony.

Wnieś swój wkład

Pliki zsyntetyzowane

Tuist może generować pliki i kod w czasie generowania, aby ułatwić zarządzanie projektami Xcode i pracę z nimi. Na tej stronie dowiesz się więcej o tej funkcjonalności i o tym, jak możesz ją wykorzystać w swoich projektach.

Zasoby docelowe

Projekty Xcode obsługują dodawanie zasobów do obiektów docelowych. Stawiają one jednak przed zespołami kilka wyzwań, zwłaszcza podczas pracy z projektem modułowym, w którym źródła i zasoby są często przenoszone:

  • Niespójny dostęp runtime: To, gdzie zasoby trafiają do produktu końcowego i jak można uzyskać do nich dostęp, zależy od produktu docelowego. Na przykład, jeśli cel reprezentuje aplikację, zasoby są kopiowane do pakietu aplikacji. Prowadzi to do kodu uzyskującego dostęp do zasobów, który przyjmuje założenia dotyczące struktury pakietu, co nie jest idealne, ponieważ utrudnia rozumowanie kodu i przemieszczanie zasobów.
  • Produkty, które nie obsługują zasobów: Istnieją pewne produkty, takie jak biblioteki statyczne, które nie są pakietami i dlatego nie obsługują zasobów. Z tego powodu musisz albo uciec się do innego typu produktu, na przykład frameworków, które mogą zwiększyć obciążenie projektu lub aplikacji. Na przykład statyczne frameworki będą połączone statycznie z produktem końcowym, a faza kompilacji jest wymagana tylko do skopiowania zasobów do produktu końcowego. Lub dynamiczne frameworki, w których Xcode skopiuje zarówno plik binarny, jak i zasoby do produktu końcowego, ale wydłuży to czas uruchamiania aplikacji, ponieważ framework musi być ładowany dynamicznie.
  • Podatne na błędy uruchomieniowe: Zasoby są identyfikowane przez ich nazwę i rozszerzenie (ciągi znaków). Dlatego literówka w którymkolwiek z nich doprowadzi do błędu podczas próby uzyskania dostępu do zasobu. Nie jest to idealne rozwiązanie, ponieważ nie jest wychwytywane w czasie kompilacji i może prowadzić do awarii w wersji.

Tuist rozwiązuje powyższe problemy poprzez syntezę ujednoliconego interfejsu dostępu do pakietów i zasobów, który abstrahuje od szczegółów implementacji.

ZALECANE

Chociaż dostęp do zasobów za pośrednictwem interfejsu zsyntetyzowanego przez Tuist nie jest obowiązkowy, zalecamy go, ponieważ ułatwia on rozumowanie kodu i poruszanie się po zasobach.

Zasoby

Tuist zapewnia interfejsy do deklarowania zawartości plików takich jak Info.plist lub uprawnień w Swift. Jest to przydatne do zapewnienia spójności między celami i projektami oraz wykorzystania kompilatora do wychwytywania błędów w czasie kompilacji. Można również wymyślić własne abstrakcje do modelowania zawartości i udostępniania jej między celami i projektami.

Gdy projekt zostanie wygenerowany, Tuist zsyntetyzuje zawartość tych plików i zapisze je w katalogu Derived względem katalogu zawierającego projekt, który je definiuje.

GITIGNORE THE DERIVED DIRECTORY

Zalecamy dodanie katalogu Derived do pliku .gitignore projektu.

Akcesoria do pakietów

Tuist syntetyzuje interfejs umożliwiający dostęp do pakietu zawierającego zasoby docelowe.

Swift

Cel będzie zawierał rozszerzenie typu Bundle, które eksponuje pakiet:

swift
let bundle = Bundle.module

Objective-C

W Objective-C dostępny jest interfejs {Target}Resources umożliwiający dostęp do pakietu:

objc
NSBundle *bundle = [MyFeatureResources bundle];

OGRANICZENIE Z TARGETAMI WEWNĘTRZNYMI

Obecnie Tuist nie generuje akcesorów pakietów zasobów dla wewnętrznych celów, które zawierają tylko źródła Objective-C. Jest to znane ograniczenie śledzone w wydaniu #6456.

WSPIERANIE ZASOBÓW W BIBLIOTEKACH POPRZEZ BUNDLE

Jeśli produkt docelowy, na przykład biblioteka, nie obsługuje zasobów, Tuist umieści zasoby w produkcie docelowym typu bundle, zapewniając, że trafią one do produktu końcowego, a interfejs wskaże właściwy pakiet.

Akcesory zasobów

Zasoby są identyfikowane przez ich nazwę i rozszerzenie za pomocą ciągów znaków. Nie jest to idealne rozwiązanie, ponieważ nie jest wychwytywane w czasie kompilacji i może prowadzić do awarii w wersji release. Aby temu zapobiec, Tuist integruje SwiftGen z procesem generowania projektu w celu syntezy interfejsu dostępu do zasobów. Dzięki temu można bez obaw uzyskać dostęp do zasobów, wykorzystując kompilator do wychwycenia wszelkich problemów.

Tuist zawiera szablony do domyślnej syntezy akcesorów dla następujących typów zasobów:

Typ zasobuSyntetyzowane pliki
Obrazy i koloryAssets+{Target}.swift
StrunyStrings+{Target}.swift
Listy{NameOfPlist}.swift
CzcionkiFonts+{Target}.swift
PlikiFiles+{Target}.swift

Uwaga: Można wyłączyć syntezę akcesorów zasobów dla poszczególnych projektów, przekazując opcję disableSynthesizedResourceAccessors do opcji projektu.

Szablony niestandardowe

Jeśli chcesz dostarczyć własne szablony do syntezy akcesorów do innych typów zasobów, które muszą być obsługiwane przez SwiftGen, możesz je utworzyć pod adresem Tuist/ResourceSynthesizers/{name}.stencil, gdzie nazwa jest wersją zasobu pisaną wielkimi literami.

ZasobyNazwa szablonu
ciągiStrings.stencil
aktywaAssets.stencil
plistyPlists.stencil
czcionkiFonts.stencil
coreDataCoreData.stencil
interfaceBuilderInterfaceBuilder.stencil
jsonJSON.stencil
yamlYAML.stencil
plikiFiles.stencil

Jeśli chcesz skonfigurować listę typów zasobów do syntezy akcesorów, możesz użyć właściwości Project.resourceSynthesizers, przekazując listę syntezatorów zasobów, których chcesz użyć:

swift
let project = Project(resourceSynthesizers: [.string(), .fonts()])

REFERENCE

Możesz sprawdzić this fixture, aby zobaczyć przykład użycia niestandardowych szablonów do syntezy akcesorów do zasobów.

Released under the MIT License.