Skip to content

Commit a83c963

Browse files
committed
Initial commit: DadSoft hub app with Windows VM installer and remote control setup
Two-feature macOS toolkit for Apple Silicon: automated Windows 11 VM setup (QEMU/UTM) and AnyDesk remote control configuration. Includes DMG installer with drag-to-Applications background, app icon, CI/CD via GitHub Actions, and MIT license.
0 parents  commit a83c963

19 files changed

Lines changed: 3214 additions & 0 deletions

.github/workflows/release.yml

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
name: Build and Release DadSoft
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
workflow_dispatch:
8+
inputs:
9+
tag:
10+
description: 'Release tag (e.g. v1.0.0)'
11+
required: true
12+
13+
permissions:
14+
contents: write
15+
16+
jobs:
17+
build:
18+
name: Build DadSoft.app
19+
runs-on: macos-14
20+
steps:
21+
- uses: actions/checkout@v4
22+
23+
- name: Select Xcode
24+
run: sudo xcode-select -s /Applications/Xcode_16.app || sudo xcode-select -s /Applications/Xcode.app
25+
26+
- name: Build release binary
27+
working-directory: DadSoft
28+
run: swift build -c release
29+
30+
- name: Create .app bundle
31+
working-directory: DadSoft
32+
run: |
33+
APP="DadSoft.app"
34+
rm -rf "$APP"
35+
mkdir -p "$APP/Contents/MacOS"
36+
mkdir -p "$APP/Contents/Resources"
37+
cp .build/release/DadSoft "$APP/Contents/MacOS/"
38+
cp Resources/Info.plist "$APP/Contents/"
39+
cp Resources/AppIcon.icns "$APP/Contents/Resources/"
40+
41+
# Copy SPM resource bundles (images, etc.)
42+
for bundle in .build/release/*.bundle; do
43+
[ -e "$bundle" ] && cp -r "$bundle" "$APP/Contents/Resources/"
44+
done
45+
46+
# Strip extended attributes that break codesign
47+
xattr -cr "$APP"
48+
49+
- name: Ad-hoc codesign with entitlements
50+
working-directory: DadSoft
51+
run: |
52+
codesign --entitlements Resources/entitlements.plist \
53+
--force --deep -s - DadSoft.app
54+
55+
- name: Verify codesign
56+
working-directory: DadSoft
57+
run: codesign -dvv DadSoft.app
58+
59+
- name: Install create-dmg
60+
run: brew install create-dmg
61+
62+
- name: Create DMG
63+
working-directory: DadSoft
64+
run: |
65+
DMG_NAME="DadSoft-Installer.dmg"
66+
create-dmg \
67+
--volname "DadSoft" \
68+
--background "Resources/dmg_background.png" \
69+
--window-pos 200 120 \
70+
--window-size 660 400 \
71+
--icon-size 160 \
72+
--icon "DadSoft.app" 180 170 \
73+
--app-drop-link 480 170 \
74+
--no-internet-enable \
75+
"$DMG_NAME" \
76+
"DadSoft.app"
77+
echo "DMG_PATH=DadSoft/$DMG_NAME" >> "$GITHUB_ENV"
78+
79+
- name: Determine tag
80+
id: tag
81+
run: |
82+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
83+
echo "version=${{ github.event.inputs.tag }}" >> "$GITHUB_OUTPUT"
84+
else
85+
echo "version=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT"
86+
fi
87+
88+
- name: Create GitHub Release
89+
uses: softprops/action-gh-release@v2
90+
with:
91+
tag_name: ${{ steps.tag.outputs.version }}
92+
name: DadSoft ${{ steps.tag.outputs.version }}
93+
body: |
94+
## How to Install DadSoft
95+
96+
**Step 1.** Click on **DadSoft-Installer.dmg** below to download it.
97+
98+
**Step 2.** Open the downloaded file and drag **DadSoft** into the **Applications** folder.
99+
100+
**Step 3.** Open **Applications** and double-click **DadSoft**. macOS will show a warning — click **Done** (don't move to trash).
101+
102+
**Step 4.** Go to **System Settings → Privacy & Security**, scroll down, and click **Open Anyway** next to the DadSoft message. Click **Open** on the dialog that appears. You only have to do this once. ([Detailed guide with pictures](https://support.apple.com/guide/mac-help/open-a-mac-app-from-an-unknown-developer-mh40616/mac))
103+
104+
That's it! DadSoft will open normally from now on.
105+
106+
---
107+
108+
**What is DadSoft?**
109+
A toolkit for your Mac that helps you set up Windows 11 and remote control access. Everything is step-by-step with big buttons — no Terminal or technical knowledge needed.
110+
111+
**Requirements:** Apple Silicon Mac (M1/M2/M3/M4), macOS 13 or later, internet connection, ~30 GB free space.
112+
files: ${{ env.DMG_PATH }}
113+
draft: false
114+
prerelease: false

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.DS_Store
2+
.build/
3+
DadSoft/.build/
4+
DadSoft/DadSoft.app/
5+
DadSoft.app/
6+
DadSoft/dmg_staging/
7+
DadSoft/*.dmg

DadSoft/Package.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// swift-tools-version: 5.9
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "DadSoft",
6+
platforms: [.macOS(.v13)],
7+
targets: [
8+
.executableTarget(
9+
name: "DadSoft",
10+
path: "Sources/DadSoft",
11+
resources: [.process("Resources")]
12+
),
13+
]
14+
)

DadSoft/Resources/AppIcon.icns

709 KB
Binary file not shown.

DadSoft/Resources/Info.plist

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleName</key>
6+
<string>DadSoft</string>
7+
<key>CFBundleDisplayName</key>
8+
<string>DadSoft — Windows 11 Installer</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>com.dadsoft.windows-installer</string>
11+
<key>CFBundleVersion</key>
12+
<string>1.0</string>
13+
<key>CFBundleShortVersionString</key>
14+
<string>1.0</string>
15+
<key>CFBundlePackageType</key>
16+
<string>APPL</string>
17+
<key>CFBundleExecutable</key>
18+
<string>DadSoft</string>
19+
<key>CFBundleIconFile</key>
20+
<string>AppIcon</string>
21+
<key>LSMinimumSystemVersion</key>
22+
<string>13.0</string>
23+
<key>NSHighResolutionCapable</key>
24+
<true/>
25+
<key>LSApplicationCategoryType</key>
26+
<string>public.app-category.utilities</string>
27+
<key>NSContactsUsageDescription</key>
28+
<string>DadSoft needs access to your contacts so you can select your son to send him remote access info.</string>
29+
</dict>
30+
</plist>
63.8 KB
Loading
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.network.client</key>
6+
<true/>
7+
</dict>
8+
</plist>

0 commit comments

Comments
 (0)