project 52

Dependency Container 만들기

Dependency Container 만들기 의존성 주입해줘야 하는데, 매번 의존성 주입을 위해 반복되는 작업을 하는게 불편함.SwiftUI에서 @EnvironmentOjbect를 활용한 처음 작성한 코드를 새롭게 바꿔보고자 함. 글의 순서environmentObjcet를 활용한 초기 개발주입할 것들을 구조체로 분리하여 정의주입할 객체 생성하기UI구성하는 Builder에 주입하기 environmentObjcet를 활용한 초기 개발 모듈화 전 해당 부분을 처리할 때 SwiftUI에 environmentObject를 활용하고자 함.사유: App Root 영역에서 container를 작성해두면 모든 하위 뷰에서 사용할 수 있기 때문개선하기로 한 이유UIKit과 혼용해서 사용할 때 보라색 이슈가 발생하며,..

SwiftUI 하위뷰에서 상위뷰로 DelegatePattern을 활용해 이벤트 전달하기

SwiftUI 하위뷰에서 상위뷰로 DelegatePattern을 활용해 이벤트 전달하기  글의 순서상황어떻게 처리할까?코드 적용 예시마무리 상황홈 화면에서 프로필 리스트가 있는 네비게이션 방식으로 화면을 전환하고, 해당 화면에서 프로필을 전환하고 pop 혹은 dismiss로 홈 화면으로 돌아왔을 때, 프로필이 전환되어야 함. 즉, 하위 뷰가 상위 뷰로 프로필이 전환되었음(이벤트)을 알려야 함. 어떻게 처리할까?우선 UIKit에서라면 여러가지 방법이 있겠지만, 단순하게는 Delegate Pattern이 있음.SwiftUI에서는 Environment, preferenceKey를 활용할 수 있고, @State, @Binding을 활용해 하위 뷰와 연결할 수도 있음. SwiftUI에서 제안된 방법들은 사용..

Coordinator 모듈을 통해 UI 모듈간 순환참조 해결하기

Coordinator 모듈을 통해 UI 모듈간 순환참조 해결하기  모듈을 분리하면서 화면 이동에 대한 처리가 필요해짐.기존 구조에서`UI` 모듈끼리 서로의 UI 및 기능이 필요한 경우 모듈간 순환참조가 발생할 수도 있음. 글의 순서완성한 동작 영상문제 상황아이디어 스케치Coordinator 모듈 설계하기UI 모듈 영역 적용 및 사용App 모듈 영역 적용 및 사용PresentationView 자세히보기NavigationDestinationView 자세히보기   완성한 동작 영상 영상 재현경로 설명HomeUI (모듈)[present] MultiProfileUI (모듈)[navigation] > ProfileEditUI (모듈)3개의 모듈이 화면전환이 정상적으로 동작함.   문제 상황예를 들어 홈 > 통합검..

모듈화 리팩토링 과정에서 고민했던 것들

모듈화 리팩토링 과정에서 고민했던 것들 Tuist 3.x 버전으로 사용한게 마지막이라 4.x 버전으로 학습하고 변경해보고자 함.하나의 설계 방법보단 여러가지 설계들을 보면서 느끼고 경험하는 것이 중요하다고 해서 기존 쓰던 방식을 완전히 배제하고 다른 사람들이 사용하는 방식을 따라하는 수준 + 내 스타일 적용 요정도로 해보고자 함. 글의 순서프로젝트 모듈화 구조 스크린샷리팩토링 시작 전 생각 정리NetwrokSDK 모듈에 대해서feature에서 ui를 분리한 이유화면전환 어떻게 할 것인지이미 구현된 UI가 필요한 경우는 어떻게 할 것인가?관리하는데 드는 비용에 대한 고민마무리 소감 프로젝트 모듈화 구조 스크린샷  리팩토링 시작 전 생각 정리깃헙에 레포 돌아다니면서 다른 사람들이 사용하는 Tuist 참고하..

SwiftUI 화면 dismiss 상황에서 흰 화면 나타나는 문제

SwiftUI 화면 dismiss 상황에서 흰 화면 나타나는 문제 SwiftUI 기반의 코드에서 화면 dismiss 상황에서 흰 화면이 나타나는 문제가 발생하여 그 과정을 기록 글의 순서해당 현상에 대한 영상프로젝트에서 사용한 화면 전환 방식해당 현상이 발생했을 때 흰화면이 나타나는 원인 분석어떻게 해결하는게 좋을까?현재 상황에서 해당 문제가 왜 발생할까?어떤 방식을 선택하는게 좋을까?향후 생각할 포인트.  해당 현상에 대한 영상문제 현상 재현을 위해서 내부 컨텐츠를 제거하고 화면전환.해당 현상 재현 플로우홈 > 멀티 프로필 > 프로필 생성 > 프로필 생성 닫기 > 멀티 프로필 닫기 > 홈홈 멀티 프로필 간에는 문제가 되는 코드로 작성멀티 프로필 프로필 생성 간에는 문제가 없는 코드로 작성 프로젝트에..

Swift Concurrency를 적용하면서 발생한 동시성 문제

Swift Concurrency를 적용하면서 발생한 동시성 문제사내에서도 동일한 이슈가 발생했었어서 해당 부분에 대해서 정리하고자 함.기존 Combine으로 작성된 코드를 async-await으로 교체하는 작업을 진행.  글의 순서Combine으로 작성된 코드 살펴보기Swift Concurrency로 단계적으로 전환하기Swift Concurrency로 안전성 확보하기Combine에서 Swift Concurrency 적용 Combine으로 작성된 코드 살펴보기기존 코드는 캐싱을 위해 캐시 프로퍼티가 존재하며, Combine을 기반으로 작성되어 있었음.Combine을 선택한 이유는 RxSwift가 익숙하여, RxSwift와 닮은 애플 퍼스트파티 선택에서 Combine을 선택   Swift Concurre..

지하철 검색 기능에 캐싱 로직 도입하기

지하철 검색 기능에 캐싱 로직 도입하기 지하철 검색 로직에 캐싱 로직을 도입. 글의 순서SearchSubwayUseCase 개선SearchSubwayUseCase 테스트를 위한 Stub 객체 만들기SearchSubwayUseCaseTests 캐싱 로직 동작 검증 코드SearchSubwayUseCaseTests 실패 후 로직 보완  지하철 검색 로직은 사용자가 키보드를 통해 검색어를 입력할 때 throttle을 활용해 약간의 시간을 두어 검색을 실행.여기까지는 우리가 일반적으로 사용하는 검색 로직. 동일한 값에 대해 서버 요청을 줄이고, 동일한 결과값을 더 빨리 제공할 수 있으므로 이점은 확실. SearchSubwayUseCase 개선기존에 Combine을 활용해서 처리하고 있었는데, cache 프로퍼티..

[Xcode 16 Beta] Could not download and install iOS 18.0 Simulator runtime with Xcode 16.0 beta

[Xcode 16 - Beta] Could not download and install iOS 18.0 Simulator runtime with Xcode 16.0 beta 릴리즈 노트https://developer.apple.com/documentation/xcode-release-notes/xcode-16-release-notes Xcode 16 Beta Release Notes | Apple Developer DocumentationUpdate your apps to use new features, and test your apps against API changes.developer.apple.com  1. Xcode 15 버전들이 macOS (macOS Sequoia)에서 열리지 않음.- Ven..

[iOS] 학과 검색 알고리즘 개선 (초성검색)

[iOS] 학과 검색 알고리즘 개선 (초성검색) 쿠링에 학과 검색 알고리즘을 아주 살짝(?) 개선했다. 우선 쿠링 서비스의 학과와 관련한 시퀀스를 살펴보자 해당 시퀀스로 설계하게 된 당시의 배경으로는 1. debounce 등 클라단 로직이 줄어들어 개발 공수가 훨씬 줄어든다. 2. 학과 검색 과정에서 api 응답까지 지연시간이 없으므로 사용자에게 더 좋은 경험을 줄 수 있다. 3. 서버도 학과 검색 개발 로직이 줄어들어 개발 공수가 줄어든다. 4. 한번에 내려줘야하는 학과의 갯수가 api를 통한 페이징 혹은 검색을 통해 받을 만큼 많지 않다. 여러모로 당시 상황을 고려했을때 이런 방향으로 설계를 주장했었는데, 다행히도 다른 분들도 승낙해 주셔서 해당 시퀀스로 구현되었다. 다만 해당 시퀀스 형태로 구현 몇..