원티드 iOS앱에 Tuist 적용하기

Junsang Ryu
원티드랩 기술 블로그
6 min readDec 22, 2022

안녕하세요!
원티드랩 개발플랫폼팀에서 통합인증 모듈을 개발하고 있는 iOS 개발자 유준상입니다!

저는 원티드 iOS앱에 Tuist를 도입하게 된 이유와 과정을 소개하려고 합니다.

Tuist?

Tuist는 Xcode project의 생성과 유지 보수를 쉽게 할 수 있도록 도와주는 CLI 도구입니다.

Tuist / Xcode on steroids

도입 계기

iOS 챕터에서 도입을 고려하게 된 계기는 다음과 같습니다.

  1. 비대해지는 코드베이스와 merge conflict
  2. !모듈화!

1. 비대해지는 코드베이스와 merge conflict

원티드랩 iOS 챕터는 제품을 만드는 ‘스쿼드’에 소속 된 개발자와 플랫폼 부문에 소속되어 있는 개발자로 이루어져 있습니다.

개발자들은 매 스프린트마다 새로운 기능을 개발합니다.

프로젝트 내에 파일 추가와 삭제에 따라 .xcodeproj에 변경사항이 발생하게 됩니다.

변경사항들을 개발 브랜치에 병합하고자 하면 발생하는 마주치는 익숙한 녀석 merge conflict!

Created by dall-e

원티드랩 iOS 챕터는 이런 문제를 mergepbx 라는 도구로 해결해왔습니다.
mergepbx가 적은 변경에 따른 간단한 conflict에는 괜찮은 해결책이었지만, 변경사항이 많을 때는 유쾌한 해결 방법은 아니었습니다.

2. 모듈화

Let’s Swift — 61호에서 소개되었듯 모듈화는 iOS 개발에 있어 굉장히 뜨거운 주제입니다.

앱 구조가 커지면서 점차 구조적으로 모듈화를 고민하는 회사들 사례가 많아지고 있습니다.

원티드랩 또한 앱의 구조가 복잡해지면서 모듈화를 고민하는 회사 중 하나였습니다.

제가 원티드랩에 합류할 때부터 iOS 챕터는 이미 모듈화 킥오프와 케이스 스터디를 진행하고 있었습니다.

두 마리 토끼를 잡자

Created by dall-e

2가지 문제를 해결할 수 있는 도구는 대표적으로 2가지가 있습니다.

  • XcodeGen: yml 기반의 .xcodeproj 제네레이터
  • Tuist: Swift 기반 .xcodeproj 제네레이터

그 외에도 생산성 향상을 위한 많은 기능들이 있습니다!

사실 어떤 도구를 사용할지에 대해 큰 고민은 하지 않았습니다.

운이 좋게도 원티드랩에 합류하기 전에 XcodeGen과 Tuist를 제품에 적용할 기회가 있었고, 각 도구가 어떤 장점이 있는지 알고 있었기 때문입니다.

Tuist였나?

실제 제품에 적용한 경험이 있는 XcodeGen과 토이 프로젝트에서 사용해본 Tuist 중에서 고민 했습니다.

아무래도 조금 더 익숙한 도구에 손이 가기 마련이지만, XcodeGen은 사용하며 느꼈던 몇 가지 불편한 점이 있었습니다.

XcodeGen

  • XcodeGen.yml manifest를 구성합니다.
  • 익숙해지기 어려워 특정 인원에게 프로젝트 관리 의존성이 쏠릴 수 있다는 점
  • .yml 특성상 읽기 쉽지 않고, 디버깅에 시간이 오래 걸릴 수 있다는 점

Tuist

  • Tuist는 iOS 개발자에게 익숙한 .swift로 manifest를 구성합니다.
  • XcodeGen 대비 활성화 된 커뮤니티와 컨트리뷰터들이 존재한다는 점
  • Xcode에서 IDE의 도움을 받으며 manifest를 작성할 수 있다는 점

Tuist를 선택하지 않을 이유가 없었습니다!

여러 기술 블로그에서 다룬 훌륭한 참고자료가 많습니다.

원티드앱에 적용하기

새로운 프로젝트를 시작하는 경우에는 Tuist의 적용은 무척 간단합니다.
공식문서를 따라 Tuist의 설치부터 프로젝트 생성을 할 수 있습니다.

하지만, 원티드 앱은 오래 유지보수 되어 왔고(Project Format 설정이 Xcode 3.2-compatible였을 정도로), 빌드 스킴에서부터 세팅까지 다양한 수정사항이 적용되어 있는 상태 였습니다.

기존 빌드 세팅을 그대로 옮겨가지 못하면, 어떤 문제들이 발생 하는지는 지난 경험에서 뼈저리게 느껴보았기 때문에, 최대한 기존 세팅을 보전하는 형태로 진행하게 되었습니다.

고맙게도 Tuist는 기존 프로젝트에 Tuist를 적용하는 가이드 문서인 Adopting Tuist를 제공하고 있습니다.
가이드 라인대로 기존 프로젝트의 .xcconfig 파일을 모두 추출한 뒤 적용하면 끝날 것 이라고 생각했지만, 이는 큰 오산이었습니다.

Project Format 설정을 Xcode 13-compatible로 변경하고, Xcode가 발전 해오면서, 사라지거나 변경 된 빌드 세팅 옵션들이 있었습니다.

어떤 값이 사용되는 값이고, 어떤 값이 사용되지 않는 값인지 확인하기 매우 어려웠습니다.

눈물을 머금고, 추출한.xcconfig 파일과 xcconfigs repo에 정리 된 파일과 1:1 대조를 시작했습니다.

어떤 값이 사용 되는 값인지 https://xcodebuildsettings.com/를 통해 확인했습니다.

이 작업을 통해 배운 점이 있다면 단편적으로 알고있던 Xcode의 빌드 세팅과 값의 의미와 옵션을 통한 빌드의 최적화를 이해하게 되었습니다.

한 번 정도는 읽어보면 좋을 내용이라고 생각합니다.

제가 앞으로 iOS 개발을 해나가며 두고두고 써먹을 귀중한 자산이 되었다고 생각합니다. 긴 시간 이루어진 대조 작업이 끝난 후 PR을 제출했습니다.

아니나다를까 역시 놓친 부분이 존재했고, 상당한 수의 버그가 보고되었습니다.

이내 혼자서 도저히 감당할 수 없는 지경에 이르러서 챕터에 SOS를 요청했고,동료들은 흔쾌히 도움을 주셨습니다. 7시간에 걸친 도움을 받아 성공적으로 .xcconfig을 최신화 할 수 있었습니다.

후일담

기념비적인 3600번째 PR

지난 6월 2일 93개의 커밋과 함께,
원티드 Repository에 Tuist 적용 PR이 머지 되었습니다!

적용 시점으로 2달이 지난 지금 iOS 챕터는 merge conflict와 이별 했으며,
주목적이었던 모듈화를 위해 열심히 달려나가고 있습니다.

더 좋은 앱을 만들기 위해 고민하고, 개선해 나가겠습니다! :)

--

--