$ show dungngminh/simutil
SimUtil is a Dart-based terminal UI/CLI for managing iOS simulators and Xcode Derived Data. It wraps `xcrun simctl` to list, boot, shut down, install, launch, and interact with simulator devices, and adds conveniences like showing/cleaning Derived Data. The app is operated entirely from the terminal and stores user preferences in `~/.simutil/settings.yaml`, including a `plugins:` section for custom commands. Architecturally it separates terminal UI components (`lib/components`) from services (`lib/services`) such as `CommandExec` (a shell-command abstraction), `UserConfig` (YAML settings with first-run defaults and scalar merge), and Derived Data helpers. A `tool/generate_changelog.dart` code generator parses `CHANGELOG.md` and emits typed Dart data so the app can show post-update changelog dialogs. Tests cover the changelog generator and config file behavior, and CI runs build/install verification across platforms.
The LLM identified 3 files worth highlighting for reuse:
Parses CHANGELOG.md and generates a typed Dart source file (lib/data/changelog_entries.dart) so the app can display changelog entries without runtime Markdown parsing. Self-contained and testable; the pattern can be reused in any Dart project that wants compile-time-safe generated content from a Markdown file.
Loads and merges user settings from ~/.simutil/settings.yaml, creating a default YAML template on first run without overwriting existing config. Exposes a scalar merge helper and supports an override path for tests. This is a clean, reusable pattern for typed user configuration with defaults and safe merging.
Abstracts shell/process execution behind a small interface so production code can run xcrun simctl commands while tests inject a fake that records every invocation. This is a textbook dependency-inversion pattern for CLI tools and is easily extracted.