Skip to content

๐Ÿ› [fix] CloudKit ๋™๊ธฐํ™” ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฐฉ์ง€ ๋ฐ ์ž„์‹œ ๋ณต๊ตฌ ๊ธฐ๋Šฅ#169

Merged
leeari95 merged 3 commits into
release/3.2.1from
feature/fix-cloudkit-sync
Mar 24, 2026
Merged

Conversation

@leeari95

Copy link
Copy Markdown
Owner

Summary

iCloud ๋™๊ธฐํ™”(NSPersistentCloudKitContainer) ๋„์ž… ํ›„ ๊ธฐ์กด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฌธ์ œ ํ•ด๊ฒฐ.

๋””๋ฒ„๊ทธ ๋กœ๊ทธ ๋ถ„์„์œผ๋กœ 4๊ฐ€์ง€ ๊ทผ๋ณธ ์›์ธ์„ ํ™•์ธํ•˜๊ณ  ๋ชจ๋‘ ์ˆ˜์ •:

  1. Orphan cleanup์ด ๋งค import๋งˆ๋‹ค ์œ ํšจ ๋ฐ์ดํ„ฐ ์‚ญ์ œ โ†’ ์•ˆ์ „์žฅ์น˜ ์ถ”๊ฐ€
  2. ๋นˆ UC ์ž๋™ ์ƒ์„ฑ์ด iCloud ๋ฐ์ดํ„ฐ ๋ฎ์–ด์”€ โ†’ ๋‹ค์ค‘ ์–ต์ œ ํ”Œ๋ž˜๊ทธ
  3. Export 134301 ์—๋Ÿฌ โ†’ ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ ์žฌ์‹œ๋„
  4. Change Token Expired โ†’ sync reset ๊ฐ์ง€ ๋ฐ cleanup ์–ต์ œ

์ถ”๊ฐ€๋กœ ์ด๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ์€ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์ž„์‹œ ๋ณต๊ตฌ ๊ธฐ๋Šฅ ์ œ๊ณต (TEMPORARY).

Changes

Phase 1: Orphan Cleanup ์•ˆ์ „์žฅ์น˜

  • Import/sync reset ์ง„ํ–‰ ์ค‘ cleanup ์–ต์ œ
  • ์ „์ฒด ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ชจ๋‘ orphan์ด๋ฉด ์‚ญ์ œ ๊ฑด๋„ˆ๋œ€
  • Consolidation 5์ดˆ ์ง€์—ฐ + DispatchWorkItem์œผ๋กœ ์ค‘๋ณต ๋ฐฉ์ง€
  • Change Token Expired (CKError 21) ๊ฐ์ง€

Phase 2: ๋นˆ UC ์ƒ์„ฑ ๋ฐฉ์ง€

  • getUserCollection()์— isImportInProgress ์ฒดํฌ ์ถ”๊ฐ€
  • ์ฒซ Import ์™„๋ฃŒ ํ›„ 30์ดˆ grace period
  • DailyTask ๊ธฐ๋ณธ ํƒœ์Šคํฌ ์ž๋™ ์ƒ์„ฑ ์‹œ import ์ƒํƒœ ์ฒดํฌ

Phase 3: Export ์—๋Ÿฌ ์ฒ˜๋ฆฌ

  • Export ์‹คํŒจ ์‹œ ์ตœ๋Œ€ 3ํšŒ ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ ์žฌ์‹œ๋„ (5s, 10s, 15s)
  • Import ์„ฑ๊ณต ์‹œ retry ์นด์šดํ„ฐ ๋ฆฌ์…‹

Phase 4: ์ž„์‹œ ๋ณต๊ตฌ ๊ธฐ๋Šฅ (TEMPORARY)

  • ์„ค์ • > "iCloud์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ" ๋ฒ„ํŠผ
  • Store ํŒŒ์ผ ์‚ญ์ œ ํ›„ ์•ฑ ์žฌ์‹œ์ž‘ โ†’ CloudKit ์ „์ฒด ์žฌimport
  • // TEMPORARY: Recovery ์ฃผ์„์œผ๋กœ ํ–ฅํ›„ ์ œ๊ฑฐ ์šฉ์ด

Test Plan

  • ๊ธฐ์กด ์œ ์ € ์‹œ๋‚˜๋ฆฌ์˜ค: orphan ์‚ญ์ œ 0๊ฑด, export ์„ฑ๊ณต, ๋ฐ์ดํ„ฐ ์•ˆ์ • ํ™•์ธ
  • ์‹ ๊ทœ ์„ค์น˜ ์‹œ๋‚˜๋ฆฌ์˜ค: ๋นˆ UC ์ƒ์„ฑ ์–ต์ œ, CloudKit import ํ›„ ์ •์ƒ ๋กœ๋“œ ํ™•์ธ
  • ๋ณต๊ตฌ ๊ธฐ๋Šฅ: ์„ค์ • > ๋ณต๊ตฌ ๋ฒ„ํŠผ โ†’ ์•ฑ ์žฌ์‹œ์ž‘ โ†’ ๋ฐ์ดํ„ฐ ๋ณต์› ํ™•์ธ
  • Change Token Expired ์‹œ๋‚˜๋ฆฌ์˜ค: sync reset ๊ฐ์ง€ + cleanup ์–ต์ œ ํ™•์ธ

๐Ÿค– Generated with Claude Code

- Orphan cleanup ์•ˆ์ „์žฅ์น˜: import/sync reset ์ง„ํ–‰ ์ค‘ ์‚ญ์ œ ์–ต์ œ, ์ „๋Ÿ‰ ์‚ญ์ œ ๋ฐฉ์ง€
- Consolidation 5์ดˆ ์ง€์—ฐ + DispatchWorkItem์œผ๋กœ ์ค‘๋ณต ์‹คํ–‰ ๋ฐฉ์ง€
- Change Token Expired (CKError 21) sync reset ๊ฐ์ง€ ๋ฐ ๋Œ€์‘
- Import ์ง„ํ–‰ ์ค‘ ๋นˆ UserCollection ์ž๋™ ์ƒ์„ฑ ์–ต์ œ
- Import ์™„๋ฃŒ ํ›„ 30์ดˆ grace period๋กœ UC ์ƒ์„ฑ ์œ ์˜ˆ
- Export 134301 ์‹คํŒจ ์‹œ ์ตœ๋Œ€ 3ํšŒ ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ ์žฌ์‹œ๋„
- DailyTask ๊ธฐ๋ณธ ํƒœ์Šคํฌ ์ž๋™ ์ƒ์„ฑ ์‹œ import ์ƒํƒœ ์ฒดํฌ
- ์„ค์ • ํ™”๋ฉด์— iCloud ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (TEMPORARY)
- icloud-sync.md: Error Handling์— Export retry, Change Token Expired ๋Œ€์‘ ์ถ”๊ฐ€
- icloud-sync.md: UC ์ƒ์„ฑ ์–ต์ œ ์กฐ๊ฑด 4๊ฐ€์ง€ (๋‹ค์ค‘ ํ”Œ๋ž˜๊ทธ) ๋ฌธ์„œํ™”
- icloud-sync.md: Orphan cleanup ์•ˆ์ „์žฅ์น˜ (import/sync reset ์ค‘ ์–ต์ œ, ์ „๋Ÿ‰ ์‚ญ์ œ ๋ฐฉ์ง€) ๋ฌธ์„œํ™”
- icloud-sync.md: Data Recovery (TEMPORARY) ์„น์…˜ ์ถ”๊ฐ€
- dashboard.md: showRecoveryResultAlert ๋ฉ”์„œ๋“œ ๋ฌธ์„œํ™”
@coderabbitai

coderabbitai Bot commented Mar 24, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

โš™๏ธ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2a53430f-c2d3-462d-a82b-6263d678f776

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • ๐Ÿ” Trigger review
โœจ Finishing Touches
๐Ÿงช Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/fix-cloudkit-sync

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

โค๏ธ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

push ์‹คํŒจ ์‹œ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ โ†’ ์ปค๋ฐ‹ โ†’ ์žฌpush๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐ€์ด๋“œ ์ถ”๊ฐ€
@leeari95

Copy link
Copy Markdown
Owner Author

@claude ์ฝ”๋“œ๋ฆฌ๋ทฐ ํ•ด์ค˜~

@claude

claude Bot commented Mar 24, 2026

Copy link
Copy Markdown

Claude encountered an error โ€”โ€” View job


I'll analyze this and get back to you.

@leeari95
leeari95 marked this pull request as ready for review March 24, 2026 11:25
@leeari95 leeari95 self-assigned this Mar 24, 2026
@leeari95 leeari95 added the bug Something isn't working label Mar 24, 2026
@leeari95
leeari95 merged commit fa034cd into release/3.2.1 Mar 24, 2026
1 of 3 checks passed
@leeari95
leeari95 deleted the feature/fix-cloudkit-sync branch March 24, 2026 11:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant