Skip to content

번역

이 페이지를 번역하거나 기존 번역을 개선할 수 있습니다.

기여

Manifests

Tuist는 프로젝트와 워크스페이스를 정의하고 생성 프로세스를 구성하는데 기본적으로 Swift 파일을 사용합니다. 이러한 파일은 이 문서에서 매니페스트 파일이라고 합니다.

Swift를 사용하기로 결정한 것은 패키지를 정의하기 위해 Swift 파일을 사용하는 Swift Package Manager에서 영감을 받았습니다. Swift를 사용하면, 컴파일러를 활용해 컨텐츠의 정확성을 검증하고 다른 매니페스트 파일에서 코드를 재사용할 수 있고 Xcode를 활용하여 구문 강조, 자동 완성, 그리고 검증으로 좋은 편집 환경을 제공합니다.

캐싱

매니페스트 파일은 컴파일 되어야 할 Swift 파일이므로, Tuist는 파싱 과정의 속도를 올리기 위해 결과를 캐시합니다. 그래서 Tuist를 처음 실행해 프로젝트를 생성할 때 조금 더 시간이 걸릴 수 있습니다. 이후 실행은 더 빨라 집니다.

Project.swift

`Project.swift` 매니페스트는 Xcode 프로젝트를 선언합니다. 프로젝트는 name 프로퍼티에 지정된 이름으로 매니페스트 파일이 위치한 디렉토리에 생성됩니다.
swift
// Project.swift
let project = Project(
    name: "App",
    targets: [
        // ....
    ]
)

루트 변수

매니페스트의 루트에 있어야 하는 변수는 let project = Project(...) 입니다. 매니페스트의 일부분을 코드에서 재사용 해야 된다면 Swift 함수를 사용할 수 있습니다.

Workspace.swift

기본적으로 Tuist는 생성된 프로젝트와 해당 프로젝트가 의존하고 있는 프로젝트를 포함하는 Xcode Workspace를 생성합니다. 워크스페이스에 프로젝트를 추가하거나 파일과 그룹을 포함하려면 Workspace.swift 매니페스트를 정의해서 사용할 수 있습니다.

swift
// Workspace.swift
import ProjectDescription

let workspace = Workspace(
    name: "App-Workspace",
    projects: [
        "./App", // Path to directory containing the Project.swift file
    ]
)

\

Tuist는 의존성 그래프를 해결하고 의존성의 프로젝트를 워크스페이스에 포함 시킵니다. 수동으로 포함 시킬 필요가 없습니다. 이는 의존성을 올바르게 해결하기 위해 빌드 시스템에 필요합니다.

다중 또는 단일 프로젝트

자주 질문하는 내용 중에 하나는 워크스페이스에 단일 프로젝트를 사용할지 아니면 여러 프로젝트를 사용할지에 대한 것입니다. Tuist가 없다면 단일 프로젝트 설정으로 인해 Git 충돌이 자주 발생하므로 워크스페이스 사용을 권장합니다. 그러나 Tuist로 생성한 Xcode 프로젝트는 Git 리포지토리에 포함하는 것을 권장하지 않으므로 Git 충돌은 문제가 되지 않습니다. 따라서 워크스페이스에서 단일 프로젝트를 사용할지 여러 프로젝트를 사용할지는 여러분 결정에 달렸습니다.

Tuist 프로젝트에서는 첫 생성 시간 (Cold generation time) 이 더 빠르고 (더 적은 매니페스트 파일을 컴파일 하기 때문) 프로젝트 설명 도우미를 캡슐화 단위로 사용하기 때문에 단일 프로젝트를 사용합니다. 그러나 애플리케이션에 다른 도메인을 나타내기 위해 캡슐화의 단위로 Xcode 프로젝트를 사용하면 Xcode에서 권장하는 프로젝트 구조와 더 일치합니다.

Tuist.swift

Tuist는 프로젝트 구성을 단순화 하기 위해 기본값 (Sensible defaults)을 제공합니다. However, you can customize the configuration by defining a Tuist.swift at the root of the project, which is used by Tuist to determine the root of the project.

swift
import ProjectDescription

let tuist = Tuist(
    project: .tuist(generationOptions: .options(enforceExplicitDependencies: true))
)

Released under the MIT License.