iOS

Tuist(3) - 환경변수

스엠 2023. 2. 13. 03:24

기능적인 부분들은 전글에서 다 끝마쳤다. 

이번글에서는 약간 감초가 같은 것들만 다룰 것이다. 

 

 

4. 환경 변수를 이용하여 generate하는 방법 

여태까지 진행한 단계에서 살짝 아쉬운 감이 있다. 

바로 tuist generate를 사용했을때 무조건 Demo들도 같이 빌드 된다는 것이다. 

Demo앱들은 사실상 개발할때만 필요한 것이기 때문에 배포하려고 할때는 굳이 빌드를 할 필요가 없다.

우리는 이 과정을 위하여 환경 변수를 사용할 것이다. 

 

Tuist는 terminal에서 환경변수를 써서 이를 Project.swift에서 사용할 수 있게 되어 있습니다.

환경변수는 TUIST_[이름] 형태로 쓰면 Tuist가 읽을 수 있습니다.

 

따라서 generate할 당시에 배포를 위한 빌드냐 개발을 위한 빌드냐를 환경변수로 넣어주어 자동적으로 프로젝트 생성관리를 할것입니다. 

 

그럼 시작해봅시다.

tuist edit을 실행하고 ProjectDescriptionHelpers 아래에 Project+Extension이라는 파일을 하나 새로 만들고 다음 코드를 복사 붙여넣기 합니다. 

public enum ENV {
    public static var GENTYPE : String { return ProcessInfo.processInfo.environment["TUIST_GENTYPE"] ?? "" }
}

그리고 Workspace를 다음과 같이 바꿉니다. 

let workspace = Workspace(
    name: "SwiftAnimation",
    projects: [
        "Modules/CommonUI",
        "Features/**",
        "Application/SwiftAnimation"
    ] + (ENV.GENTYPE == "APP" ? [] : ["Demo/**"])
)

GENTYPE이 APP이면 배포용으로 빌드하고 아니면 개발용으로 빌드를 합니다. 

이제 다음 명령어로 프로젝트를 생성해봅시다.

TUIST_GENTYPE=APP tuist generate

이러면 다음과 같이 Demo 앱들이 빠져 있는 것을 확인할 수 있습니다.

이처럼 프로젝트 설정만 잘해놓으면 개발을 할때에 훨씬 경량화 된 프로젝트들로 작업을 할 수 있게 됩니다. 

 

5. TUIST 장/단점

.gitignore에 .pbxproj, xcworkspace, xcproj등을 추가할 수 있게 된다.

따라서 .pbxproj에 UUID의 conflict를 없앨 수 있다는게 가장 큰 장점중 하나이지 않을까 싶다.

모듈화의 이점은 말도 할 필요 없을 정도 인것 같다.

 

단점은 아직까지는 매번 tuist generate를 해야 한다는 정도?인것 같다.

또 외부의존성 관리, configuration 관리는 어떤형식으로 될지 잘 모르지만 쉽게 적용하지는 못할 것 같다.

즉 러닝커브가 살작 있는 편이다.

 

해당 프로젝트 링크는 아래와 같습니다.

https://github.com/sangriel/SwiftAnimation_Tuist