Skip to content

fix: 위젯 삭제된 키링이 위젯 리스트에 있는 현상 수정 & 키링 정렬 추가#37

Merged
giljihun merged 2 commits intodevelopfrom
bugfix/-위젯-삭제된-키링이-위젯-리스트에-있는-현상
Feb 1, 2026

Hidden character warning

The head ref may contain hidden characters: "bugfix/-\uc704\uc82f-\uc0ad\uc81c\ub41c-\ud0a4\ub9c1\uc774-\uc704\uc82f-\ub9ac\uc2a4\ud2b8\uc5d0-\uc788\ub294-\ud604\uc0c1"
Merged

fix: 위젯 삭제된 키링이 위젯 리스트에 있는 현상 수정 & 키링 정렬 추가#37
giljihun merged 2 commits intodevelopfrom
bugfix/-위젯-삭제된-키링이-위젯-리스트에-있는-현상

Conversation

@giljihun
Copy link
Member

@giljihun giljihun commented Feb 1, 2026

🎯 PR 내용

1. 삭제된 키링이 위젯 편집 목록에 남아있던 버그 수정

원인 :

아주 오래 전(언제인진 모르겠다.)
키링 삭제 시, 위젯용 캐시(JSON)가 정리되지 않았던거로 파악됨.
왜냐면 지금 삭제하면 캐시가 잘 지워지기 때문에.

해결 (중요) :

이건, 기존 유저들을 위해 새로운 로직이 필요한 부분이다.
그래서 보관함 최초 접근 시에 실제 보유 키링과 캐시를 비교하여 정리해주는
마이그레이션 메서드를 집어넣었다.

기존 유저 - 보관함 한 번 들어가서 키링 전체가 로딩되면 해결됨 (키링 많으면 여기서 좀 로딩 걸리긴함 / 1회만)
신규 유저 - 무관

위젯 키링 목록 최신순 정렬 적용

// AppIntent.swift
func suggestedEntities() async throws -> [KeyringEntity] {
	let widgetKeyrings = KeyringImageCache.shared.loadWidgetKeyrings()
		.sorted { $0.createdAt > $1.createdAt }  // 최신순
	return widgetKeyrings.map { KeyringEntity(id: $0.id, name: $0.name) }
  }

최신순 정렬인데, 여기는 새로운 키링 기준 이런걸 복잡하게 넣기 힘들 듯하다.
최신순으로 충분해보이기도하고

위젯 관련 네이밍 개선 (AvailableKeyring → WidgetKeyring)

네이밍이 내 생각에 관련이 느껴지지 않아서 싹 바꿨다.

최신순 정렬에서 헤맨 부분

기존 WidgetKeyring 모델에는 createdAt 필드가 없었음

[단순히 필드 추가하면?]

createdAt 추가 → 기존 JSON에 createdAt 없음 → 디코딩 실패

[해결 1] backward-compatible 디코더 추가

createdAt 없으면 .distantPast로 fallback → 디코딩 성공
하지만 모든 기존 키링이 .distantPast → 정렬 안 됨

[해결 2] 마이그레이션 추가

앱 실행 시 실제 createdAt 값으로 업데이트 → 정렬 정상 동작

[추가 고려] 근데 마이그레이션으로 해결했는데 왜 디코더를 유지해야 하나?

  • 마이그레이션은 앱에서만 실행됨
  • 위젯 Extension은 앱과 별도로 실행 가능
  • 앱 업데이트 후 위젯이 먼저 실행되면? → 디코딩 실패 방지 필요

그러니까! 앱 업뎃했는데.
보관함가서 정렬쭉 안한사람이, 위젯 들어가서 목록 볼 수도 있잖음.
디코더가 없으면 정렬이 오래된순으로도 안되기때문에,
오류 발발함. 그래서 필요.

📱 스크린샷 (UI 변경 시)

스크린샷, 2026-02-01 17 01 01

최신순 정렬된 모습

🔗 관련 이슈

✅ 체크리스트

  • 빌드 성공
  • 테스트 완료
  • Self-review 완료

- AvailableKerying -> WidgetKeyring (네이밍이 너무 안좋아서 수정)
- 위 변화에 따른 전역적인 수정
- 위젯편집에서 기존 오래된순 -> 최신순 정렬
- WidgetKeyring에 createdAt 필드 추가 및 최신순 정렬 적용
- 기존 데이터 호환을 위한 backward-compatible 디코더 구현
- 삭제된 키링 캐시 정리 및 createdAt 누락 데이터 마이그레이션
- UserDefaults 버전 체크로 마이그레이션 1회만 진행하는 방식임!
@giljihun giljihun self-assigned this Feb 1, 2026
@giljihun giljihun linked an issue Feb 1, 2026 that may be closed by this pull request
@giljihun giljihun merged commit dec41c5 into develop Feb 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bugfix: [위젯] - 삭제된 키링이 위젯 리스트에 있는 현상

1 participant