기존 프로젝트는 XcodeGen으로 관리되고 있었다.
이전에 XcodeGen을 사용했던 이유는 2~3개월의 짧은 협업 기간이 있었지만,
그 사이에 pbxproj에서 엄청난 Conflict를 겪었기에 도입을 했다.
실제로 도입이 된 시기엔 나 혼자였다.
대부분은 프로젝트의 모듈화를 위해 Tuist를 사용하지만,
나의 경우는 모듈화보단 릴리즈와 테스트(디버그) 빌드를 쉽게 나누고 싶었다.
물론 추후에 생길 모듈화도 염두한 작업이다.
0. 요구사항
- 하나의 소스를 공유하는 두개의 타겟이 필요함 (Release, Debug)
- Debug 빌드는 Notification 기능이 필요하지 않지만, 독립된 BundleID를 가지고 TestFilght에 업로드가 가능해야함
1. 준비물
xcconfig 파일
XcodeGen을 도입할 당시에 BuildSettingExtractor를 이용하여 xcconfig 파일을 생성했었다.
BuildSettingExtractor
BuildSettingExtractor is a free, open-source utility that extracts build settings from an Xcode project into a set of xcconfig files.
buildsettingextractor.com
App/Configuration
├── Content-Debug.xcconfig
├── Content-Release.xcconfig
├── Content-Shared.xcconfig
├── App-Debug.xcconfig
├── App-Release.xcconfig
├── App-Shared.xcconfig
├── App-Test-Debug.xcconfig
├── App-Test-Release.xcconfig
├── App-Test-Shared.xcconfig
├── Service-Debug.xcconfig
├── Service-Release.xcconfig
└── Service-Shared.xcconfig
각 Release, Debug에는 Shared를 include하고 있다.
// Example
// "Content-Release.xcconfig"
#include "Content-Shared.xcconfig"
따라사 공통 Configuration이 생기면 말 그대로 Shared 파일에 작성하면 된다.
2. Tuist 설치
원래 Xcode이나 XcodeGen이나 세팅이 어렵지 설치는 쉽다.
$ curl -Ls https://install.tuist.io | bash
$ tuist version
// 3.15.0
3. Tuist init
빈 폴더를 하나 만들어서 초기화한다.
$ mkdir AppName
$ cd AppName
$ tuist init --platform ios
Project generated at path {PATH}
초기화를 하면 다음과 같은 파일이 생긴다.
AppName
├── Plugins
│ └── AppName
├── Project.swift
├── Targets
│ ├── AppName
│ ├── AppNameKit
│ └── AppNameUI
└── Tuist
├── Config.swift
└── ProjectDescriptionHelpers
Project 앞으로 다룰 파일의 중심인데 일단 열어보면 현재 세팅이 어떤 모습이지 잘 보여주고 있다.
/*
+-------------+
| |
| App | Contains AppName App target and AppName unit-test target
| |
+------+-------------+-------+
| depends on |
| |
+----v-----+ +-----v-----+
| | | |
| Kit | | UI | Two independent frameworks to share code and start modularising your app
| | | |
+----------+ +-----------+
*/
// MARK: - Project
// Local plugin loaded
let localHelper = LocalHelper(name: "MyPlugin")
// Creates our project using a helper function defined in ProjectDescriptionHelpers
let project = Project.app(name: "AppName",
platform: .iOS,
additionalTargets: ["AppNameKit", "AppNameUI"])
일단 그림을 보고 간단히만 이해하고 넘어가자.
열었던 Project 파일을 닫고 이제 제대로 열어보자.
4. Tuist Edit
$ tuist edit
Generating workspace Manifests.xcworkspace
Generating project Manifests
Generating project Plugins
Opening Xcode to edit the project. Press CTRL + C once you are done editing
Project+Templates을 보면 어느정도 이해가 된다.
또 일단 Swift로 작동하니 모르는 객체가 나오면 초기화 함수를 보면 된다.
5. Tuist Generate
Tuist 프로젝트까지 열어봤으니 이제 실행시켜보자.
$ tuist generate
아까 edit으로 열었던 프로젝트를 꼭 닫지 않아도 잘 실행된다.
generate를 하면 Project의 정의대로 프로젝트가 생성되고, 프로젝트가 열린다.
참고로 generate 시에 프로젝트가 자동으로 열리지 않게 하려면
$ tuist generate -n
이렇게 옵션을 주면 되니 참고하자.
이제 Tuist를 작동시키는 법을 알았다.
다음편에선 타겟 생성에 필요한 파일들을 가져오자
'iOS > iOS' 카테고리의 다른 글
[iOS] Tuist - 3. Target 생성 (0) | 2023.02.03 |
---|---|
[iOS] Tuist - 2. 프로젝트 파일 정리 (0) | 2023.02.02 |
[iOS] Swift Static Framework 만들기(Universal) - 1. 삽질 구간 (0) | 2022.07.16 |
[iOS] Swift Static Library 만들기(Device, Simulator) (0) | 2022.06.30 |
[iOS] Bitcode(feat. App Thinning) (0) | 2022.04.19 |