4T2F / ThinkBig

🌟씽크빅 스터디🌟
5 stars 1 forks source link

Tuist 부수기 #89

Open ha-nabi opened 1 month ago

ha-nabi commented 1 month ago

제가 이걸 설명을 할 수 있을까요?

ha-nabi commented 1 month ago

Tuist란?

Tuist는 Xcode 프로젝트의 생성, 유지보수 및 상호작용을 용이하게 하는 것을 목표로 하는 CLI 툴 입니다.

* CLI

명령줄 인터페이스(CLI) Command-Line Interface 또는 Character User Interface의 줄임말로 글자를 입력하여 컴퓨터에 명령을 내리는 방식이다. 가장 대표적인 예시로는 DOS, 명령 프롬프트, Bash로 대표되는 Unix 셸 환경이 있다.

Swift를 사용해서 프로젝트를 관리하기 때문에 우리가 .xcodeproj, .xcworkspace 같은 파일들로부터 발생하는 Git conflict에 대한 걱정이 필요 없습니다.

또한 모듈 단위로 빌드가 가능하니 빌드 시간의 감소 또한 큰 이점이라고 생각합니다.



Tuist 도입에 따른 앱 구조의 변화

요기요 기술 블로그에서 확인한 요기요 앱의 구조 변화를 한번 살펴보겠습니다. 먼저 Tuist 도입 이전의 구조입니다.

APP 모듈에 모든 Feature가 담겨져 있고, 각 기능에 공통적으로 필요한 기능 모듈들이 작게 나누어져 있는 형태입니다.


다음은 Tuist 도입 후 구조의 변화를 살펴보겠습니다.

앱에서 각 Featrue들을 분리시킨뒤 APP target은 각 Feature를 Coordinate하는 역할만 담당하는 것으로 변경되었고, APP은 Feature만 바라보고 Feature들은 각자가 필요한 모듈을 의존해 기능을 사용하는 방식으로 변경된 걸 확인할 수 있습니다.



Tuist 프로젝트의 생성방식

Tuist는 Project Description 이라는 프레임워크를 사용을 해서 그 하위에 앱이나 모듈을 정의를 해서 그것을 바탕으로 Xcworkspace를 만들어줍니다.

천천히 하나씩 알아보도록 합시다.


App Manifests

기본적으로 세 가지 구성요소를 가진다고 생각해주시면 됩니다.

App Manifests는 프로젝트에 대한 정보들을 담는 Project.swift 파일과 Resources, Sources로 나뉘어져 있습니다.

Resources에는 Assets파일이 들어있고, Sources는 우리가 작성한 Source code가 담겨있습니다.


Project를 보면 Swift 코드로 간단하게 프로젝트에 대한 정보를 확인 할 수 있습니다.

Target을 설정해서 name, platform, prodect 등등 여러 세부 정보를 정의해주는 역할을 합니다.


DesignSystem Manifests

구성 자체는 App Manifests와 비슷합니다. 여기서 하나만 조심해주면 되는게

product의 Framework가 Static Framework인지 아니면 Dynamic Framework인지 설정을 해줘야 합니다.

프레임워크의 유형에 따라 성능, 빌드 시간, 의존성 관리, 배포 및 업데이트 방법에 영향을 미치기 때문인데요.

Static Framework는 빠른 런타임 성능을 제공하지만 빌드 시간이 길어질 수 있다는 단점이 있고, Dynamic Framework는 코드 재사용성과 메모리 효율성을 높이지만 런타임에 로드 시간이 더 걸릴 수 있기 때문에 프레임워크를 설정을 해줘야 합니다.

동적 프레임워크와 다이나믹 프레임워크를 어떻게 구별할까요?

Static Framework: 보통 정적 프레임워크는 .a 파일로 구성되며, 이를 확인하면 정적 프레임워크임을 알 수 있습니다. Dynamic Framework: 동적 프레임워크는 .framework 디렉토리로 구성되며, 내부에 Info.plist와 같은 메타데이터 파일과 함께 바이너리 파일이 포함됩니다.


Dependencies

Dependencies를 간단하게 설명을 하면 여러분들이 프로젝트에 사용하는 패키지를 SPM 또는 코코아팟을 사용해서 프로젝트에 가져와서 사용하실 겁니다.

Tuist에서는 위 사진처럼 카르타고와 SPM을 사용해서 패키지를 가져올 수 있습니다.


이런식으로 카르타고나 SPM을 Path를 설정을 해서 패키지들을 가져와서 정의를 할 수 있습니다.

내가 어떤 패키지를 사용할건지 Dependencies에서 다 정의를 해서 가져갈 수 있습니다.


아까 우리가 Dependencies에서 정의를 했던 Path들을 통해 네임을 적어주게 되면 성공적으로 Dependencies를 걸어 줄 수 있습니다.


Workspace

Workspace는 프로젝트를 묶어주는 파일입니다.

사진에는 프로젝트가 하나밖에 없는데, 만약 여러가지 프로젝트를 쓴다고 하면 계속 추가해주면 됩니다.




Tuist 설치

위에선 Tuist가 어떻게 구성되어있는지 알아보았다면, 이번엔 설치하는 법을 알아보도록 합시다.


Tuist는 CLI 툴이니 터미널 명령어를 통해서 설치가 가능합니다. 아래는 설치 명령어입니다.

curl -Ls https://install.tuist.io | bash


삭제

curl -Ls https://uninstall.tuist.io | bash


라고 배웠지만..

curl을 사용하여 다이렉트로 Tuist를 설치하는 법은 deprecated 되었다고 합니다..


그래서 저희는 mise를 사용해서 설치를 해야합니다.

Tuist README에 설명을 따라가보면 mise 라는 프로그램을 통해서 설치하라고 권장하고 있습니다.

Homebrew 처럼 커멘드 라인을 통해서 개발 도구 설치를 도와주는 새로운 종류의 녀석이라고 생각하고 지금 중요한건 아니니 더 깊게 알아보기를 생략했습니다.


mise를 설치합니다.

$ curl https://mise.run | sh


mise를 설치하고 나면 mise를 활성화를 시켜줍니다

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


활성화를 시켜줬다면 PATH 경로를 설정해줘야합니다.

echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.zprofile

저는 사실 여기서 오류가 났었는데요.

터미널에서 Xcode의 경로를 찾을 수가 없다는 오류가 발생했습니다. 그래서 부랴부랴 검색도 해보고.. Xcode 경로 바꾸는 명령어도 입력해봤지만 해결할 수가 없었는데

원인은 앱스토어에서 Xcode를 받지 않고 다른 버전을 사용하기 위해 웹에서 다운받아서 경로를 추적할 수가 없어서 오류가 났었습니다.

저랑 비슷한 문제가 발생하셨다면 앱스토어에서 다운받으셨는지 확인해보시면 좋을거 같습니다.


mise를 통해 tuist 설치

mise install tuist


tuist를 로컬 환경에서 글로벌하게 사용할 수 있도록 세팅해줘야 합니다.

mise use -g tuist



설치가 완료되었다면 프로젝트를 만들어 줄 폴더를 생성해 줄겁니다.

mkdir 폴더명
cd 폴더명


프로젝트 init

tuist init --platform ios // UIkit
tuist init --platform ios --template swiftui // SwiftUI


그리고 폴더 내부를 확인해보면 아까 봤던 Project.swift를 포함해서 이것저것 생긴걸 볼 수 있습니다.


다음으로는 Xcode 프로젝트랑 워크스페이스를 생성해야합니다.

tuist generate

커맨드 실행이 끝나면 자동으로 워크스페이스 파일이 열리는걸 볼 수 있습니다.


xcodebuild 처럼 터미널에서 엑스코드 빌드를 실행할 수 있는 명령어도 있습니다.

tuist build


코드로 프로젝트 설정을 관리하는데 사용되는 Manifest 파일들만 추려서 보여주는 명령어도 있습니다.

Manifest 파일 중에는 Project.swift 파일이 있습니다.

tuist edit

수정이 끝난 뒤에는 프로젝트창을 닫고 Ctrl + C 를 입력하면 커멘드 입력을 다시 입력할 수 있습니다.



정리

이번 포스팅에서는 Tuist가 무엇인지, 어떻게 구성되어 있는지, 설치, 그리고 기본적인 커멘드들을 가볍게 살펴보았습니다.

다음 tuist 포스팅이 언제가 될 진 모르겠지만 다음 포스팅에서는 tuist를 통해 빌드 설정을 관리하는 법과 의존성을 추가하는 방법들을 알아보도록 하겠습니다.

Peace !