[25.12.13] Tododok 트러블슈팅 - Coordinator 화면 전환 메서드, 어떤 방식으로 사용할까?
·
iOS/Swift
1. 문제 상황지난 MOUP 프로젝트에서 처음으로 Coordinator를 사용해보고 꾸준히 든 고민, coordinator를 vc에 주입하는 등 이러한 과정들이 정말 꼭 필요하며 최적의 방법인가?를 고민했다. ViewController 측에서 어느 이벤트를 통해 화면 이동을 해야한다는 판단을 하게 되면 화면 전환을 담당하는 coordinator의 메서드를 쓰도록 해야 하는데, 이 과정 속에서 지난 번엔 VC 내에 weak var coordinator를 통해 매번 주입받고 internal(접근제어자를 쓰지 않은 기본상태) 메서드를 사용해야 했는데 이 과정이 반복될수록 꽤나 번거로웠다.화면 전환이 들어가는 ViewController를 생성할 때마다 파라미터로 coordinator = self라는 코드를 넣어..
[25.12.07] MOUP 트러블슈팅 - Keychain 관련 Race Condition
·
카테고리 없음
1. 문제 상황알림 기능 구현 이후 앱 실행 시 어째선지 자꾸 크래시가 난다. 당시 로그엔 Keychain 데이터 저장 시 문제가 생겼다는 말과 함께 명확히 어떤 문제인지 파악이 되지 않았는데,AI를 조금 써가면서 원인 분석을 해보았더니, 초기 로그에 데이터 불러올 때 로그를 출력하도록 한 부분이 단서가 되었다.그리고 해당 크래시는 15분마다 일어났다. 이 15분은 서비스에서 정의했던 액세스 토큰 유효 시간이다.우선 기존 구조에선 초기에 액세스 토큰 만료 시 토큰을 재발급하는 처리 하나밖에 없었어서 UserDefaultsManager, KeychainManager를 통한 유저 관련 정보 저장이 이루어졌다. import Foundationimport Alamofirefinal class AuthInterc..
[TIL / 25.05.18] 의존성 주입 담당 DIContainer를 처음 적용해보았습니다
·
iOS/Swift
DIContainer란?앱의 각 객체들이 어떻게 구성되고 주입될지 정의해주는 중앙 조립소.UseCase, Repository, ViewModel, ViewController와 같은 컴포넌트들을 하나의 컨테이너에서 만들어주기 때문에, 객체 간의 생성 책임을 분리하고 코드 가독성을 높이는 데 도움이 된다. - 객체 간 생성 책임 분리란?누가 누구를 만들지 결정하는 책임을 명확히 나누는 것임. class MainViewController: UIViewController { private let viewModel = MainViewModel( searchUseCase: SearchBooksUseCase( repository: BookRepository(networkServi..
[TIL / 25.05.13] BookSearchApp Lv 3 트러블슈팅 - Core Data 크래시
·
iOS/Swift
시간이 많이 없어 주 정보원은 GPT와의 스무고개뿐이라, 이중 검증이 아직 덜 된 부분이 많구요..!제가 생각하기에 확실하지는 않지만 "이게 맞는 것 같다"싶은 부분들로 글을 쓰겠습니다. 1. Persistent Store 초기화 전 Entity(context:) 사용 시 크래시 발생An NSManagedObject of class ‘BookEntity’ must have a valid NSEntityDescription.이 메시지와 함께 crash가 났는데담기 버튼을 누르면 코어 데이터에 CartBookEntity를 저장하는 로직을 실행하도록 하는 과정에서 문제가 생겼다.관련 코드를 보며 아직 코어 데이터 생태계에 아무것도 몰라서 찾아봐도 무슨 말인지 모르겠고 gpt랑 스무고개를 진행했다. "persi..
[TIL / 25.04.17] URLSession으로.. 네트워크 통신을 어떻게 하는지.. 보여줄래요
·
iOS/Swift
URLSessionAn object that coordinates a group of related, network data transfer tasks.네트워크 데이터 전송 작업과 관련된 그룹을 조정하는 객체. 라고 공식문서에 나와있듯이 이제 API를 통해 데이터를 주고 받으려면 서버와 통신할 수 있어야 합니다. 이를 가능토록 하는 게 URLSession이라고 할 수 있습니다 ! 이 URLSession을 통해서 어떻게 앱과 데이터를 주고받는지에 대한 방식은 일단 두가지. 비교적 전에 쓰던 Completion Handler 패턴, 그리고 이보다 최근에 나온 Swift Concurrency를 이용한 방식이 있는데... 일단 이것들을 다루기 전에 이 안에선 어떻게 해야 URLSession을 가지고 데이터들을 ..
[TIL / 25.03.24] UIKit No Storyboard 초기 세팅
·
iOS/Swift
스토리보드 없이 코드 베이스로 UI를 구현하게 된다면 어떻게 세팅할지 알아보자 ! 1. main.storyboard 삭제move to trash 해줘야함 ! 2. 프로젝트 설정 - Build Settings - main 검색하면 나오는 UIKit Main storyboard File Base Name 백스페이스로 제거 3. 파일 중 Info.plist에서 해당 항목도 백스페이스로 제거 4. SceneDelegate 내에 코드 수정func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (..