Development Progress
Every commit, every fix, every feature — the complete development journey of WakeAct.
March 31, 2026
Latest iOSv1.0.3 — Fix Crashes, Signing & Performance
v1.0.3Resolves build signing failures, app startup black screen, Settings tab crash, and repeated XP awards. AlarmKit entitlement removed (not yet available from Apple). Sentry disabled in debug builds to eliminate startup overhead. TipKit views removed from Settings due to iOS 26 beta crash.
Bug Fixes
- Signing failure: Removed
com.apple.developer.alarmkitentitlement — not yet available from Apple - Install failure: Added
CURRENT_PROJECT_VERSIONandMARKETING_VERSIONto all extension targets - Black screen on launch: Disabled Sentry entirely in debug builds — SDK overhead was blocking main thread
- Settings crash: Removed 3
TipViews — TipKit crashes on iOS 26 beta - Repeated XP award: Added
dismissCurrentTip()after GuidedExperience XP award — tip was never dismissed, awarding 100 XP on every launch - Startup blocking: Moved
isInitialized = truebefore async work so UI renders immediately - Extension embedding: Split embed phase — Widget to
PlugIns/, Shield + DeviceActivity toExtensions/
Performance
- Settings: Changed
VStacktoLazyVStackinside ScrollView for deferred section rendering - Session replay: Disabled entirely (too heavy for real-time alarm app)
Sentry Issue Triage
- WAKEACT-3: Resolved (AlarmKit fix deployed)
- WAKEACT-7/8: Ignored (HealthKit & Game Center expected states, codes filtered)
- WAKEACT-1/2/5/6: Ignored (iOS 26 beta SwiftUI bugs)
v1.0.3 — Full Sentry Coverage & WAKEACT-3 Fix
v1.0.3Comprehensive Sentry expansion from ~14 services to 100% coverage across all 5 targets. Fixes WAKEACT-3 (AlarmKit Error Code=1, 18 events, 6 users) by adding missing entitlement and authorization guard. Adds 47 performance transactions, user feedback integration, and 7 alert rules.
WAKEACT-3 Fix: AlarmKit Error Code=1
- Missing entitlement: Added
com.apple.developer.alarmkit - Missing auth guard: Added
requestAuthorization()before first scheduling attempt - Error context: Enriched Sentry capture with alarm ID, name, schedule type, active days
Sentry Expansion
- Extension coverage: Shared
SentryConfiguration.start(target:)for Widget, Shield, DeviceActivity, Watch - Error capture:
SentrySDK.capture(error:)with component tags in all 56 services - Performance: 47 custom transactions — alarm.schedule, puzzle.session, purchase.flow, app.startup, and more
- User feedback: Bug report sheet captures
SentryFeedbackalongside email - try? → do/catch: 60+ conversions with Sentry error capture
Dashboard & Alerts
- 7 alert rules: new issues, high error volume, crash-free rate drops, AlarmKit failures, slow alarms/puzzles/purchases
- Overview dashboard with 6 widgets: Errors by Component, Users Affected, Active Issues, p95 by Transaction
March 29, 2026
iOSv1.0.3 — Fix App Store Rejection (Guideline 2.1a)
v1.0.3App Store review rejected v1.0 for Guideline 2.1(a) — Performance: App Completeness. A “couldn’t communicate with a helper application” error appeared when tapping “Grant Access” for Screen Time on the Focus tab. Root cause: missing com.apple.developer.family-controls entitlement across all three targets.
Fixes
- WakeAct.entitlements: Added
com.apple.developer.family-controls— required forAuthorizationCenter.shared.requestAuthorization(for: .individual) - WakeActDeviceActivity.entitlements: Added
com.apple.developer.family-controls— required for DeviceActivityMonitor extension - WakeActShield.entitlements: Added
com.apple.developer.family-controls— required for ShieldConfiguration extension
Review Details
- Rejection date: March 28, 2026
- Review device: iPhone 13 mini, iOS 26.4
- Resubmitted: March 29, 2026 — approved March 30, 2026
March 26, 2026
iOSv1.0 — App Store Submission & Website Launch
v1.0First-ever App Store submission. Resolved all Xcode validation issues, deployed promotional website at wakeact.com, and configured ASO-optimized metadata. Approved and live on the App Store as of March 30, 2026.
App Store Validation Fixes
- Icon alpha channel: Removed transparency via JPEG round-trip (App Store rejects alpha in icons)
- ExtensionKit plist format: Migrated from
NSExtensiontoEXAppExtensionAttributeswithEXExtensionPointIdentifierfor DeviceActivity and Shield extensions - ExtensionKit embedding: New “Embed ExtensionKit Extensions” build phase for DeviceActivity + Shield; Widget stays in PlugIns
- Missing plist key: Added
NSHomeKitUsageDescription(ITMS-90683) - Widget display name: Added
CFBundleDisplayName= “WakeAct Widget” - Build version sync: Set
CFBundleVersionto 2 across all extension plists
Promotional Website
- Deployed at wakeact.com via Cloudflare Pages
- Static HTML/CSS/JS with coral/warm color palette, light/dark mode
- 5 tabbed feature panels, comparison table, sleep tracking spotlight
- Secondary pages: team, privacy policy, terms of service, accessibility, progress
App Store Metadata (ASO-Optimized)
- Name: WakeAct — Puzzle Alarm Clock
- Subtitle: Sleep Tracker & Morning Streak
- Category: Health & Fitness (primary), Productivity (secondary)
March 25, 2026
iOSREADME Overhaul & Documentation Update
Pre-releaseComplete README rewrite with centered logo, badges, table of contents, structured feature tables, ASCII architecture diagram, and comprehensive technical documentation. Added build/ to .gitignore.
Highlights
- Centered app icon, title, and tagline header
- Developer, platform, Swift, Xcode, localization, and version badges
- Structured Table of Contents with deep links
- Features at a Glance summary table
- ASCII architecture diagram with key decisions
- Dedicated sections for Puzzle System, App Blocking, Gamification, HealthKit, Widgets, Localization
- Tech Stack table with 25+ frameworks
- Building & Running guide with prerequisites
Comprehensive Audit — 22 Issues Fixed
Pre-releaseFinal comprehensive audit covering data integrity, memory leaks, logic bugs, view performance, and wiring gaps. Fixed 22 issues across 20 files with zero errors and zero warnings.
Service/Data Fixes (11 files)
- Data race: Captured
gradualVolumeSecondslocally before audio render callback - Timer leak: Store testSunrise() timer in instance property, cleanup existing
- Dead code: Removed nonsensical conditional, simplified XP calculation
- Empty array guard: Guard for empty avgWakeMinutes before division
- Integer division: Changed percentage calc to Double-based math
- Timer deinit: Added negative duration guard in stopRecording()
- CloudKit race: Retry loop for CKError.serverRecordChanged conflicts
- Inverted logic: Fixed snooze/speed progress (lower = better), division-by-zero guards
- Range validation: Clamp windDown hours (0-23) and minutes (0-59) in init
- XP overflow: Cap multiplied XP at 10,000 per action
View Fixes (9 files)
- Timer leaks: Manual connect()/cancel() replacing .autoconnect() across HomeView, ClockFaceView, DailyChallengeView, AwakeVerificationView
- GeometryReader: Replaced 2 GeometryReaders in ScrollView with scaleEffect overlay
- Dead code: Removed hidden EmptyView button
- Timer cleanup: Added .onDisappear calling cancelNap()
- Keyboard: Added .submitLabel(.done) + .onSubmit
Full Localization — 10 Languages
Pre-releaseComplete localization infrastructure supporting 10 languages: English, Spanish, French, German, Japanese, Korean, Chinese (Simplified), Portuguese (Brazil), Hindi, and Arabic. All user-facing strings across the main app, widgets, and shield extension are now localizable via Apple String Catalogs (.xcstrings).
Infrastructure
- Created
Localizable.xcstrings(main app) — 120+ UI strings with translations for all 10 languages - Created
InfoPlist.xcstrings— 12 permission description strings translated - Created widget and shield extension .xcstrings files
- Updated
project.ymlwithknownRegionsfor all 10 locales
Languages Supported
- English (source), Spanish, French, German, Japanese
- Korean, Chinese (Simplified), Portuguese (Brazil), Hindi, Arabic (RTL)
Code Changes
- Converted ~400+ hardcoded English strings to
String(localized:) - Model enums (~65), achievements (~85), cosmetics (~90), notifications (~30), mascot (~74), missions (~37), programs (~65), scores (~25), templates (~10)
8 Competitive Features, 3-Tier Startup & 47-Issue Audit
Pre-releaseMassive release implementing 8 competitive features via parallel agents, 3-tier startup optimization, ThemeCache for frame-rate performance, and a comprehensive 47-issue audit covering data integrity, memory leaks, logic bugs, view bottlenecks, and wiring gaps. Build succeeds with 0 errors, 0 warnings.
New Competitive Features (16+ new files)
- Awake Verification: Post-alarm verification quiz to prevent falling back asleep
- Anti-Dismiss System: Backup alarm 30s after dismiss, orphaned alarm detection, audio session persistence
- Bedtime Enforcer: Full-screen overlay at configured bedtime with configurable aggressiveness
- Morning Routine: Post-alarm checklist with exercise, hydration, meditation steps
- Snore Detection: Audio analysis for snore detection with session history
- Exercise Puzzle: Motion-based puzzle requiring physical exercises to dismiss
- Sleep Programs: 4 multi-week guided sleep programs with daily check-ins and XP
- Sunrise Simulation: 6-stage color gradient sunrise overlay before alarm
Performance Optimization
- 3-Tier Startup: Tier 1 (critical, immediate), Tier 2 (deferred, 500ms), Tier 3 (background, 2s) — time-to-interactive reduced from ~5-8s to ~1-2s
- ThemeCache: Singleton caching UserDefaults reads, eliminating hundreds of reads per frame
- View-Level: AlarmInsightsView 12 O(n) properties to single computeStats(), HomeView timer 30s→60s, HealthKit 7 queries→1 batch
47-Issue Audit
- Data Integrity: Alarm.init() validation, safe enum fallbacks, bounds clamping
- Memory & Leaks: NotificationCenter observers, timer cleanup, @Transient cache
- Logic & Wiring: Timezone-aware streaks, deterministic notification IDs, alarm scheduler fixes
- Build & Warnings: @preconcurrency imports, deprecated API replacements, unused code removal
March 24, 2026
iOSBack Buttons on All 17 Sub-Pages
Pre-releaseAll 17 sub-pages pushed via NavigationLink were trapping users — the system back button was hidden by .toolbar(.hidden, for: .navigationBar) and no custom replacement existed. Added a consistent chevron.left dismiss button to every custom nav bar.
Affected Views (17)
- XPShopView, TrophyHallView, DailyMissionsView, ProgressionRoadmapView
- StreakView, BlockingStatsView, SleepInsightsView, AlarmInsightsView
- SleepSoundsView, NapTimerView, DailyChallengeView, WeeklyReportView
- ChallengesView, TrustedContactListView, MusicPickerView, PremiumView
- AlarmHistoryListView, DailyRewardsDestinationView
Streak Repair, Rank Tiers & Cosmetic Expansion
Pre-releaseFourth audit addressing 3 critical/likely bugs and 5 competitive gap features. Streak comeback mechanics with 48-hour repair window, monthly rank tiers (Bronze through Diamond), 14 new cosmetic shop items, image-rendered milestone share cards, and 4 new trackable weekly goals.
Critical Bug Fixes
- Budget audit filter: smart_alarm_ and prealarm_ prefixes misclassified during budget pruning — alarm notifications were being removed before engagement ones
- Race condition: .onChange(of: scenePhase) could fire before .task completed init — added isInitialized guard
- Bedtime reminder: Stale reminder not cleaned up when preference toggled off
New Features
- Streak Repair: 48-hour comeback window, XP cost to restore half streak (min 3 days)
- Rank Tiers: Bronze (0+), Silver (30+), Gold (55+), Platinum (75+), Diamond (90+)
- Cosmetic Expansion: 28 items across 5 categories (was 14/4), including alarm themes, accent colors, icons, badges
- Share Cards: Rendered image share card via ImageRenderer for streak milestones
- Goal Personalization: 4 new trackable goals — snooze, puzzle speed, consistency, weekly wake-ups
Difficulty Progression, Alarm Templates & CoreHaptics
Pre-releaseThird audit addressing 17 findings — alarm validation, difficulty progression system, CoreHaptics patterns for all 11 sounds, alarm templates for quick setup, guided onboarding expansion, and wiring gaps.
XP/Leveling, Daily Missions, Cosmetics Shop & Seasonal Challenges
Pre-releaseSecond audit addressing 38 findings — XP/leveling system with combo multipliers, daily missions, daily rewards, cosmetics shop with purchasable themes, seasonal challenges, sleep goals, habit scoring, guided first-week experience, and comprehensive feature wiring.
QR/Shake Puzzles, Streaks, Achievements & Sleep Sounds
Pre-releaseComprehensive 30-item audit implementation across 5 priority levels — critical bug fixes, engagement features, competitive edge puzzles, UX polish, and retention mechanics.
P1 — Critical Wiring Fixes
- UnlockChallengeView puzzle routing — fixed hardcoded MathPuzzleView to properly route all puzzle types
- TipKit parameter wiring, Focus Filter integration, FamilyActivityPicker added to editor
P2 — Engagement Features
- StreakManager: Consecutive wake-up streak tracking with freeze support, milestone detection (7/14/30/60/100/365)
- AchievementManager: 12 predefined achievements with progress tracking
- SleepSoundManager: 8 synthesized sleep sounds via AVAudioEngine with timer support
- Morning briefing: 15 motivational quotes, streak count display, smart alarm window picker
P3 — Competitive Edge
- QRCodePuzzleView: Camera-based QR/barcode scanner with 6+ format support
- ShakePuzzleView: CMMotionManager accelerometer shake detection (2.5g threshold, difficulty-scaled)
- AlarmInsightsView: 30-day alarm history analysis with Swift Charts
P4/P5 — UX & Retention
- Haptic feedback on alarm toggle/save, App Store review prompts, Spotlight deep linking
- NotificationEngagementManager for re-engagement, bedtime reminders
- StreakView, SleepSoundsView, NapTimerView added
11 Apple Framework Integrations
Pre-releaseIntegrated 11 additional Apple frameworks: AlarmKit (iOS 26+), BackgroundTasks, LocalAuthentication, Charts, CoreSpotlight, FoundationModels (on-device AI), Speech, EventKit, SmartWake sleep analysis, and more.
Frameworks
- AlarmKit: System-level alarms on iOS 26+ with WakeActAlarmMetadata
- BackgroundTasks: BGAppRefreshTask for alarm rescheduling, BGProcessingTask for data cleanup
- LocalAuthentication: Face ID / Touch ID for app unlock
- Charts: Weekly sleep bar chart with color coding
- CoreSpotlight: Alarm search indexing for system-wide search
- FoundationModels: On-device AI trivia puzzle generation (iOS 26+)
- Speech: Voice puzzle dismissal with SFSpeechRecognizer (70% match threshold)
- EventKit: Calendar integration for morning briefing “Today’s Schedule”
- SmartWake: 30-day HealthKit sleep pattern analysis with suggested wake/bedtime
Core Haptics, Step Dismissal, HealthKit, MusicKit & CloudKit
Pre-releaseMassive integration of 10 Apple frameworks: TipKit for feature discovery, Core Haptics with 5 distinct alarm patterns, CoreMotion step dismissal, HealthKit sleep tracking, WeatherKit morning briefing, Focus Filters, StoreKit 2 premium tier, MusicKit alarm tones, CloudKit sync, and interactive widgets.
Frameworks Integrated
- TipKit: 5 contextual tips (Siri, App Blocking, Widget, Step Dismissal, Sleep Tracking)
- Core Haptics: 5 distinct haptic patterns matching alarm sounds with graduated intensity ramps
- CoreMotion: Step dismissal requiring 10-100 steps after puzzle completion
- HealthKit: Read/write sleep analysis, last night’s sleep data, weekly averages
- WeatherKit: Morning briefing with temperature, condition, and forecast
- Focus Filters: Sleep Focus integration with gentle sound, app blocking, dim display
- StoreKit 2: Premium tier with monthly, yearly, lifetime options
- MusicKit: Apple Music alarm tones with search, browse, and 30-second preview
- CloudKit: Opt-in iCloud sync via SwiftData with automatic mode
- Interactive Widgets: Toggle alarm widget with App Intents
Siri & App Intents
Pre-releaseFull App Intents framework integration enabling voice control via Siri and the Shortcuts app. Set, toggle, show, and delete alarms via voice — all intents work without opening the app.
Siri Commands
- SetAlarmIntent: “Set an alarm in WakeAct” — creates alarm with time, name, repeating days
- ToggleAlarmIntent: “Enable/disable alarm in WakeAct”
- ShowAlarmsIntent: “Show my WakeAct alarms” — lists all alarms with smart dialog
- DeleteAlarmIntent: “Delete alarm in WakeAct” — removes alarm with notification cleanup
- All intents registered via
AppShortcutsProviderwith trigger phrases
March 23, 2026
iOSDevelopment Kickoff — Core Architecture & First Build
Day 1Core WakeAct app with SwiftUI MVVM architecture, alarm scheduling, 5 puzzle types, app blocking via DeviceActivityMonitor, onboarding flow, and 38 bug fixes and enhancements across 5 phases: critical fixes, stubbed implementations, UX enhancements, accessibility, and infrastructure.
Phase 1 — Critical Fixes (7)
- rescheduleAllAlarms(): Was completely empty — alarms were never rescheduled after app restart
- handleSnooze(): Only printed to console — snooze was non-functional
- PuzzleGenerator memory fallback: .memory case returned mathGenerator instead of handling memory puzzles
- Test alarm button: Used random UUID, no alarm matched
- Timed blocking midnight crossing: Date components missing day info for cross-midnight schedules
- Temporary unlock dies on background: DispatchQueue timer killed when backgrounded
- cancelAlarm() race condition: Fire-and-forget Task could conflict with rescheduleAll()
Phase 2 — Stubbed Implementations (5)
- No-snooze notification category, puzzle unlock config, lockout countdown timer
- Debug section hidden in production, cryptographic salt generation
Phase 3 — UX Enhancements (6)
- Pull-to-refresh on alarm list, context menu + delete confirmation
- Snooze indicator (used/max), puzzle haptic feedback
- 5 differentiated alarm sounds with gradual volume ramp
- 4-page swipeable onboarding flow
Phase 4 — Accessibility
- VoiceOver labels on alarm rows with computed accessibility strings
Phase 5+ — Infrastructure & Quality
- ModelContainer refactor, per-config app selection, inline permission requests in onboarding
- Memory game 3D flip animation, user-facing error banners
- Replaced all print() with os.log, notification permission checks, widget refreshes
- Force unwrap fixes, word scramble guarantees, overlap detection, loading states
- Accessibility labels on DayOfWeekPicker, PuzzleProgressBar, MathPuzzleView
No entries match your filters
Try adjusting your search or category filters.Codebase at a Glance
The numbers behind WakeAct's engineering.