Skip to content

Latest commit

 

History

History
138 lines (108 loc) · 5.35 KB

240527_Tuist.md

File metadata and controls

138 lines (108 loc) · 5.35 KB

📝 TIL - 240527 Tuist

프로젝트에 Tuist를 적용해보며 겪었던 내용들을 기록합니다.
해당 글은 Tuist 버전 4 를 기준으로 작성되었습니다.

학습 내용

1. Tuist란?
2. Tuist 시작하기
3. 참고 자료

🎯 학습 목표

상태 목표
Tuist에 대해 설명할 수 있다.
Tuist 초기 설정에 대해 설명할 수 있다.

✅ 1. Tuist란?

Tuist는 프로젝트의 생성, 유지 관리 및 상호 작용을 용이하게 하는 것을 목표로 하는 CLI(커맨드 라인 인터페이스) 입니다.
오픈 소스의 언어가 Swift로 작성되어 있어 각종 설정에 Swift를 사용할 수 있다는 장점을 가지고 있습니다.

Tuist는 주로 모듈화를 위해 사용이 되는데 각각의 모듈을 프로젝트로 분리할 수 있고 각각의 설정들을 Project.swift 파일로 별도 관리할 수 있다는 장점을 가지고 있습니다.

✅ 2. Tuist 시작하기

Tuist를 사용하기 위해서는 우선 Tuist를 설치해야 합니다.
저는 Homebrew를 사용하여 설치하였습니다.
(설치를 위해 확인 했던 글 들 중 curl -Ls https://install.tuist.io | bash 구문을 통해 설치하는 방법이 자주 보였는데 해당 방법은 버전 4에서 삭제되었습니다.)

brew tap tuist/tuist
brew install tuist
brew install [email protected]

이렇게 Tuist를 설치하였다면 이제 프로젝트를 생성해보도록 하겠습니다.
프로젝트를 생성하기 앞서 프로젝트를 생성해줄 디렉토리를 생성해줍니다.

mkdir Tuist // 디렉토리 생성
cd Tuist // 디렉토리로 이동

이제 만들어준 파일로 이동하여 Tuist 설정을 위한 명령어를 입력해 줍니다.

tuist init --platform ios

이 때 가끔 에러가 나는 경우가 있습니다.
이 경우는 이미 다른 버전의 tuist가 설치되어 있는지 또는 해당 디렉토리에서 tuist init을 했던 적은 없는지 확인해봐야 합니다.

init 이후 Manifest 파일을 열어줍니다.

tuist edit


처음 Tuist 설정을 마치면 해당 디렉토리에는 위와 같은 파일들이 생성이 됩니다.
여기서 Project.swift 파일은 프로젝트 설정을 위한 파일로써 굉장히 중요한 역할을 합니다.
여러 프로젝트를 생성하여 관리하고 싶은 경우 버전 3의 경우 Workspace.swift를 생성하여 Project 들을 설정해주었지만 버전 4부터는 Workspace.swift는 기본으로 생성되며 커스텀하고 싶은 경우에만 생성하여 사용하도록 변경되었습니다.

Project 파일의 내용은 아래와 같습니다.
각 파라미터에 대한 설명은 주석으로 대신하겠습니다.

import ProjectDescription

let project = Project(
    name: "TuistDemo", // 프로젝트 이름
    targets: [
        .target(
            name: "TuistDemo",
            destinations: .iOS, //.macOS, .tvOS, .visionOS 등
            product: .app, //.framework, .bundle 등
            bundleId: "io.org.TuistDemo", //번들 아이디
            infoPlist: .extendingDefault(
                with: [
                    "UILaunchStoryboardName": "LaunchScreen.storyboard",
                ]
            ),
            sources: ["TuistDemo/Sources/**"],
            resources: ["TuistDemo/Resources/**"],
            dependencies: [] //이후 모듈을 생성한 뒤 해당 모듈에 대한 Dependency 설정 가능
        ),
        .target( // 테스트 타겟
            name: "TuistDemoTests",
            destinations: .iOS,
            product: .unitTests,
            bundleId: "io.org.TuistDemoTests",
            infoPlist: .default,
            sources: ["TuistDemo/Tests/**"],
            resources: [],
            dependencies: [.target(name: "TuistDemo")]
        ),
    ]
)


이후 저희는 프로젝트를 크게 Feature 단위로 나눠 관리할 것 이기 때문에 Feature 그룹을 생성하여 내부에 HomeFeature과 SearchFeature를 생성해주었습니다.

각각 Feature의 Project.swift 설정은 아래와 같습니다.

import ProjectDescription

let project = Project(
    name: "HomeFeature",
    targets: [
        .target(
            name: "HomeFeature",
            destinations: .iOS,
            product: .framework, // 확인
            bundleId: "io.org.HomeFeature",
            deploymentTargets: .iOS("15.0"), //iOS 버전 설정 가능
            sources: ["Sources/**"],
            dependencies: []
        )
    ]
)

이렇게 설정을 완료한 뒤 Manifest 파일을 닫은 뒤 CLI에서 ctrl+c로 하던 작업을 종료시켜줍니다.
이후 tuist installtuist generate 명령어를 치면 우리가 원하는대로 설정된 프로젝트를 확인할 수 있습니다.
(버전 3의 tuist fetchtuist install로 변경됨)


3. 참고 자료

Tuist Docs
천원의 개발 - iOS Tuist 프로젝트에 적용하기
요기요 Tuist 적용기