본문 바로가기

TIL

[TID] #4 - Tuist, Bundle, 동적/정적 라이브러리

문제 상황 : Tuist에서 external dependencies를 사용하는데 문제가 생겼다. 기존에 spm에서 외부 의존성을 가져와서 사용하고 있었는데, Tuist가 아닌 일반 프로젝트에서라면 ImageSlideShow를 import해서 사용하는데에 문제가 없었겠지만 Tuist를 사용하면 번들을 가져올 수 없어서 문제가 생겼다.

 

해결책 : 이유는 Tuist는 ThirdParyLib이라는 서브모듈을 dynamic framework로 두고, 이 모듈이 다양한 external dependencies를 가지는 것으로 세팅했기 때문에 link만 가지고서는 Resource에 접근할 수 없었다. 그래서 고민 고민 하다가 스토리보드에 있는 UI 요소들을 코드베이스로 바꿔야하나까지 생각했는데... 지푸라기 잡는 심정으로 기존에 static Framework로 사용하고 있던 Presentation에 의존성을 부여했더니 Main Bundle을 통해서 Resource에 접근 가능했다...

 

알게된 점 1 : 추가로 다른 라이브러리들이 왜 문제없이 기능하는지 찾아보는 과정에서 library들이 모두 코드로만 작성되어 있었다는 사실을 알 수 있었다... 삽질이 나를 강하게 한다..

알게된 점 2 : 그리고 이 문제를 해결하기 위한 삽질 중의 하나로 tuist 폴더에 존재하는 Dependencies를 파헤쳐봤는데...

위 사진처럼 checkouts에 각 라이브러리들이 다운받아져 있었고, 더 안쪽에는 .git 등 깃 관련 파일들이 있었다. 그리고 repositories 폴더에는 각 레포의 head나 버전에 관련된 정보들이 저장되어 있었다. 여기서 cocoapod이나 spm이 하는 일에 대해 다시 생각해보게 되었는데, 역시 git 주소에 접근해서 풀받아오는 느낌이구나..그리고 그걸 링크시켜주는거구나..하고 생각했다.

 

그러다가.. 이러한 프레임워크 의존성 관리 부분에 대한 이해가 주먹구구식이라는 것을 깨닫고 carthage, cocoapod, spm을 따로 다시한번 공부해야겠다는 생각이 들었다.

 

알게된 점 3 : tuist는 tuist generate 과정에서 각 모듈에 접근할 수 있도록 Bundle을 extension한다.

위는 bundle에 접근이 안돼서 삽질하다가 찾은 source이다. 이런식으로 objc 수준과 런타임에 Bundle.module로 접근할 수 있게 해준다. 그런데 ImageSlideShow_ImageSlideShow는 왜이렇게 뜨는지 아직 모르겠다.... 코드 잘못짠거겠지...알아보자. tuist issue log를 보니까 productName + bundleName 이런 식으로 작성해두신 것 같은데 이걸 따로 조정할 수가 있을까? 링크는 [여기](https://github.com/tuist/tuist/pull/4542/files)에 있다. 개발자분들이 남겨놓은 discussion을 보니까 이런 네이밍에 대해 고민한 흔적이 보였다. tuist가 SPM이 하는 역할을 모방하다 보니까 여러 문제가 생긴 것 같다. 아직은 미성숙한 부분이 좀 있는 모양이다..

 

그리고 프로젝트 코드 리뷰를 하다가 높은 수준에서 셀에 View를 주입하는 방식을 보게 되었는데, 이러한 방식이 기존에 내가 사용하던 방식과 어떤 차이가 있고 이점이 있는지 생각해보았다. 동료에게 어떤 의도가 있는지 물어보았고, 답변을 들어보고 스스로 조금 더 생각해보고 기록해야겠다.