Udostępnianie kodu
Jedną z niedogodności Xcode, gdy używamy go z dużymi projektami, jest to, że nie pozwala on na ponowne wykorzystanie elementów projektów innych niż ustawienia kompilacji za pośrednictwem plików .xcconfig. Możliwość ponownego wykorzystania definicji projektu jest przydatna z następujących powodów:
- Ułatwia to konserwację **** , ponieważ zmiany można wprowadzać w jednym miejscu, a wszystkie projekty otrzymują je automatycznie.
- Umożliwia to zdefiniowanie konwencji **** , z którymi mogą być zgodne nowe projekty.
- Projekty są bardziej spójne i dlatego prawdopodobieństwo zepsutych kompilacji z powodu niespójności jest znacznie mniejsze.
- Dodanie nowego projektu staje się łatwym zadaniem, ponieważ możemy ponownie wykorzystać istniejącą logikę.
Ponowne wykorzystanie kodu w plikach manifestu jest możliwe w Tuist dzięki koncepcji pomocników opisu projektu **** .
A TUIST UNIQUE ASSET
Wiele organizacji lubi Tuist, ponieważ widzą w narzędziach pomocniczych do opisu projektów platformę dla zespołów platformowych do kodyfikowania własnych konwencji i wymyślania własnego języka do opisywania swoich projektów. Na przykład, generatory projektów oparte na YAML muszą wymyślić własne rozwiązanie szablonowe oparte na YAML lub zmusić organizacje do budowania swoich narzędzi.
Pomocnicy opisu projektu
Pomocnicy opisu projektu to pliki Swift, które są kompilowane do modułu ProjectDescriptionHelpers, który może importować pliki manifestu. Moduł jest kompilowany poprzez zebranie wszystkich plików w katalogu Tuist/ProjectDescriptionHelpers.
Można je zaimportować do pliku manifestu, dodając instrukcję importu w górnej części pliku:
swift
// Project.swift
import ProjectDescription
import ProjectDescriptionHelpersProjectDescriptionHelpers są dostępne w następujących manifestach:
Project.swiftPackage.swift(tylko za flagą kompilatora#TUIST)Workspace.swift
Przykład
Poniższe fragmenty zawierają przykład tego, jak rozszerzamy model Project, aby dodać statyczne konstruktory i jak ich używamy z pliku Project.swift:
swift
import ProjectDescription
extension Project {
public static func featureFramework(name: String, dependencies: [TargetDependency] = []) -> Project {
return Project(
name: name,
targets: [
.target(
name: name,
destinations: .iOS,
product: .framework,
bundleId: "dev.tuist.\(name)",
infoPlist: "\(name).plist",
sources: ["Sources/\(name)/**"],
resources: ["Resources/\(name)/**",],
dependencies: dependencies
),
.target(
name: "\(name)Tests",
destinations: .iOS,
product: .unitTests,
bundleId: "dev.tuist.\(name)Tests",
infoPlist: "\(name)Tests.plist",
sources: ["Sources/\(name)Tests/**"],
resources: ["Resources/\(name)Tests/**",],
dependencies: [.target(name: name)]
)
]
)
}
}swift
import ProjectDescription
import ProjectDescriptionHelpers
let project = Project.featureFramework(name: "MyFeature")NARZĘDZIE DO USTANAWIANIA KONWENCJI
Zwróć uwagę, jak za pomocą funkcji definiujemy konwencje dotyczące nazw obiektów docelowych, identyfikatora pakietu i struktury folderów.
