안녕하세요.
2022년 올 해 마지막 목표였던 XcodeGen 에서 Tuist 로 전환하는 프로젝트가 무사히 끝났습니다.
이번 글에서는 Tuist 로 가기까지의 여정에 대한 글로써 남겨보고자 포스팅하게 되었습니다.
1. XcodeGen 도입
회사 프로젝트 초기에는 단순히 협업을 위한 충돌 방지 목적으로 XcodeGen과 Tuist 를 알게 되었습니다.
(알아보다보니 모듈화 아키텍처까지 알게되었구요.)
그때 당시에는 지금처럼 모듈화에 대한 관심이나 개발 시장에서의 트렌드가 지금처럼 뜨겁지는 않았던 것 같아요.
오히려 TDD 가 유행했던 시절...
필요하신분들은 미리 공부하시고 적용하셨겠지만 전 초보 1년차 개발자였습니다.
처음에는 XcodeGen 을 선택했어요.
XcodeGen 이후에 나온 Tuist 를 사용 해보았는데 새로운 프로젝트가 아니라 기존 프로젝트에 적용하는건
너무나도 어려운 일이더라구요.
더군다나 Tuist 는 빠르게 업데이트 진행되고 있어 이슈들이 쏟아져나왔고 감히 대응할 자신이 없었습니다.
자료도 적다보니 프로젝트 인프라 자체를 도구로 만든다는거에 대한 감자체가 없어서 너무 어려웠죠.
그래서 XcodeGen 을 선택하게 되었어요. 자료도 Tuist 보다는 많았고 비슷한 도구였거든요.
하지만 XcodeGen 도 만만하게 볼 녀석이 아니였어요.
yml 문법도 모르고 XcodeGen Document 와 구글에서 자료를 찾아 결국에는 만들어냈습니다.
물론 모듈도 크게 Network, Entity, Reactive, Foundation, Core, Utils 등으로 나누었죠.
처음 모듈들을 분리해보면서 느꼈던 어마 무시한 벽은 외부 종속성 관리였습니다.
아주 난리도 아니였죠. Static framework 가 복사되어서 에러도 뱉었었고
XcodeCloud 를 도입했는데 아카이빙도 안되고 난리도 아니였죠.
동적/정적 프레임워크에 대한 개념을 아예 몰랐어요....
(저는 원프로젝트 원타겟맨이었으니까..!)
네 자세한 설명은 생략하고 문제없이 generate 와 XcodeCloud 까지 이루어 냈습니다!!!
(혹시 SPM, XcodeCloud, XcodeGen 조합을 쓰시는분들은 자료가 많이 없더라구요.
궁금하신점 있으시면 아는 한도 내에서 공유해드리고 싶네요!)
2. Tuist 전환하게 된 계기
https://github.com/2jae6/TIL/blob/master/tuist.md
- yml 이 아니라 swift 라서 문법적인 오류도 잘 잡아내고 프로젝트 제너레이트 할 때 오류를 훨씬 더 잘 잡는 것 같습니다. 또한 Swift 로 되어있어 iOS 개발자들에게 친숙하구요. yml보단 훨씬 편하네요.
- XcodeGen 도 멀티프로젝트 멀티타겟이 가능하지만 트위스트는 좀 더 쉽게 지원합니다.
- 클래스 다이어그램을 지원함 (물론 Tuist 안써도 가능함 swiftAutoDiagram 혹은 SwiftPlantUML )
- SPM 을 100% 쓰고 있었는데 동적 라이브러리 링킹 문제가 있어서 모듈별 의존성이 분리가 제대로 이루어지지 않았습니다. Mach-O-Type issues
- xcodegen generate 할 때마다 xcodeproj 파일 새로 생겨서spm 캐싱이 되지않아서 방법을 찾아봤는데 못찾았습니다. 생산성이 너무 떨어지더라구요.
그 점이 정말 불편했었고, 2022 카카오 이프에서도 나왔던 이야기인데
지금까지는 저 혼자했지만 앞으로는 누군가도 함께 해야할 건데 Swift 로 이루어진 Tuist 가 매력적이었어요.
오류도 더 잘잡고 심지어 종속성 충돌나는 것 같으면 generate 시 오류메세지 뜸...!
초기 XcodeGen 선택 당시보다 이제는 Tuist 안정화가 많이 되었고 많은 기업들이 채택하는 것 같아서요.
또한 XcodeGen 이용 당시에는 (SPM 기준)모든 패키지를 눌러 Dependency 항목에서 어떤 프레임워크가 어떤 프레임워크를 의존하고 있는지를 확인해서 모듈을 나누어 embed 하거나 link 를 결정해줘야해서 정말 골치아팠어요. 코코아팟을 쓰면 동적 프레임워크로 받아올 수 있는데 저는 코코아팟으로 다시 가야하나 고민했을 정도...로..
Let`s Swift 라던가 if Kakao에 나올정도로 훌륭하신 개발자분들이 개발 엔트로피에 대한 고민들을 많이하고
모듈화의 필요성을 이야기 하셨고 저도 그런 부분에 있어서 많은 공감을 했던 것 같습니다.
문제 되었던 부분들은 커스텀한 프로젝트 설정들을 셋팅함에 있어서 Tuist 의 동작방식이 조금 달랐던 것들
(Tuist Dependency 캐싱 같은 부분) 과 XcodeCloud CI/CD 다시 셋팅해주는것?
등등 너무 재밌었습니다.
3. Tuist 전환 후 느낀점이나 후기
전환하고서 좋았던점은 일단 Xcodegen은 원프로젝트 멀티 타겟으로 했었는데
멀티프로젝트로 모듈들이 바뀌면서 좀 더 관리하기가 쉬워졌다고 느껴졌어요.
원하는 것들끼리 데모앱도 만들 수 있고 의존성 그래프도 볼 수 있으니까요.
그리고 generate 시 Dependency 들이 캐싱되어있는게 너어어어어무 만족스러워요.
저희 회사에서는 아무도 알아주지 않지만 정말 열심히 했고 고생한 저에게 박수를 보내고싶습니다 :]
https://github.com/2jae6/TIL/blob/master/tuist.md
감사합니닷!!
'개발 > 개발' 카테고리의 다른 글
[iOS] - Quick/Nimble 문서로 Unit Test 배우기 - 1 (0) | 2023.02.14 |
---|---|
[개발] Github vs AWS Code Commit (0) | 2023.02.06 |
[iOS] - Unit Test 기본 개념 공부하기 (0) | 2022.11.18 |
[Swift] - Array의 Count 함수는 과연 속도 차이가 있을까? (3) | 2022.11.01 |
[iOS] - SkeletonView 를 RxDataSources 에 적용해보기 (0) | 2022.10.31 |