Uptime Kuma Notifier — a native macOS menu bar application (Swift/SwiftUI) that monitors Uptime Kuma servers via Socket.IO and provides real-time status updates with native notifications.
swift build # Debug build
swift build -c release # Release build
swift run # Build and runPackage.swift— SPM config, depends onsocket.io-client-swiftSources/UptimeKumaNotifier/App/—@mainentry point withMenuBarExtraModels/—Server,Monitor,Heartbeat,MonitorStatus,ServerConnectionStateServices/—KeychainService,SocketIOService,NotificationServiceViewModels/—ServerManager(multi-server orchestrator),ServerConnectionViewModel(per-server state)Views/—MenuBarView,MonitorListView,MonitorRowView,SettingsView,ServerFormView
Info.plist—LSUIElement=true(menu bar only app), macOS 15+UptimeKumaNotifier.entitlements— Sandbox + network.client
- Target: macOS 15 (Sequoia) minimum
- Swift version: 6.0 (strict concurrency)
- Dependency:
socket.io-client-swiftv16.x with.version(.three)(matches Uptime Kuma's Socket.IO v4 server) - Credentials: Passwords and JWT tokens stored in macOS Keychain via Security framework. Server configs (non-secret) in UserDefaults.
- Architecture:
@Observablepattern,@MainActorfor all UI/ViewModel code.SocketIOServiceis@unchecked Sendablewith delegate callbacks dispatched to MainActor
- All commits must use conventional commit format
(e.g.,
feat:,fix:,chore:,ci:,docs:) - Versioning and changelog management are handled by release-please
- Follow Apple platform best practices (SwiftUI, Keychain, UserNotifications, app sandbox)
- No third-party dependencies beyond Socket.IO client — use system frameworks (Security, UserNotifications)
- PR validation: semantic PR title check + debug/release builds
(
pr-validation.yml) - Release on merge: release-please automation, signed + notarized app bundle,
DMG/ZIP GitHub Release assets (
release-on-merge.yml) - App Store: manual dispatch, builds .pkg and uploads to App Store Connect
(
appstore-release.yml)
APPLE_CERTIFICATE_BASE64/APPLE_CERTIFICATE_PASSWORD— Developer ID signingAPPLE_TEAM_ID/APPLE_DEVELOPER_ID/APPLE_APP_PASSWORD— NotarizationAPPSTORE_CERTIFICATE_BASE64/APPSTORE_INSTALLER_CERTIFICATE_BASE64/APPSTORE_CERTIFICATE_PASSWORD/APPSTORE_PROVISIONING_PROFILE_BASE64— App Store submission