SWIFTDATA

14
P_001 · SWIFT

iOS 17에서만 죽는 SwiftData 크래시 — unmanaged @Model의 함정

ModelContext 밖에서 init한 @Model의 합성 getter가 iOS 17 런타임에서 SIGABRT — 운반은 순수 struct로 바꿨다.

MAY 29, 2026 · 4 MIN
#swiftdata#swift#ios17
P_002 · SWIFTUI

SwiftUI #Preview가 자꾸 죽을 때 점검할 패턴들

Environment·SwiftData 컨테이너만 챙겨도 Preview crash 대부분이 사라진다.

MAY 26, 2026 · 3 MIN
#swiftui#preview#xcode
P_003 · SWIFT

실기기에서만 깨진 콜드스타트 푸시 race condition 디버깅 기록

시뮬레이터에서는 멀쩡했지만 실기기 콜드스타트 푸시에서만 상세 화면이 열리지 않던 문제를 네 단계로 추적한 기록.

MAY 22, 2026 · 7 MIN
#ios#swift#pushnotification
P_004 · SWIFT

Firebase RemoteConfig 빼고 GitHub Actions + 정적 JSON으로 갈아탄 후기

단순 broadcast 용도로만 쓰던 Firebase RemoteConfig를 GitHub Actions + 정적 서버 JSON 구조로 갈아탔다. 트레이드오프, 새 구조, 마이그레이션 시 캐시 stale 이슈까지.

MAY 15, 2026 · 5 MIN
#firebase#remoteconfig#github actions
P_005 · SWIFT

47개 @Model 중 4개만 보존하기 — default-safe 정책 설계

47개 @Model 중 4개만 보존하고 43개는 삭제하는 정책을 설계하면서 만난 네 가지 후보. 누락이 안전을 깨지 않는 design 원칙: default = 삭제, 정책 = 한 곳, 적용 = 자동화.

MAY 13, 2026 · 3 MIN
#swiftdata#architecture#designpattern
P_006 · SWIFT

SwiftData #Predicate에서 enum 비교가 0건을 반환하는 이유

SwiftData #Predicate가 사용자 정의 enum을 만나면 throw 없이 0건을 반환한다. SQL 번역 실패가 침묵으로 드러나는 함정. raw value 컬럼, Swift filter, PK 인코딩 세 가지 우회법.

MAY 13, 2026 · 4 MIN
#swiftdata#predicate#enum
P_007 · SWIFT

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

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

MAY 13, 2026 · 3 MIN
#swiftdata#attribute#unique
P_008 · 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