Tuist 도구를 이용하여 모듈화를 해서 각각의 기능에 대한 데모앱들을 통해 테스트 및 유지보수하기 쉽게 환경을 구성하려고 했다. 처음으로 Tuist 적용시키는 것이기도 했고 버전에 따른 변경사항들이 많아 매우 많은 어려움을 겪었다. 내가 겪은 문제는 크게 2가지이다.
1. Tuist install 명령어 실패
2. Tuist 모듈에서 외부 의존성 추가 실패
Tuist 공식 사이트를 보면 외부 의존성을 추가하터미널에 tuist install 명령어를 입력하면 외부 의존성이 다운이 된다는데 계속 tuist install 뒤에 버전을 적으라는 오류를 만났다.

찾아보니까 Tuist 4.X버전으로 넘어갈때 명령어들이 겹처서 생기는 문제였다.....
기존 3.X의 Tuist를 unInstall를 한다
curl -Ls https://uninstall.tuist.io | bash
그리고 mise를 이용해서 tuist 4.X버전을 깔면 tuist install 명령어가 정상적으로 작동이 된다.
mise install tuist # Install the current version specified in .tool-versions/.mise.toml
mise install tuist@x.y.z # Install a specific version number
mise install tuist@3 # Install a fuzzy version number
mise use tuist@x.y.z # Use tuist-x.y.z in the current project
mise use -g tuist@x.y.z # Use tuist-x.y.z as the global default
mise use tuist@latest # Use the latest tuist in the current directory
mise use -g tuist@system # Use the system's tuist as the global defaul
자세한건 공식 페이지에서 설명보고 다운받기~!
공식 홈페이지에서 외부 의존성을 추가하는 예시는 직접적으로 추가를 하는 방법이였다. 하지만 나는 모듈을 만들어 관리를 할 것이였기 때문에 모듈에 외부 의존성에 대한 명시가 있고 메인앱, 데모앱들에서 내가 만든 모듈의 의존성을 갖기를 원했다.
![]() | ![]() |
|---|
※ 왼쪽이 아닌 오른쪽처럼 Core에서 관리를 하고 메인 앱(Glimpse)에서 참조하는 형식
dependencies: [
.package(url: "https://github.com/uber/RIBs.git", from: "0.9.0"),
.package(url: "https://github.com/onevcat/Kingfisher", .upToNextMajor(from: "7.12.0"))
]
Core모듈 Project.swift
dependencies: [
.external(name: "RIBs"),
.external(name: "Kingfisher")
]
Core가 아닌 프로젝트(Glimpse) Project.swift에
dependencies: [
.project(target: "Core", path: "Modules/Core")
]
에 dependencies를 추가하고 tuist install해보면!!!!

실패한다.......
위와 같이 Core에 Package.swift에 추가를 하면 Package.resolved 파일이 생기면서 메인 앱에서 이것을 가져다가 쓰겠지라고 생각했는데 메인앱은 상위에 있는 Package.swift 파일만 보고 외부 프레임워크 못 가져와 한 것이였다 ㅠㅠ
그러면 데모앱이나 메인 앱한테는 전부 Package.swift에 자기가 쓰는 외부 것들을 다 명시를 해줘야되나???? 이럴거면 모듈화 왜 하지?? 중복된 프레임워크들로 앱도 커지지 않나??? 이럴리가 없는데....
그냥 메인앱에 있는 Package.swift 파일에만 모든 외부 의존성들을 입력한후 데모앱에서 필요한 의존성을 명시를 해줘서 필요한 것들만 쏙쏙 빼면 되는 것이였다....
최상위 Tuist폴더에 있는 Package.swift
dependencies: [
.package(url: "https://github.com/uber/RIBs.git", from: "0.9.0"),
.package(url: "https://github.com/onevcat/Kingfisher", .upToNextMajor(from: "7.12.0")),
.package(url: "https://github.com/layoutBox/FlexLayout.git",.upToNextMajor(from: "1.3.0"))
]
Core, Login 모듈들, 데모 앱들에 있는 Tuist 파일 자체를 삭제하고 실행시켜보면 각각의 모듈별로 의존성을 주고 관리 할 수 있게 되었다.