-
Notifications
You must be signed in to change notification settings - Fork 0
Build from Source
RithyTep edited this page Jan 28, 2026
·
1 revision
- macOS 14.0 Sonoma or later
- Xcode 15+ or Swift 5.9+ toolchain
-
create-dmg(optional, for DMG):brew install create-dmg
git clone https://github.com/RithyTep/KhmerCalendarBar.git
cd KhmerCalendarBar
# Debug build
swift build
# Run directly
.build/debug/KhmerCalendarBar./build-app.shThis script:
- Builds a release binary via
swift build -c release - Creates
KhmerCalendarBar.appbundle with Info.plist and icon - Ad-hoc code signs the app
- Packages a
.ziparchive - Creates a styled
.dmgwith drag-to-Applications
# Copy to Applications
cp -R KhmerCalendarBar.app /Applications/
# Launch
open /Applications/KhmerCalendarBar.appKhmerCalendarBar/
├── Package.swift # Swift Package Manager manifest
├── build-app.sh # Build + bundle + DMG script
├── KhmerCalendarBar/
│ ├── KhmerCalendarBarApp.swift # App entry point
│ ├── Models/ # Data models
│ ├── Engine/ # Chhankitek conversion engine
│ ├── Services/ # Holiday, notification, storage services
│ ├── ViewModels/ # CalendarViewModel
│ ├── Views/ # SwiftUI views
│ ├── Utilities/ # Helpers (LaunchAtLogin, icon generators)
│ └── Resources/ # App icon, Info.plist
├── docs/ # Website (Vercel)
└── README.md
- The app is a
MenuBarExtrawith.windowstyle — it renders as a popover from the menu bar - Dark mode is enforced via
DarkModeEnforcer(NSViewRepresentable) sinceMenuBarExtrawindows ignore.preferredColorScheme() - All published state lives in
CalendarViewModel(marked@MainActor) - The Chhankitek engine uses epoch-based astronomical calculations — see
Engine/directory