Tuist란?
Tuist는 Xcode 프로젝트를 Swift로 생성/관리할 수 있도록 도와주는 도구
Tuist의 장점
깃으로 프로젝트 형상관리를 하다보면 project파일의 conflict로 시간을 허비할때가 많다.
하지만 Tuist를 사용하게 되면 프로젝트 파일을 자동으로 생성해 주기 때문에 프로젝트를 더 생산성 높게 관리할 수 있다.
성능개선으로 외 모듈 간 의존관계조정 이 쉬워지며 static framework로 성능개선효과, dynamic link, launch time 감소하며,
cachingd의 모듈을 pre-build하게 되며 변경된 부분민 빌드하면 되기 때문에 빌드시간을 감소시킬 수 있다.
1. xcodeproj 파일 충돌 회피
2. 모듈화 편리
3. 모듈 의존관계 파악
4. 스위프트 언어를 통해 모듈과 프로젝트 설정을 정의할 수 있다.
Tuist의 단점
1. 매번 Tuist generate를 해줘야함, branch가 바뀔때,, (체크아웃할때 명령어 끼워넣으면 된다. )
2. 파일이름이 알파벳 순서로 자동정렬(고칠 수 없음)
3. Tuist를 세팅한 사람에게 dependency가 생길 수 있다.
생성방식(순서)
1. Tuist edit
2. Tuist fetch
3. Tuist generate - Resources(String, color,,, )-> Derived
App, 모듈1, 모듈2
- Project Description : 이 프레임워크에 백, 모듈 정의
- AppManifests : project.swift, Resources(Assets), Sources
- DesignSystemManifests : staticframework
- Dependnecies : cocoaPod 썼던것을 이것으로 대체
- Workspace: 프로젝트 경로 지정
Static Framework는 Static Linker를 통해 Static Library 코드가 어플리케이션 코드 내로 들어가 Heap 메모리에 상주하기때문에 빌드가 빨라짐
반면, Xcode에서 Framework를 만들면 기본적으로 Dynamic Framework으로 만들어짐. Dynamic Framework는 동시에 여러 프레임워크 또는 프로그램에서 동일한 코드 사본을 공유하고 사용을 하므로, 메모리를 효율적으로 사용함. 동적으로 연결되어 있으므로, 전체 빌드를 다시 하지 않아도 새로운 프레임워크 사용이 가능
설치 및 사용 공식문서
Tuist로 iOS프로젝트 생성
tuist init --platform ios // UIKit
tuist init --platform ios --template swiftui // SwiftUI
Project.swift 수정하는 명령어 Tuist Edit
tuist edit
Project.swift
public init(
name: String, // 프로젝트 이름
organizationName: String? = nil, // organization의 이름
options: ProjectDescription.Project.Options = .options(), // xcodeproj파일 생성시 옵션
packages: [ProjectDescription.Package] = [], // SPM의 package
settings: ProjectDescription.Settings? = nil, // build settings 정보들 설정
targets: [ProjectDescription.Target] = [], // 프로젝트의 타겟을 의미한다.
schemes: [ProjectDescription.Scheme] = [], // 프로젝트의 scheme를 의미한다.
fileHeaderTemplate: ProjectDescription.FileHeaderTemplate? = nil, // Custom 헤더파일
additionalFiles: [ProjectDescription.FileElement] = [],
//자동으로 연결해주지 않는 파일 넣으면 프로젝트에 연결시켜줌
resourceSynthesizers: [ProjectDescription.ResourceSynthesizer] = .default
//Resources/안에 파일 확장자에 따라 enum을 자동으로 생성
//.default strinfs, plists, fonts, assets
)
WorkSpace.swift
.xcworkspace 워크스페이스를 어떻게 만들지 정의하는 파일
public init(
name: String, //워크스페이스 이름
projects: [ProjectDescription.Path], //Workspaced에 등록할 프로젝트들의 경로 추가
schemes: [ProjectDescription.Scheme] = [], //Project.swift와 동일
fileHeaderTemplate: ProjectDescription.FileHeaderTemplate? = nil, //Project.swift와 동일
additionalFiles: [ProjectDescription.FileElement] = [], //Project.swift와 동일
generationOptions: ProjectDescription.Workspace.GenerationOptions = .options()
//Tuist가 xcworkspace파일을 만들 때의 옵션을 설정해 줄 수 있다.
)
Config.swift
프로젝트 전역으로 쓰이는 설정 가능
Swift의 버전이나 Xcode의 버전 등
Config.swift는 {프로젝트 루트 디렉토리}/Tuist/Config.swift 에 있을 때만 적용된다.
Target
Target은 사용할 모듈을 정의하는 struct이다.
public init(
name: String, //타겟이름
platform: ProjectDescription.Platform, //ios, macOS, tvOS,,,
product: ProjectDescription.Product, //app, staticFramework, framework,,,,
productName: String? = nil, /product이름
bundleId: String, //Bundle Identifier
deploymentTarget: ProjectDescription.DeploymentTarget? = nil, //배포 타겟 설정
infoPlist: ProjectDescription.InfoPlist? = .default, // info.plist
sources: ProjectDescription.SourceFilesList? = nil, // 소스코드 경로
resources: ProjectDescription.ResourceFileElements? = nil, // resourceSynthesizers에서 Tuist가 Resources/ 의 리소스 경로
copyFiles: [ProjectDescription.CopyFilesAction]? = nil, // 타겟에 대한 Build Phase 파일 복사
headers: ProjectDescription.Headers? = nil, //타겟 headers
entitlements: ProjectDescription.Path? = nil, //타겟 entitlements 경로
scripts: [ProjectDescription.TargetScript] = [], //타겟 build Phase 스크립트
dependencies: [ProjectDescription.TargetDependency] = [], //타겟 의존성
settings: ProjectDescription.Settings? = nil, //타겟 세팅
coreDataModels: [ProjectDescription.CoreDataModel] = [], //CoreData 모델들의 경로, 버전
environment: [String : String] = [:], // scheme에서 Edit Scheme… 버튼을 누르면 나오는 창에서 Environment Variables,,, 자동생성
launchArguments: [ProjectDescription.LaunchArgument] = [], //scheme에서 Edit Scheme… 버튼을 누르면 나오는 창에서 Arguments Passed On Launch,,, 자동생성
additionalFiles: [ProjectDescription.FileElement] = [] //프로젝트를 생성할 때 자동으로 생겨나지 않는 파일을 등록해놓으면 Xcode에서 볼 수 있음
)
편집 후 명령어 입력하면 프로젝트 생성
.xcodeproj, scworkspace 파일 생성
tuist generate
나즁에 해볼거~~~
https://baechukim.tistory.com/98
https://baechukim.tistory.com/99
https://baechukim.tistory.com/100
'PROGRAMMING CODE > SWIFT' 카테고리의 다른 글
[UIkit] Navigation Bar (storyboard) (0) | 2023.12.01 |
---|---|
[Xcode] Tuist 적용 연습 (1) | 2023.11.24 |
[UIkit] selector, 함수 전달할 때 @objc를 붙이는 이유 (0) | 2023.11.20 |
[UIkit] 애니메이션 추가 (1) | 2023.11.20 |
[UIkit] 'self' refers to the method 'ViewController.self', which may be unexpected (self 사용 시점) (0) | 2023.11.20 |