SubPulse is a native macOS 14+ SwiftUI app for tracking subscriptions, recurring payments, renewal dates, categories, payment methods, reminders, and spending analytics.
Landing page: https://subpulse.netlify.app
|
|
|
|
- Swift, SwiftUI, SwiftData
- Charts
- UserNotifications
- WidgetKit desktop widgets
- MVVM-oriented view models
- SF Symbols
- Local SwiftData storage
- Network access only for optional CBR exchange-rate refresh
- Export/restore JSON backups
The landing/ folder contains a Vite + React landing page deployed to Netlify:
https://subpulse.netlify.app
The landing page includes Netlify Functions and Netlify Blobs counters for downloads, online visitors, and total visitors.
- Open Xcode 15 or newer.
- Choose
File > Open.... - Select this folder or
Package.swift. - Select the
SubPulseexecutable target. - Press
Cmd + R.
./script/build_and_run.shThe script builds with SwiftPM, stages a foreground app bundle, and launches:
dist/SubPulse.app
Verification mode:
./script/build_and_run.sh --verifyswift build -c release
./script/build_and_run.shThe resulting app bundle is placed at:
dist/SubPulse.app
./build_dmg.shThe DMG is placed at:
dist/SubPulse.dmg
For personal distribution outside the App Store, sign and notarize before sharing publicly.
Open Settings > Data and use:
Export Backupto save subscriptions, categories and payment methods to JSON.Restore Backupto replace local data with a backup file.
Store backups outside the app folder before resetting data or moving to another Mac.
Local development uses ad-hoc signing. To share SubPulse with other Macs without Gatekeeper warnings, install a Developer ID Application certificate and run:
CODE_SIGN_IDENTITY='Developer ID Application: Your Name (TEAMID)' ./build_dmg.shTo notarize:
xcrun notarytool store-credentials subpulse-notary \
--apple-id YOUR_APPLE_ID \
--team-id TEAM_ID \
--password APP_SPECIFIC_PASSWORD
CODE_SIGN_IDENTITY='Developer ID Application: Your Name (TEAMID)' \
NOTARY_PROFILE='subpulse-notary' \
./script/notarize_dmg.shSee ReleaseChecklist.md for the full release flow.
Final local audit:
./script/release_audit.shThe audit runs tests, builds the app, verifies the app bundle, creates and verifies the DMG, checks DMG contents, and reports whether a Developer ID Application certificate is installed.
SubPulse stores subscription data locally. It only uses network access for optional public CBR exchange-rate refreshes and can request Reminders/Notifications permissions for local reminders.
See PrivacyPolicy.md before publishing or sharing a build broadly.



