DEBUGGING

12
P_001 · SWIFT

@Model 스캐폴드 id + .unique 제약 = 조용한 데이터 손실

SwiftData에서 sentinel default id(.invalidInt = -1)와 @Attribute(.unique)와 try?가 만나면 100건이 1건으로 줄어든다. 에러 없이. 다층 방어로 막는 법.

MAY 13, 2026 · 3 MIN
#swiftdata#attribute#unique
P_002 · SWIFT

Swift String.hashValue로 DB PK를 만들면 안 되는 이유

Swift의 String.hashValue는 per-process random seed라서 앱 재시작마다 값이 바뀐다. DB PK로 박으면 lookup이 영구 실패한다. 결정적 hash로 가야 하는 이유와 마이그레이션 처리.

MAY 13, 2026 · 3 MIN
#swiftdata#hashable#primarykey
P_003 · SWIFT

isPush 플래그가 만드는 Coordinator 흐름 분기 지옥

푸시 진입과 일반 진입을 isPush 플래그로 가르는 순간, dismiss 경로가 두 갈래로 갈리고 cascade finish가 의도와 정반대로 동작한다. 분기 자체가 정책과 어긋난 사례.

MAY 13, 2026 · 3 MIN
#coordinator#uikit#navigation
P_004 · SWIFT

Realm에서 SwiftData로: 42개 모델을 옮기는 전략과 함정 (Part 6 — View 다중 mount 디버깅)

마이그레이션 후 리스트 화면 진입 시 스켈레톤이 두 번 깜빡이는 회귀를 가설 5개로 못 잡고, ObjectIdentifier 진단 로그 한 줄로 Store가 3번 init되는 걸 5분 만에 잡았다. Publisher 다중 trigger + invalid sentinel 합작이었고, isValid 가드 + attach 책임 단일화 + attachedFolderID latch 3중으로 막은 흐름. 시리즈 6편을 닫으며 측정이 추측을 이긴다는 thesis 정리.

MAY 12, 2026 · 14 MIN
#swiftdata#realm#ios17