-
Notifications
You must be signed in to change notification settings - Fork 1
to.duck 프로젝트가 Tuist를 도입하게 된 계기
- 처음 시작은 파일 위치만 바뀌어도 .xcodeproj 파일 충돌이 발생하는 문제를 해결하고자 했음
- xUnique 사용 해보자 → SPM 지원 X 문제 발생
- XcodeGen → 세팅이 잘 안됐고, 레퍼런스가 많이 없다고 판단
- Tuist를 채택하면 xcodeproj 문제를 해결할 수 있음을 알게됨
- VSCode로 작업하는 팀원
- Resource 자동으로 만들어줌
→ 모듈화 개발도 할 겸 Tuist 도입
동일한 파일에 같은 UUID를 할당하고, 프로젝트를 이름 기준으로 정렬하여 .xcodeproj 의 충돌을 예방
→ SPM 지원 X 문제가 발생 + 너무 예전 자료임 (최근 커밋 7년전)
git에 프로젝트 관련 파일을 업로드하지 않고, 각자 생성하여 사용하기에 프로젝트 파일 충돌을 예방
- xUnique에서 안 되던 SPM 설정 가능
- 프로젝트 충돌 방지 + 타겟 분리 가능
- 프로젝트를 생성할 때, xcconfig 파일과 yaml 파일을 사용
- configuration에 따라 설정이 다른 게 아니라면, yaml도 가능
우리 프로젝트는 기존의 내용을 마이그레이션해야 하는데,
레퍼런스 부족으로 인해 세팅을 머뭇거리던 찰나 Tuist를 발견
swift로 작성된 Xcode 프로젝트를 관리할 수 있는 CLI 기반 툴 .xcodeproj 파일을 깃허브에 올리지 않으므로 충돌 X
- Tuist
- ‘Project.swift’ swift 파일로 프로젝트 설정 관리
- XcodeGen
- yml & json으로 프로젝트 설정 관리
- 멀티 프로젝트의 경우, 각 프로젝트 별로 project.yml을 정의하여 연결해야 했음
- Git을 사용하면서 Xcode 프로젝트 설정(프로젝트명.xcodeproj) 파일의 충돌 방지
- 자료가 많음
- Tuist를 지속적인 업데이트로 관리
- Project.swift, Workspace.swift, Dependencies.swift, Config.swift .. 등등 Swift 로 프로젝트 설정 가능 = 함수, 변수, enum, extension 등 Swift 가 제공하는 기능과 타이포 감지, 자동 완성, 빌드 등 Xcode 에서 제공하는 기능도 사용
- 모듈화 가능
// mise 설치
curl https://mise.run | sh
// mise 버전확인
~/.local/bin/mise --version
// 버전 확인 (2024.03.09 기준)
2024.3.1 macos-arm64 (0d95fde 2024-03-04)
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
// 설치 및 설정
mise use --global node@20
// 버전 확인
$ node -v
// 버전 확인 (2024.03.09 기준)
v20.11.1
// 가장 최신 버전의 Tuist 설치
mise install tuist
// 전역설정
mise use -g tuist
// Tuist 생성 명령어
tuist init --platform ios
// 프로젝트 관리/수정
tuist generate
// Project.swift 설정할 때 사용하는 명령어
tuist edit
Projects
|
|- App // 프로젝트
|- DesignSystem // 모듈
|- Network // 모듈
‘Project Description’ 프레임워크를 사용하여 하위 앱/모듈을 정의한 것을 토대로 Xcworkspace를 생성
-
Project.swft = 프로젝트에 대한 정보를 담음 프로젝트에 대한 전체적인 정보를 이 파일에서 정의
-
Resource = Assets
-
Source = 소스코드
아래처럼 Project.swift에 정의해두면 모듈에 라이브러리 의존성 생기게 됨
이 모듈 또한, Project.swift를 내부적으로 지님 이 프로젝트 설정에 따라 모듈 정의
static | dynamic도 설정 가능
CocoaPods || SPM을 사용했었는데, 카르타고와 SPM을 Path로 설정해서 정의
외부 라이브러리 패키지 사용할때 지정해줘야 함
카르타고 + SPM 경로 설정
어떤 모듈이 의존성을 가져야 하는지는 ‘Artifacts’를 사용하여 정의함
프로젝트를 묶어주는 기능 멀티 프로젝트를 하는 경우, 여기서 추가하면 됨
- 본 명령어를 통해 Xcode 창을 열어 GUI 환경에서 세팅 가능
- 매니페스트, 모듈, 의존성, 워크스페이스.. 다 지정하는듯
- 의존성에 적어둔 라이브러리 패키지 경로들을 로컬에 가져옴
→ 이때, 각 모듈에 Artifacts 라는 형태로 저장되게 됨
위 Edit, fetch를 통해 정의한 것을 바탕으로 xcworkspace가 생성됨
App Manifests - Resource에서 정의한 내용이 ’tuist generate’를 하면 Derived 안에 들어감
String으로 모든 Resource를 관리할 수 있도록, 코드가 자동으로 생성됨
아래처럼 Enum에 접근해서 사용하면 됨
의존성에 적고 ‘tuist fetch’ 명령어 입력 시 Artifacts 되어 로컬에 저장된다고 했다
이를 Pre Build 된 캐싱 파일을 생성할 수 있음
이렇게 하면 빌드 속도가 빨리질 수 있음
- ‘tuist graph’ 명령어로 시각적으로 프로젝트 관계를 볼 수 있음
- xUnique, XcodeGen, Tuist 오픈소스를 알게됨
- xcodeproj 충돌 해결방안 생각해봄
- Tuist 특징 알게 됨
-
xUnique, XcodeGen
https://github.com/truebit/xUnique
https://medium.com/daangn/프로젝트에-xcodegen-도입하기-d0fd54691aad
https://ios-development.tistory.com/918
-
Tuist
https://github.com/tuist/tuist
https://medium.com/daangn/xcodegen-에서-tuist-로-전환하기-3f0156e0c2ea