A minimalist iOS countdown application built with SwiftUI. Track important dates with beautiful design, widget support, and full offline functionality.
- ๐ฑ Create & Manage Countdowns - Add unlimited countdowns with title, date, and notes
- ๐ฏ Smart Status Labels - See whether events are today, upcoming, or overdue with relative formatting
- ๐ Widget Bundle - Small, Medium, and Large widget sizes with live updates
- ๐ 5 Languages - English, German, Turkish, Spanish, and Farsi (with RTL support)
- ๐จ Modern Design - Beautiful card-based interface with Liquid Glass effects
- ๐ Privacy-First - All data stored locally on your device
- โฟ Fully Accessible - VoiceOver support and accessibility settings
- Xcode 15+
- iOS 16.0+
-
Clone & Open
git clone https://github.com/gabrimatic/countdown.git cd countdown open Countdown.xcodeproj -
Configure Bundle Identifiers (for device deployment)
- Select Countdown target โ Signing & Capabilities
- Update bundle identifiers if needed:
- App:
info.gabrimatic.Countdown - Widget:
info.gabrimatic.Countdown.widget
- App:
-
Build & Run
โR # in Xcode, or use command line: xcodebuild -scheme Countdown -destination 'platform=iOS Simulator,name=iPhone 15' build
-
Add Widget
- Long-press Home Screen โ "+" โ Search "Countdown"
- Choose size and add
- Widget syncs automatically with app
MVVM Pattern with clean separation:
- Models - Data structures with business logic
- Services - State management & persistence
- Views - SwiftUI components (presentation only)
Data Storage - UserDefaults via app group (no cloud needed)
# Build app
xcodebuild -scheme Countdown -destination 'platform=iOS Simulator,name=iPhone 15' build
# Build widget
xcodebuild -scheme CountdownWidget -destination 'platform=iOS Simulator,name=iPhone 15' build
# Clean
xcodebuild cleanCountdown/
โโโ Models/ # Data structures
โโโ Services/ # State management & persistence
โโโ Views/ # UI components
โโโ Utilities/ # Helpers & design system
โโโ Resources/ # Assets, localization
CountdownWidget/ # Widget extension
Total: 17 Swift files, ~1,085 lines of code
- SwiftUI - Modern declarative UI
- WidgetKit - Home screen widgets
- UserDefaults - Local data persistence
- Localization - 5 languages with RTL support
Edit Utilities/SharedCountdownRepository.swift:
let appGroupID = "group.info.gabrimatic.countdown"Settings automatically persist in the app:
- System (follows device)
- Light mode
- Dark mode
Automatic device language detection. Currently supports:
- ๐ฌ๐ง English
- ๐ฉ๐ช German
- ๐น๐ท Turkish
- ๐ช๐ธ Spanish
- ๐ฎ๐ท Farsi (RTL)
- Verify app group ID matches in both targets
- Clean build:
xcodebuild clean - Force restart simulator:
xcrun simctl shutdown all && xcrun simctl erase all
- Check both targets have correct identifiers:
- App:
info.gabrimatic.Countdown - Widget:
info.gabrimatic.Countdown.widget
- App:
- Rebuild project:
xcodebuild clean && xcodebuild build - Verify
.lprojfolders added to both targets
- Fork the repository
- Create feature branch:
git checkout -b feature/my-feature - Make changes and test
- Commit:
git commit -m "feat: description" - Push and open Pull Request
Code style:
- 4 spaces indentation
- camelCase for functions/properties, PascalCase for types
- Localize all user-facing strings with
NSLocalizedString()
MIT License - See LICENSE file
Developer: gabrimatic.info
Built with: SwiftUI + WidgetKit | iOS 16.0+ | November 2025