Pause

Pause

Breathe deeper. Slow down. Return to yourself.

🌿 Pause – A Minimal, Intentional Breathing & Mindfulness Timer

A clean, distraction-free meditation experience for iOS and iPadOS.

Pause is a beautifully simple breathing & meditation timer built entirely in Swift and SwiftUI. Designed to get out of your way, Pause helps you settle your mind, breathe intentionally, and take short restorative breaks throughout the day — without ads, clutter, or noise.

This project includes the full iOS app, accessory Lock Screen widgets, and a lightweight audio system for gentle chimes and session guidance.

✨ Features

🕊 Minimal Breathing Sessions

Pause offers preset session lengths — 5, 10, 15, and 20 minutes — powered by SessionDurationPreset. Each session is managed by SessionViewModel, which tracks: • elapsed time • remaining time • start / pause / resume / end • session completion • persistent state during app backgrounding

Preset and custom duration controls now configure the upcoming session only. Starting is always a deliberate tap on the primary Begin action.

Pause also supports selectable breathing styles: Quiet Timer, Box Breath, Calm Exhale, and Equal Breath.

Optional ritual presets are available to quickly configure both duration and breathing style: Reset, Focus, Unwind, and Sleep Wind Down.

After a fully completed session, you can optionally add a one-tap reflection: Calm, Okay, or Restless.

🔔 Gentle Audio Chimes

A lightweight AudioChimePlayer wraps AVAudioPlayer to deliver soft, unobtrusive tones for: • session start • optional interval chimes • session end

The audio system includes graceful error handling for missing or unsupported audio files during normal app use. Halfway and completion chimes are scheduled as local notifications with the original chime sound so they can fire while the app is backgrounded or the Lock Screen is active without declaring background audio mode.

📊 Session Stats

Pause includes a Stats sheet with: • a calendar that marks days with fully completed sessions • your usual meditation time (based on completed sessions) • your last completed meditation • average completed session length • iCloud sync for completed-session insights across devices on the same Apple ID

Partial or cancelled sessions are not recorded in the calendar or summary stats.

🏞 Custom SwiftUI Experience

Pause uses clean, modern SwiftUI views and a lightweight design system across: • a single-screen session flow (idle, running/paused, completed) • configuration cards for ritual, duration, and breathing style • a breathing-orb timer focal element with progress and optional phase cues • a calm completion reflection step • a card-based Insights sheet

Everything is intentionally minimal and soothing — nothing steals focus.

📱 Lock Screen Widget

The included Pause widget keeps session state glanceable and calm on accessory surfaces: • ready state with a minimal “Ready to begin” cue • active-session remaining time countdown when relevant • accessory families: circular, rectangular, and inline • shared state via PauseSessionStore (app-group compatible) • WidgetKit timeline reload support

⚙️ Settings App Version Row

In iOS/iPadOS Settings (Settings > Apps > Pause), the app shows a single non-editable Version row formatted as CFBundleShortVersionString (CFBundleVersion), sourced from the app bundle at launch.

🛰 Live Activity Status

Pause does not currently ship a Live Activity. Template Live Activity scaffolding was removed until a production-ready ActivityKit lifecycle is implemented in the app target.

📦 Clean App Architecture

Pause uses a deliberately simple architecture:

PauseApp.swift ├── AppCoordinator.swift # High-level flow ├── Componets/ │ └── SessionCoordinator.swift # Root composition ├── ViewModels/ │ ├── SessionViewModel.swift # Session lifecycle + configuration state │ └── SessionModels.swift # Session enums, breathing, rituals, stats models ├── Componets/ │ ├── AudioChimePlayer.swift # Chime playback subsystem │ ├── MeditationDesignSystem.swift# Shared colors/styles │ ├── MeditationTimerEngine.swift # Core timing logic with Combine │ ├── SessionNotificationScheduler.swift # Lock Screen chime notification scheduling │ ├── PauseSessionStore.swift # Shared model for widgets & app │ └── BackgroundAudioManager.swift# Background-audio compatibility shim └── Views/ └── SessionView.swift # Main session + insights surfaces

The codebase avoids unnecessary complexity, making it approachable and ideal for learning modern SwiftUI patterns.

⌚ Background-Safe Timer Handling

MeditationTimerEngine drives foreground updates while the app is active, PauseSessionStore preserves session dates so timing and widgets restore cleanly after backgrounding, and SessionNotificationScheduler schedules halfway/completion chime notifications without enabling background audio mode.

🧩 Technologies Used • Swift 5 / SwiftUI • Combine • AVFoundation for audio • WidgetKit • App Groups for shared storage • NSUbiquitousKeyValueStore for Insights sync • Xcode 17+ • Clean MVVM-ish architecture

🚀 Getting Started

Clone the repo:

git clone https://github.com/yourusername/Pause.git open Pause.xcodeproj

Make sure you have: • Xcode 17 or newer • an iOS Simulator runtime installed • A team signing identity for running on a device

You can run Pause in the simulator, but sound playback and background behavior work best on a physical device.

🧱 App Structure Overview

SessionViewModel

The heart of Pause. Tracks: • session duration • state transitions (idle → running → paused → completed) • timer lifecycle • persisted session restoration for background-safe timing

MeditationTimerEngine

Lightweight Combine-powered engine updates time every second with minimal overhead.

AudioChimePlayer

Handles chime playback and formatting. Clean, compact, safe.

PauseSessionStore

Shared container used by both the app and the widget. It exposes: • remaining time • session state • triggers widget timeline reloads

🎨 Design Philosophy

Pause tries to feel like a breath of fresh air: • Soft tonal accent colors • Minimal screen elements • Clear, approachable typography • No clutter, no gamification, no noise • Just tap → breathe → finish

It’s a meditation timer that respects your attention.

🧪 Tests Included

The project includes unit tests for: • session timing behavior • state transitions • persistence logic via PauseSessionStore

Run tests via:

⌘ + U

🤝 Contributing

Pull requests are welcome. If you’d like to improve animations, add additional breathing modes, or enhance widget functionality, open an issue and let’s talk.

🌟 Final Note

Pause is intentionally small — a tiny pocket of calm in a noisy world. If this project inspires you, improves your day, or teaches you something about SwiftUI architecture, that makes it all worth it.