URLSession 취소를 실패 알림으로 보여주지 않기
Swift concurrency에서 URLSession 요청을 취소했는데 에러 토스트가 뜨는 문제를 CancellationError와 URLError.cancelled 기준으로 정리한다.
Firebase RemoteConfig 빼고 GitHub Actions + 정적 JSON으로 갈아탄 후기
단순 broadcast 용도로만 쓰던 Firebase RemoteConfig를 GitHub Actions + 정적 서버 JSON 구조로 갈아탔다. 트레이드오프, 새 구조, 마이그레이션 시 캐시 stale 이슈까지.
SwiftUI에서 PreferenceKey가 안 먹어서 onGeometryChange로 갈아탄 디버깅
SwiftUI ScrollView에서 스크롤 위치에 따라 네비게이션 타이틀을 점진적으로 노출하려는데 PreferenceKey/GeometryReader 측정값이 갱신되지 않았다. onGeometryChange로 갈아탄 디버깅 회고.
SwiftUI에서 NantesLabel 살리기
SwiftUI Text로는 안 되는 자동 링크 탐지, 줄 수 제한, 더 보기 토글을 UIKit NantesLabel을 UIViewRepresentable로 래핑해서 해결한 패턴과 네 가지 함정 정리.
`.ignoresSafeArea(.bottom)` 한 줄에 액션 버튼이 통째로 사라졌다
한 줄짜리 modifier가 자식 전부에 적용되면서 overlay 액션 버튼까지 home indicator 밑으로 끌어내린 사례.
Bool 한 개에 결정 세 개 묶었을 때
공용 컴포넌트의 옵션 한 개가 사실은 결정 세 개였다. 정책이 갈라지는 순간 쪼개야 한다.
Coordinator 시그니처 안 깨고 UIKit MVVM+C → SwiftUI MVI 갈아끼우기
상세 화면을 UIKit MVVM+C에서 SwiftUI MVI(Store)로 갈아엎으면서 Coordinator 외부 시그니처는 한 글자도 안 바꾼 이유와 방법 정리.
서버 스펙 안 나왔을 때 클라 먼저 작업하는 법
백엔드 기다리느라 일정 밀리는 게 싫어서 만든 나름의 체크리스트. 나중에 뜯어고칠 비용을 0에 가깝게.
공용 SwiftUI 컴포넌트의 마진, 누구 책임이지?
padding 두 번 먹이면 안쪽으로 두 배 들어간다. 공용 컴포넌트 마진 정책을 정하자.