89 lines
4.5 KiB
Markdown
89 lines
4.5 KiB
Markdown
# 🖥️ iKeyMon — macOS App for Monitoring KeyHelp Servers
|
||
|
||
iKeyMon is a native macOS app written in SwiftUI that provides live monitoring for your KeyHelp servers using the KeyHelp API.
|
||
|
||
## ✅ Current Features
|
||
|
||
- Displays key system information from your KeyHelp server via the API
|
||
- Shows CPU load, memory usage, swap usage, and disk usage
|
||
- Periodic ping via `/api/ping` endpoint to check if a server is reachable
|
||
- Colored status indicator for each server in the list
|
||
- Automatic updates:
|
||
- Ping every 10 seconds
|
||
- Server info every 60 seconds
|
||
- Optional automatic update checks that watch the latest Gitea release (with manual “Check now” button and prerelease channel toggle)
|
||
- Organized layout using tabs: General / Resources / Services
|
||
- Stores API keys securely in the macOS Keychain
|
||
- Native macOS look & feel using SwiftUI
|
||
|
||
## 📸 Screenshots
|
||
|
||
| General | Resources | Services | Edit Server |
|
||
|--------|-----------|----------|--------------|
|
||
|  |  |  |  |
|
||
|
||
## 🛠️ Planned Features
|
||
|
||
- Preferences dialog
|
||
- macOS notifications if servers or services become unavailable
|
||
- Optional iOS support if there is demand
|
||
|
||
## 🚀 How to Run
|
||
|
||
Clone the repo and open it in [Xcode](https://developer.apple.com/xcode/). You can build and run the app on macOS 14+.
|
||
|
||
```
|
||
git clone https://git.24unix.net/tracer/iKeyMon
|
||
cd iKeyMon
|
||
open iKeyMon.xcodeproj
|
||
```
|
||
|
||
### Local release build
|
||
|
||
Use the helper script to produce distributables in `dist/`:
|
||
|
||
```bash
|
||
./scripts/build_release.sh
|
||
```
|
||
|
||
It cleans previous artifacts, builds the `Release` configuration, and drops both `iKeyMon-<version>.zip` and `iKeyMon-<version>.dmg` into the `dist` folder (ignored by git). To enable codesigning + notarization, copy `signing.env.example` to `.signing.env`, fill in your Developer ID identity, Apple ID, team ID, and app-specific password. The script sources that file locally (it remains gitignored) and performs signing/notarization when the values are present.
|
||
|
||
To auto-publish the artifacts as a Gitea release, extend `.signing.env` with:
|
||
|
||
```
|
||
GITEA_TOKEN="..."
|
||
GITEA_OWNER="tracer"
|
||
GITEA_REPO="iKeyMon"
|
||
# optional: GITEA_API_BASE="https://git.24unix.net/api/v1"
|
||
# optional: GITEA_TARGET_COMMIT="master"
|
||
# optional: GITEA_PRERELEASE="false" # defaults to true until preferences are done
|
||
```
|
||
|
||
`GITEA_TARGET_COMMIT` defaults to the current `HEAD` commit, so overriding it lets you publish from another branch if needed. Whenever those variables are set, the script will create (or reuse) tag `v<version>` and upload both ZIP and DMG as release assets automatically.
|
||
|
||
### Update checks
|
||
|
||
- The app can automatically query the Gitea release feed on launch (Preferences → Updates → “Automatically check for updates”).
|
||
- “Check for updates” also lives in the main window toolbar; if you're already up to date, you'll get a confirmation alert.
|
||
- Preferences let you opt into prerelease builds (enabled by default for now because current releases are flagged prerelease) and show the latest fetched release number for reference.
|
||
- When a newer build is available, a prompt offers to open the DMG download (or you can revisit the release info inside Preferences).
|
||
|
||
### Versioning workflow
|
||
|
||
- The canonical marketing version lives in `version.json` and follows the format `YY.major.minor` (example: `26.1.2`). Update that file manually whenever you cut a new release branch.
|
||
- The build number is derived automatically from the git commit count on the current branch (you can override it by exporting `BUILD_NUMBER` before running the script if needed).
|
||
- Run `./scripts/sync_version.sh` anytime after editing `version.json` (the release script already calls it). The helper updates `MARKETING_VERSION` and `CURRENT_PROJECT_VERSION` inside `iKeyMon.xcodeproj`, keeping Xcode, the app bundle, and release artifacts in sync.
|
||
- `scripts/build_release.sh` reads the same `version.json` for naming the generated ZIP/DMG, so the artifact names, Info.plist values, and UI displays all stay aligned.
|
||
|
||
## 📦 License
|
||
|
||
MIT — see [LICENSE](LICENSE) for details.
|
||
|
||
> You're free to build and use this app however you want, but please don't upload an unchanged version to the App Store under the same name.
|
||
> Once it's stable, I may release it on the App Store for a small fee (1–2€) to cover my Apple Developer account.
|
||
|
||
## 💬 Feedback
|
||
|
||
Join the discussion (in German) here:
|
||
🔗 https://community.keyhelp.de/viewtopic.php?t=13851
|