Skip to content

[Tuist]

serena.ios edited this page May 20, 2024 · 5 revisions

🍀 Tuist 적용하기

1️⃣ mise CLI 설치하기

mise 란? mise는 [meez]라 발음된다.
이는 Dev tool들과 런타임을 설치하고 관리하여, 이러한 도구 설치를 단순화 하고 다른 프로젝트에서 사용할 도구의 버전을 지정할 수 있게 한다.
mise는 수백 가지의 개발 도구를 지원한다.
mise는 개발자 간에 프로젝트 내에서 일반적인 작업을 공유하고 파일 변경 시 작업을 실행하는 것과 같은 작업을 쉽게 만들어준다.

Getting Started - mise

아래 명령어를 입력하여 설치한다.

curl https://mise.run | sh

mise가 잘 설치되었는지 확인한다.

~/.local/bin/mise --version

mise 2024.x.x 이러한 형태로 출력되면 정상 설치가 된 것이다.

2️⃣ 지정 PATH에 mise 활성화 하기

echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc

3️⃣ mise를 사용하여 Tuist 설치하기

Tuist는 기본적으로 Tuist의 버전을 관리하고 활성화하는 도구로 mise를 사용한다.

Tuist를 설치하기 위한 명령어로 몇가지가 존재한다.

  • 현재 버전으로 Tuist 설치하는 명령어
mise install tuist
  • 특정 버전으로 Tuist 설치하는 명령어
mise install tuist@x.y.z

4️⃣ 새로운 프로젝트 생성하기

  • 프로젝트 파일을 생성할 경로로 들어간다.
cd /...원하는경로
  • 해당 경로에 새 디렉토리를 생성한다.
mkdir MyApp
  • 생성한 디렉토리로 이동한다.
cd MyApp
  • 현 디렉토리에서 프로젝트를 초기화한다.
tuist init --platform ios

이때 Project.swift가 생성된다

import ProjectDescription

let project = Project(
    name: "MyApp",
    targets: [
        .target(
            name: "MyApp",
            destinations: .iOS,
            product: .app,
            bundleId: "io.tuist.MyApp",
            infoPlist: .extendingDefault(
                with: [
                    "UILaunchStoryboardName": "LaunchScreen.storyboard",
                ]
            ),
            sources: ["MyApp/Sources/**"],
            resources: ["MyApp/Resources/**"],
            dependencies: []
        ),
        .target(
            name: "MyAppTests",
            destinations: .iOS,
            product: .unitTests,
            bundleId: "io.tuist.MyAppTests",
            infoPlist: .default,
            sources: ["MyApp/Tests/**"],
            resources: [],
            dependencies: [.target(name: "MyApp")]
        ),
    ]
)
  • 아래 명령어를 사용하여 프로젝트를 편집 실행할 수 있다.
tuist edit

5️⃣ 외부 Dependency 선언

  • Tuist/ 혹은 프로젝트 루트에 Package.swift를 만들어야 한다.

현재 Tuist/Package.swift 로 생성

// swift-tools-version: 5.9
import PackageDescription

#if TUIST
    import ProjectDescription
    import ProjectDescriptionHelpers

    let packageSettings = PackageSettings(
        productTypes: [
            "Alamofire": .framework, // default is .staticFramework
        ]
    )

#endif

let package = Package(
    name: "PackageName",
    dependencies: [
        .package(url: "https://github.com/Alamofire/Alamofire", from: "5.0.0"),

    ]
)
  • 해당 파일은 외부 종속성을 선언하기 위한 인터페이스일뿐이기 때문에 target이나 product를 해당 파일에 정의하지 않는다.

  • 아래 명령어를 사용하여 Tuist/Dependencies 디렉토리에 의존성을 가져올 수 있다.

tuist install
# Resolving and fetching dependencies.
# Installing Swift Package Manager dependencies.
  • Projet.swift 파일에서 TargetDependency.external을 사용하여 해당 의존성을 참조할 수 있다.
import ProjectDescription

let project = Project(
    name: "App",
    organizationName: "tuist.io",
    targets: [
        .target(
            name: "App",
            destinations: [.iPhone],
            product: .app,
            bundleId: "io.tuist.app",
            deploymentTargets: .iOS("13.0"),
            infoPlist: .default,
            sources: ["Targets/App/Sources/**"],
            dependencies: [
                 // 해당 부분
                .external(name: "Alamofire"), 
            ]
        ),
    ]
)

🔥 Dependency Naming 체크하기 Git에 Package 예시 참고해서 이름 체크하기

예시: TCA git/Package.swift

위 세팅이 끝나면 Tuist 설치하여 정상 설치 확인하기

tuist install

6️⃣ Workspace 최초 생성하기

Tuist WorkSpace

image

아래 명령어로 workspace 생성하기

tuist generate
스크린샷 2024-05-20 오후 12 52 25

7️⃣ 공유 작업 하기

  1. 본인이 최초 해당 레포 클론했다?
make bootstrap
  1. 변경된 사항이나 적용한걸로 다시 tuist 돌려서 프로젝트 오픈하고 싶다?
make generate
  1. tuist 설정 변경이나 추가하고 싶다?
tuist edit

🔗 참고 링크

Clone this wiki locally