SWIFT
19URLSession 취소를 실패 알림으로 보여주지 않기
Swift concurrency에서 URLSession 요청을 취소했는데 에러 토스트가 뜨는 문제를 CancellationError와 URLError.cancelled 기준으로 정리한다.
iOS 17에서만 죽는 SwiftData 크래시 — unmanaged @Model의 함정
ModelContext 밖에서 init한 @Model의 합성 getter가 iOS 17 런타임에서 SIGABRT — 운반은 순수 struct로 바꿨다.
Swift ClosedRange<Date> 한 줄 때문에 한 달간 헤맨 이야기
Swift ClosedRange<Date>의 precondition trap을 따라가다 보니, 진짜 범인은 캘린더 데이터 매핑에서 가드 변수를 안 쓴 한 줄이었다. 데이터·표현 두 레이어로 막은 회고.
Coordinator 패턴에서 부모 없는 외부 진입이 만드는 delegate nil 함정
푸시나 딥링크로 상세 화면을 직접 열 때 부모 Coordinator가 없어 delegate nil로 종료 흐름이 멈춘 문제와 fallback 처리 기록.
실기기에서만 깨진 콜드스타트 푸시 race condition 디버깅 기록
시뮬레이터에서는 멀쩡했지만 실기기 콜드스타트 푸시에서만 상세 화면이 열리지 않던 문제를 네 단계로 추적한 기록.
iOS 푸시 알림 중복 진입을 막는 2층 dedupe 패턴
같은 iOS 푸시가 notification tap, cold launch, pending route 경로로 중복 처리되는 문제를 fingerprint dedupe와 envelope id 소비 추적으로 막은 사례.
RxSwift 코드베이스에서 async/await로 점진 마이그레이션하는 방법
RxSwift 의존이 큰 iOS 프로젝트에서 신규 코드부터 Swift Concurrency로 옮기는 단계별 전략. Repository async 미러, UseCase 공존, 호출자 화면 단위 전환까지.
iOS Coordinator에서 푸시 진입을 단일 라우터로 정리한 기록
UIKit MVVM Coordinator 앱에서 list ViewModel이 푸시를 직접 구독하던 구조를 AppNavigationRouter와 async/await 기반 단일 진입점으로 정리한 사례.