173 lines
6.8 KiB
Markdown
173 lines
6.8 KiB
Markdown
# 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
|
|
```bash
|
|
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
|
|
```bash
|
|
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
|
|
```
|
|
|
|
---
|
|
|
|
## 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.
|
|
|
|
---
|
|
|
|
## 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
|