Go to file
2026-02-09 16:38:00 -06:00
AudioPlaybackKit Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-07 15:32:27 -06:00
scripts Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 15:02:19 -06:00
TheNoiseClock Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 16:38:00 -06:00
TheNoiseClock.xcodeproj Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-08 12:25:47 -06:00
TheNoiseClock.xcworkspace Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-01-31 09:43:40 -06:00
TheNoiseClockTests Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-08 11:53:56 -06:00
TheNoiseClockUITests Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 16:38:00 -06:00
TheNoiseClockWidget more refactoring by codex 2026-02-08 10:48:39 -06:00
.gitignore Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2025-09-08 16:29:47 -05:00
AGENTS.md refactored and moved to ios26 base 2026-02-07 10:32:11 -06:00
AUDIO_MANAGEMENT_GUIDE.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2025-09-08 08:22:20 -05:00
PRD.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 16:38:00 -06:00
README.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 16:38:00 -06:00

TheNoiseClock

TheNoiseClock is a SwiftUI iOS app that blends a bold, full-screen digital clock with white noise playback and a rich alarm system. It is optimized for iOS 26+ with Swift 6, built on a modular architecture, and styled with the Bedrock design system. Alarms use AlarmKit for reliable wake-up alerts that cut through Focus modes and silent mode.


App Store Information

App Name

TheNoiseClock

Subtitle (30 chars max)

Clock, noise, and alarms

Promotional Text (170 chars max)

A clean, full-screen clock with ambient soundscapes and a powerful alarm editor. Customize colors, fonts, and glow for a distraction-free display.

Keywords (100 chars max)

clock,alarm,white noise,ambient,sleep,timer,focus,night mode,bedside

Description

TheNoiseClock is a distraction-free digital clock with built-in white noise and a fully featured alarm system. Designed for late-night focus, bedside use, and calm environments, it fills the screen with bold, stable digits and lets you tune the look and sound to your space.

Clock

  • Full-screen, orientation-aware clock with optional seconds and AM/PM
  • Fixed-width digits prevent layout "jumping"
  • Auto-fit sizing and manual scale control
  • Custom fonts, weights, and designs with live preview
  • Glow and opacity controls for low-light comfort
  • Clock tab hides the status bar for a distraction-free display
  • Selectable animation styles: None, Spring, Bounce, and Glitch
  • Modern iOS 26 animations: numeric transitions, phase-based bounces, glitch effects, and breathing colons
  • Automatic full-screen: UI fades out after 5 seconds of inactivity, tap to restore
  • Optional mini-controls for alarms and white noise directly on the clock face

White Noise

  • Multiple ambient categories and curated sound packs
  • Seamless looping with background audio support
  • Quick preview on long-press, instant play/stop controls

Alarms (Powered by AlarmKit)

  • Unlimited alarms with labels, repeat schedules, and snooze options
  • Alarm sound library with preview (MP3 format)
  • Vibration and volume controls per alarm
  • AlarmKit integration: alarms cut through Focus modes and silent mode
  • Live Activity countdown shows 5 minutes before alarm fires
  • Dynamic Island displays countdown and alarm status
  • Lock Screen shows alarm countdown with custom UI
  • Full-screen in-app alarm screen with Snooze/Stop when active
  • Snooze support via AlarmKit's countdown feature

Display Mode

  • Automatic full-screen display after 5 seconds of inactivity
  • Tap anywhere to restore navigation and status bar
  • Optional wake-lock to keep the screen on

What's New

  • First-launch onboarding with feature highlights and notification setup
  • Branded launch experience with Bedrock theming
  • Redesigned settings interface with cards, toggles, and sliders
  • Centralized build identifiers via xcconfig

Features

  • Real-time digital clock with full customization
  • Full-screen display mode and Dynamic Island awareness
  • White noise playback with categories and previews
  • Rich alarm editor with scheduling and snooze controls
  • Full-screen in-app alarm screen with Snooze/Stop controls
  • Bedrock-based theming and branded launch
  • iPhone and iPad support with adaptive layouts
  • First-launch onboarding with feature highlights and permission setup

Requirements

  • iOS 26.0+
  • Xcode 26+
  • Swift 6

Build & Run

Open TheNoiseClock.xcodeproj and run the TheNoiseClock scheme.

Terminal Build

cd /Users/mattbruce/Documents/Projects/iPhone/TheNoiseClock
xcodebuild -project TheNoiseClock/TheNoiseClock.xcodeproj -scheme TheNoiseClock -destination 'platform=iOS Simulator,name=iPhone 17 Pro Max,OS=26.2' build

Terminal Test

cd /Users/mattbruce/Documents/Projects/iPhone/TheNoiseClock
xcodebuild -project TheNoiseClock/TheNoiseClock.xcodeproj -scheme TheNoiseClock -destination 'platform=iOS Simulator,name=iPhone 17 Pro Max,OS=26.2' test

App Store Screenshot Matrix (en, fr-CA, es-MX)

cd /Users/mattbruce/Documents/Projects/iPhone/TheNoiseClock
./TheNoiseClock/scripts/run-screenshot-matrix.sh

Output is written to:

  • Screenshots/en/iPhone-6.3, Screenshots/en/iPhone-6.5, Screenshots/en/iPhone-6.9, Screenshots/en/iPad-13
  • Screenshots/fr-CA/iPhone-6.3, Screenshots/fr-CA/iPhone-6.5, Screenshots/fr-CA/iPhone-6.9, Screenshots/fr-CA/iPad-13
  • Screenshots/es-MX/iPhone-6.3, Screenshots/es-MX/iPhone-6.5, Screenshots/es-MX/iPhone-6.9, Screenshots/es-MX/iPad-13

Branding & Theming

The app uses Bedrock for theme tokens, settings UI, and the launch experience.

  • Theme: TheNoiseClock/Shared/Design/NoiseClockTheme.swift
  • Branding config: TheNoiseClock/Shared/Design/BrandingConfig.swift
  • Launch screen: TheNoiseClock/Resources/LaunchScreen.storyboard

To generate an app icon in DEBUG:

  1. Open Clock Settings -> Debug
  2. Tap Icon Generator
  3. Export AppIcon.png and drop it into Assets.xcassets/AppIcon

Build Configuration (xcconfig)

Identifiers are centralized in xcconfig files:

  • TheNoiseClock/Configuration/Base.xcconfig
  • TheNoiseClock/Configuration/Debug.xcconfig
  • TheNoiseClock/Configuration/Release.xcconfig

Update COMPANY_IDENTIFIER and DEVELOPMENT_TEAM in Base.xcconfig to migrate to a new account.

Swift access is provided via: TheNoiseClock/Configuration/AppIdentifiers.swift


Recent Engineering Updates

  • Alarm defaults now use digital-alarm.mp3 for consistent AlarmKit scheduling.
  • Alarm sound metadata loading now caches decoded data and falls back safely if configuration files are missing/corrupt.
  • Alarm UI refresh uses a dedicated alarmsDidUpdate notification instead of reusing clock-style notifications.
  • Date overlay formatting now uses cached formatters to reduce repeated allocation overhead.
  • Shared scheme configuration includes both unit and UI tests under xcodebuild ... -scheme TheNoiseClock test.
  • Onboarding now updates Keep Awake through ClockViewModel (single source of truth) instead of direct UserDefaults writes.
  • Alarm scheduling failures now surface user-visible errors and rollback failed add/update/toggle operations.
  • Added accessibility identifiers for critical controls and updated UI tests to use stable identifiers instead of coordinate heuristics.
  • Alarms now support weekday repeat schedules end-to-end, including editor UI, next-trigger calculation, and AlarmKit weekly relative schedules.
  • Add/Edit alarm sheets now stay open if scheduling fails, preserving user inputs and showing an in-sheet error alert.
  • Alarm list ordering now prioritizes enabled alarms and sorts by the next trigger time for faster at-a-glance relevance.
  • Repeat-day controls now follow locale weekday order and include accessibility identifiers for repeat/alert options controls.
  • Onboarding now explicitly highlights repeat schedules plus per-alarm vibration/flash/volume customization for better feature discovery.
  • Non-Text user-facing strings were migrated to String(localized:) and backed by TheNoiseClock/Localizable.xcstrings with en, es-MX, and fr-CA translations.
  • Clock Settings UI copy now uses explicit localization keys (no raw Text(\"...\") literals in settings screens).
  • Localization catalog is normalized to a single pattern: namespaced key-based entries only (no source-string keys).
  • Screenshot UITests now enforce deterministic pre-capture state (alarm enabled + noise actively playing) and include locale-safe tab/onboarding navigation for en, fr-CA, and es-MX.

Architecture

TheNoiseClock follows a clean, modular structure:

TheNoiseClock/
├── AudioPlaybackKit/            # Reusable audio package
├── TheNoiseClock/               # Main app target
│   ├── App/                     # App entry, TabView
│   ├── Configuration/           # xcconfig + AppIdentifiers
│   ├── Features/                # Clock, Alarms, Noise
│   ├── Shared/                  # Theme, branding, utilities
│   └── Resources/               # Bundles, JSON, assets
└── TheNoiseClock.xcodeproj/

Support & Contact

For feedback, feature requests, or support: support@thenoiseclock.app