Simple UI for configuring and launching Dingusppc
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-07 19:39:19 +01:00
native initial version 2026-09-07 19:16:52 +01:00
source Added a copyright banner to all .cs files 2026-09-07 19:39:19 +01:00
.gitignore initial version 2026-09-07 19:16:52 +01:00
AGENTS.md initial version 2026-09-07 19:16:52 +01:00
LICENSE Initial commit 2026-09-05 21:20:27 +00:00
opencode_plan.md feat: implement Phase 4 Persistence and Storage - add JSON file persistence for machines and settings, auto-save/load, export/import functionality 2026-09-07 19:21:55 +01:00
README.md Updated the readme to include explanation and some of the stuff to do with publishig with AOT 2026-09-07 19:26:05 +01:00

dingus-ui

Simple UI for configuring and launching Dingusppc.

Overview

This project is a desktop launcher UI for the Dingus PPC emulator. It allows users to:

  • configure emulator settings
  • define and manage machine profiles
  • set the path to the dingusppc binary
  • launch the emulator with a generated command line
  • persist machine and app configuration locally

Requirements

  • .NET 10 SDK
  • macOS or Windows desktop environment for native app packaging
  • A Dingus PPC executable built for the target platform

Running locally

From the repository root:

dotnet run --project source/dingus-ui/dingus-ui.csproj

Publishing for macOS

Publish the app as a self-contained macOS binary:

dotnet publish source/dingus-ui/dingus-ui.csproj -c Release -r osx-arm64 --self-contained true -o source/out/osx-arm64

This produces a normal self-contained app with native Avalonia/Skia libraries next to the executable.

Important note about single-file publishing

Single-file publishing is valid for executables, but for Avalonia + Skia on macOS it is not the recommended packaging model unless you explicitly enable native library self-extraction. If you use single-file publishing, include:

dotnet publish source/dingus-ui/dingus-ui.csproj -c Release -r osx-arm64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o source/out/osx-arm64

If you do not want a single-file build, omit both PublishSingleFile=true and IncludeNativeLibrariesForSelfExtract=true.

Launching without a Terminal window on macOS

The plain executable generated by dotnet publish is a raw binary and will usually open a Terminal window when launched from Finder. To get a true GUI app experience, wrap the published output in a macOS .app bundle.

The project includes an example bundle layout in source/out/osx-arm64-app after packaging. The expected structure is:

source/out/osx-arm64-app/
  Contents/
    Info.plist
    MacOS/
      dingus-ui
      libSkiaSharp.dylib
      libHarfBuzzSharp.dylib
      libAvaloniaNative.dylib

Create the bundle manually if needed:

mkdir -p source/out/osx-arm64-app/Contents/MacOS
cp -R source/out/osx-arm64/* source/out/osx-arm64-app/Contents/MacOS/
cat > source/out/osx-arm64-app/Contents/Info.plist <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleExecutable</key>
    <string>dingus-ui</string>
    <key>CFBundleIdentifier</key>
    <string>com.dingusui.app</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>dingus-ui</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSMinimumSystemVersion</key>
    <string>13.0</string>
    <key>LSUIElement</key>
    <false/>
    <key>NSHighResolutionCapable</key>
    <true/>
</dict>
</plist>
EOF
chmod +x source/out/osx-arm64-app/Contents/MacOS/dingus-ui

Then launch the app bundle with:

open source/out/osx-arm64-app

This launches the bundle as a macOS app rather than an executable that opens a Terminal window.

Notes

  • Publish the app project directly rather than the solution to avoid solution-level --output warnings.
  • The .app bundle approach is the recommended method for Finder-based GUI launches on macOS.