- C# 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| native | ||
| source | ||
| .gitignore | ||
| AGENTS.md | ||
| LICENSE | ||
| opencode_plan.md | ||
| README.md | ||
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
dingusppcbinary - 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
--outputwarnings. - The
.appbundle approach is the recommended method for Finder-based GUI launches on macOS.