[Tuist] Version 4 / init / edit / generate / 초기설정 / 수정 / 실행

2024. 3. 27. 21:24🍏/Xcode

협업을 하는 iOS 개발자라면 무조건 써야하는 Tuist 입니다.
비슷한 툴로는 XCodegen이라는 프로그램도 있지만 YAML 파일을 사용하여 프로젝트의 구조와 설정을 정의하기 때문에, 러닝커브가 존재해서 Tuist를 사용합니다. 또한 Tuist는 프로젝트 생성, 의존성 관리, 프로젝트 간 의존성, 그리고 마이크로 프레임워크 아키텍처 지원 등 프로젝트 관리의 여러 측면을 지원하기 때문에, Tuist를 사용합니다.

Tuist 란 XCode 모듈관리, 협업 관리를 위하여 쓰는 Third party program입니다. 

저는 Tuist 3.36.2 버전을 사용해 왔는데, 이번에 Tuist가 breaking point를 가짐으로써 메이저 버전이 4로 올라갔기 때문에, Tuist 4를 학습 + 실습 해보려고 합니다.

이글에서는 Tuist 4버전을 다룹니다.


Tuist 의 특성.

  1. 대규모 프로젝트 관리: 여러 Xcode 프로젝트와 타겟을 포함하는 대규모 앱을 개발할 때, Tuist를 사용하면 프로젝트 구성을 간편하게 관리할 수 있습니다.
  2. 의존성 관리: Tuist는 프로젝트 내의 모듈 간의 의존성을 관리하는 데 도움을 줍니다. 이를 통해 모듈화된 아키텍처를 더 쉽게 구성할 수 있습니다. 프레임워크 관리가 용이해집니다.
  3. 자동화: 프로젝트 파일의 생성, 업데이트, 관리를 자동화하여 개발자가 반복적인 작업으로부터 해방될 수 있게 해줍니다.
  4. 팀 협업: 프로젝트 설정을 코드로 정의함으로써, 팀원들이 프로젝트 설정을 쉽게 공유하고, 변경 사항을 추적할 수 있습니다. 특히 .xcodeproj의 해쉬값 컨플릭으로 부터 벗어남으로써 생산성이 확대됩니다.
  5. 환경 설정: 다양한 환경(예: 개발, 스테이징, 프로덕션, 테스트)에 대한 설정을 코드로 관리하고, 필요에 따라 쉽게 전환할 수 있습니다.
더보기

Tuist에서 환경 설정(environment settings)은 프로젝트를 다양한 환경(예: 개발, 테스트, 스테이징, 프로덕션)에서 구성하고 실행하기 위한 설정을 말합니다. 이러한 환경 설정을 통해 각기 다른 설정값(예: API 엔드포인트, 앱 키, 기능 플래그 등)을 환경별로 다르게 적용할 수 있으며, 프로젝트의 유연성과 확장성을 높일 수 있습니다.

Tuist에서는 `Project.swift` 또는 `Workspace.swift` 파일 내에서 환경 설정을 정의할 수 있으며, 이 설정은 프로젝트의 타겟별로 다른 환경 변수, 설정 파일, 그리고 컴파일 조건 등을 포함할 수 있습니다.


환경 설정 구현 방법

1. 환경 변수(Environment Variables): 특정 환경에 대한 구성 값들을 환경 변수로 정의하여, 앱 실행 시 이러한 변수들을 읽어서 사용할 수 있습니다. 예를 들어, API 서버의 URL이 개발 환경과 프로덕션 환경에서 다를 수 있으며, 이를 환경 변수로 구분하여 관리할 수 있습니다.

2. 구성 파일(Configuration Files): 환경별로 다른 구성 파일(예: `.plist` 파일)을 사용하여, 앱의 설정 값을 환경별로 다르게 적용할 수 있습니다. 예를 들어, 개발 환경용 `Config-Debug.plist` 파일과 프로덕션 환경용 `Config-Release.plist` 파일을 만들고, 각 환경에 맞는 설정을 이 파일들에 저장할 수 있습니다.

3. 컴파일 조건(Compilation Conditions): 소스 코드 내에서 `#if` 디렉티브를 사용하여 특정 코드 블록을 환경별로 컴파일하도록 할 수 있습니다. 이를 통해 개발 환경에서만 사용되는 코드를 프로덕션 빌드에는 포함시키지 않는 등의 조건부 컴파일을 수행할 수 있습니다.

Tuist를 사용한 환경 설정 예제

Tuist를 사용하여 환경 설정을 구현하는 예제 코드를 보여드리겠습니다. 다음은 `Project.swift` 파일 내에서 개발 환경과 프로덕션 환경을 구분하여 환경 변수를 설정하는 방법입니다.

import ProjectDescription

let project = Project(
    name: "MyApp",
    targets: [
        Target(
            name: "MyApp",
            platform: .iOS,
            product: .app,
            bundleId: "cohttp://m.example.MyApp",
            infoPlist: .extendingDefault(with: [
                "API_BASE_URL": .string("https://api.example.com")
            ]),
            sources: ["Sources/**"],
            resources: [],
            dependencies: []
        )
    ],
    settings: .settings(configurations: [
        .debug(name: "Debug", settings: ["API_BASE_URL": "https://dev.api.example.com"], xcconfig: nil),
        .release(name: "Release", settings: ["API_BASE_URL": "https://api.example.com"], xcconfig: nil)
    ])
)



이 코드 예제에서는 `API_BASE_URL`이라는 환경 변수를 정의하여, 개발 환경(`Debug`)과 프로덕션 환경(`Release`)에서 사용할 API 서버의 URL을 다르게 설정하고 있습니다. 이렇게 정의된 환경 변수는 앱 코드 내에서 접근하여 사용할 수 있습니다.

환경 설정을 통해 Tuist를 사용하는 프로젝트에서 다양한 환경별로 앱을 쉽게 관리하고, 설정 값을 유연하게 적용할 수 있게 됩니다.


Tuist 사용법

사용한 tuist version 4.8.0

 

인스톨 관련 Tuist docs : https://docs.tuist.io/documentation/tuist/installation/

 

iOS로 Project 처음 생성할때

tuist init --platform=ios

tuist init --help

기본적으로 SwiftUI로 되어있습니다. 4.8.0 버전에서는 swiftui가 templates 의 default로 되어 있습니다. UIKit은 존재하지 않습니다.

Tuist UIKit으로 만드는 방법은 아래링크를 참고하세요.
https://chanhhh.tistory.com/232

 

[Tuist] Version 4 / UIKit / AppDelegate / SceneDelegate

Tuist init UIKit without Storyboard with version 4 tuist init --platform ios tuist init --platform ios 4.8.0 버전에서는 default가 SwiftUI로 되어있으므로, 이를 UIKit으로 진행하기 위해 아래와 같은 프로세스를 따릅니다. Tui

chanhhh.tistory.com

 

초기화를 통해서 project를 생성할 시 이런 파일 구조를 보여주며 생성됩니다. 여기서 Resources와 Sources의 차이점이 궁금하시다면

아래링크에서의 Resource 검색을 추천합니다.

 

[SPM] Swift Package Manager / 내 Library 만들기

Swift Package Manager Swift 패키지는 개발자가 프로젝트에서 사용할 수 있는 Swift, Objective-C, Objective-C++, C 또는 C++ 코드의 재사용 가능한 구성 요소입니다. 소스 파일, 바이너리 및 리소스를 앱 프로젝

chanhhh.tistory.com

 


tuist edit 입력시 tuist 설정할 수 있는 xcode가 실행이 되며 edit이 끝나면 ctrl + c를 통해 종료하시면 됩니다.

tuist edit

Tuist edit 시 해당 프로젝트의 Tuist Project가 어떤식으로 구성되어 있는지 볼 수 있습니다. test가 필요없다면 Test 폴더를 삭제하고 Target또한 삭제 해도 무관합니다. 또한 이런식으로 target을 등록할 수 있습니다.


tuist generate 튜이스트를 통해 xcode를 실행합니다. 실행되고 있는 상태에서도 파일의 변경이나 리소스들의 변경이 있을때 tuist generate를 통해 반영 시킬 수 있습니다.

tuist generate


Tuist 의존성, Target 관리, Dependencies 에 대해서 궁금하시다면 아래 링크가 도움이 되실겁니다.

https://chanhhh.tistory.com/233

 

[Tuist] Version 4 / config / package / dependencies

Tuist confi 설정입니다. 아래의 공식문서의 개요를 보시면 Tuist는 공유 Config.swift 매니페스트를 통해 구성할 수 있습니다. 튜이스트가 실행되면 디렉터리를 탐색하여 Config.swift 파일이 포함된 튜이

chanhhh.tistory.com