Skip to content

euynus/DaysRemember

Repository files navigation

时光 · Days Remember

A warm, emotional Chinese-language anniversary & countdown iOS app — SwiftUI, iOS 17+. Implementation of the Anthropic Design handoff bundle in _design/days-remember/.

OS integrations

Capability Wiring
Local notifications Store/NotificationManager.swift schedules dr.day.<id>.pre.<offset> requests via UNUserNotificationCenter. Authorization is requested on first launch, schedule re-syncs on day add/edit/delete and on every reminder-toggle change in 提醒. Quiet-hours toggle pushes any 22:00–08:00 trigger past 08:00.
WidgetKit DaysRememberWidget/ extension target with Small / Medium / Large families. Reads days through the group.com.shiguang.daysremember App Group (Store/SharedStorage.swift); the app calls WidgetCenter.shared.reloadAllTimelines() on every day change. Refreshes at the next midnight.
PhotosPicker AddDayView exposes a PhotosPicker tile alongside the gradient palette. Picked images are JPEG-compressed (max 1600px) and stored on Day.photoData. PhotoTile(day:) renders the image when present, falls back to the gradient otherwise — the change cascades through Home, Detail, Calendar, Share.
Share sheet ShareCardView renders the chosen template via ImageRenderer, then routes 微信 / 朋友圈 / 小红书 / 更多 buttons through UIActivityViewController. The 保存 button writes the rendered card to Photos via PHPhotoLibrary (requires NSPhotoLibraryAddUsageDescription).

Out of scope: WeChat-/小红书-specific SDK integrations are intentionally not wired — the system share sheet routes to whatever messaging apps the user has installed.

Build

This project uses XcodeGen to generate DaysRemember.xcodeproj from project.yml.

brew install xcodegen
xcodegen generate
open DaysRemember.xcodeproj

Then run on the iPhone 15 simulator (iOS 17.5+).

Fonts (optional)

The app falls back to Songti SC (serif) and PingFang SC (sans), both bundled with iOS, so it will render correctly without any extra setup. For pixel-faithful match with the design, drop the following TTFs into DaysRemember/Resources/Fonts/ and add them to UIAppFonts in Info.plist:

  • NotoSerifSC-Regular.ttf, NotoSerifSC-Medium.ttf, NotoSerifSC-SemiBold.ttf
  • NotoSansSC-Regular.ttf, NotoSansSC-Medium.ttf, NotoSansSC-SemiBold.ttf

Theme.serif() / Theme.sans() already prefer Noto when present and degrade silently when not.

Layout

See /Users/suny/.claude/plans/fetch-this-design-file-optimized-lagoon.md (the approved plan) for the full file map and design-token correspondence to the prototype CSS.

Comparing against the design

Open the prototype at _design/days-remember/project/Days Remember.html in any browser to see the source artboards side-by-side with the running app.

Debug launch arguments

For inspecting individual screens without manual navigation, the app reads a few launch arguments (debug only — production launches ignore them):

# Pin "today" to 2026-04-23 (the prototype's reference date) so countdowns match the design.
# (`SIMCTL_CHILD_*` env vars are forwarded to the launched app by simctl.)
SIMCTL_CHILD_DR_PIN_TODAY=1 xcrun simctl launch <device> com.shiguang.daysremember

# Open a specific tab on launch
xcrun simctl launch <device> com.shiguang.daysremember --tab calendar         # home | calendar | categories | notifications

# Open a specific screen directly (bypasses the tab shell)
xcrun simctl launch <device> com.shiguang.daysremember --screen detail --day wedding
xcrun simctl launch <device> com.shiguang.daysremember --screen add
xcrun simctl launch <device> com.shiguang.daysremember --screen share --day japan
xcrun simctl launch <device> com.shiguang.daysremember --screen widgets
xcrun simctl launch <device> com.shiguang.daysremember --screen onboarding --page 2

--day accepts any sample id from Models/SampleData.swift (wedding, baby, birthday, midautumn, japan, kaoyan, firstmet, work, dog, moved).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors