sookim-1

번호 : 031, 작성일자: 2024-09-03

2024.08.27 ~ 2024.09.02

🏬 TCA (The Composable Architecture)


해당 Tutorial은 TCA 라이브러리를 만든 pointfreeco에서 제공하는 Tutorial인데 처음 TCA를 시작하기 좋아서 정리하면서 사용방법에 대해서 알아보았다.

TCA는 아키텍처를 구현하는데 도움을 주는 라이브러리이기 때문에 라이브러리를 추가했다. 라이브러리를 설치한 후 빌드시간을 봤는데 매우 증가되었다. 일단 검색해본 결과 Apple 측에서 Swift Syntax 컴파일시간이 늘어나서 오래걸린다고 하는 것 같다.

TCA와 SwiftUI를 같이 사용하는 경우 View에 Store를 연결한 후 Action을 입력받아 State를 변경하는 방식이였다.

Action을 입력받아 State를 변경하는 객체는 Reducer 프로토콜을 준수하는 Feature에서 담당한다.

TCA를 배우면서 느낀점은 사실상 크게 보면 View와 Feature만 나눠져있어서 Feature가 MVC의 Controller나 MVVM의 ViewModel 처럼 무거워지지 않을까 생각했는데 Feature를 더 작게 나눈 후 통합하는 부분이 자연스러웠고 Swift Macro가 구현이 잘되어 있어서 일단 깔끔했던 것 같다.

그리고 Unit테스트를 진행할 때 Feature만 테스트를 진행하면 되고 TestStore를 비롯해 여러 테스트도구도 제공하기 때문에 테스트코드 작성이 매우 편리했다.

🎨 Design System


개인적으로 사용하는 DesignSystem을 여러 Target으로 나누었을 때 비공개 Spec 저장소 하나에서 올리고 싶어서 SwiftUI Target을 추가했다.

라이브러리의 버전을 올릴 때 podspec파일들을 찾아서 version을 올려주는 쉘스크립트파일을 작성했고 해당 실행이 완료되면 workflow가 돌아서 tag 버전도 올리는 파일을 작성했지만 Linux에서 이슈가 있어서 일단 쉘스크립트파일에서 tag 버전까지 올리도록 임시로 설정했다.

🚨 Tuist와 Fastlane을 사용할 때 관련된 이슈


전처리문 조건문에서 Build Configuration이 제대로 분기처리 되지 않는 이슈

  • xcconfig파일에서 OTHERSWIFTFLAGS[config=Release]=$(inherited) -D RELEASE 처럼 조건부컴파일을 위한 플래그를 설정해주는 -D 플래그 설정이 되지 않았던 문제
  • -D 플래그에 설정한 문자열을 전처리문 조건문에서 사용할 수 있다.

Tuist를 적용하면서 fastlane 배포 후 버전업데이트를 xcode프로젝트에만 적용해서 버전이 맞춰지지 않는 이슈

  • fastlane에서 xcode프로젝트 버전업데이트 해주는 lane이 존재하지만 xcconfig도 변경해주기 위해서 🔗 fastlane-plugin-xcconfig을 활용해서 Marketing Version, Current Project Version을 수정해주는 lane을 쉽게 작성할 수 있다.

fastlane에서 getbuildnumber를 가져오지 못하는 이슈

  • $ agvtool what-version를 실행할 때 불러오지 못하는 경우 Build Setting에서 Versioning System - AppleGeneric으로 변경한다.
  • 변경해도 안되는 경우 버전을 변경하면 인식하는데 첫 xcode 프로젝트 생성할 때 인식을 못하면 Tuist에서 Setting할 때 Current Project Version을 1로 설정후 생성한다.

🙋🏻‍♂️ 기타 사항


  1. UnitTest를 SwiftPM사용하는 경우 본 Target을 추가하면 자동으로 의존성들이 같이 추가되기 때문에 CocoaPods처럼 Test 타겟에서 따로 설치할 필요가 없다.
태그: