Installer: RemminaMac.app-Bundle + Drag-and-drop-DMG (Programme-Link), Doku, Fehlerprotokoll
This commit is contained in:
@@ -102,7 +102,10 @@ open Package.swift
|
|||||||
Fertige Binaries liegen unter Git-Releases (`dist/` wird lokal gebaut, nicht committet):
|
Fertige Binaries liegen unter Git-Releases (`dist/` wird lokal gebaut, nicht committet):
|
||||||
```bash
|
```bash
|
||||||
./scripts/build-release.sh
|
./scripts/build-release.sh
|
||||||
|
./scripts/build-app.sh # RemminaMac.app für /Applications
|
||||||
|
./scripts/build-dmg.sh # DMG mit Drag-and-drop auf Programme
|
||||||
# → dist/RemminaMac-<version>-macos-arm64.zip + .sha256
|
# → dist/RemminaMac-<version>-macos-arm64.zip + .sha256
|
||||||
|
# → dist/RemminaMac-<version>-macos-arm64.dmg + .sha256
|
||||||
ls dist/
|
ls dist/
|
||||||
```
|
```
|
||||||
Details: [docs/INSTALL.md](docs/INSTALL.md), [docs/RELEASING.md](docs/RELEASING.md).
|
Details: [docs/INSTALL.md](docs/INSTALL.md), [docs/RELEASING.md](docs/RELEASING.md).
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?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>de</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>RemminaMac</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>RemminaMac</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>xyz.sysdaemon.remmina-mac</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>RemminaMac</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>0.1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>14.0</string>
|
||||||
|
<key>NSHighResolutionCapable</key>
|
||||||
|
<true/>
|
||||||
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
<string>MIT — RemminaMac Contributors</string>
|
||||||
|
<key>LSApplicationCategoryType</key>
|
||||||
|
<string>public.app-category.utilities</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -11,6 +11,7 @@ Stand: 2026-09-21 · Version 0.1.0 · macOS arm64 · Swift 5.9+ · Xcode 15+
|
|||||||
| 2 | 2026-09-21 | `swift build -c release` | keine Fehler, nur lange Link-Zeit (~40 s) | Info | ✅ ok |
|
| 2 | 2026-09-21 | `swift build -c release` | keine Fehler, nur lange Link-Zeit (~40 s) | Info | ✅ ok |
|
||||||
| 3 | 2026-09-21 | Release-Skript | `dist/` war nicht in `.gitignore` → Binary drohte committet zu werden | mittel | ✅ behoben (ignoriert) |
|
| 3 | 2026-09-21 | Release-Skript | `dist/` war nicht in `.gitignore` → Binary drohte committet zu werden | mittel | ✅ behoben (ignoriert) |
|
||||||
| 4 | 2026-09-21 | Gitea-Upload | `GET /api/v1/user` → `401 invalid username, password or token` mit alten Credentials | blockierend (Push/Release) | ✅ behoben — neue Credentials ok, Push + Release v0.1.0 hochgeladen |
|
| 4 | 2026-09-21 | Gitea-Upload | `GET /api/v1/user` → `401 invalid username, password or token` mit alten Credentials | blockierend (Push/Release) | ✅ behoben — neue Credentials ok, Push + Release v0.1.0 hochgeladen |
|
||||||
|
| 5 | 2026-09-21 | App-Bundle + DMG | keine Fehler: `build-app.sh` (Signatur ok), `build-dmg.sh` (UDZO, 200K), Mount-Verifikation ok (App + Applications/Programme-Links) | Info | ✅ ok |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,17 @@ unzip dist/RemminaMac-*-macos-arm64.zip -d /tmp/rmm
|
|||||||
/tmp/rmm/RemminaMac
|
/tmp/rmm/RemminaMac
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Variante D: Installer-DMG (Empfohlen für Endnutzer)
|
||||||
|
1. `RemminaMac-0.1.0-macos-arm64.dmg` aus dem Gitea-Release laden (oder lokal: `./scripts/build-app.sh 0.1.0 && ./scripts/build-dmg.sh 0.1.0`)
|
||||||
|
2. DMG doppelklicken → Finder-Fenster mit `RemminaMac.app` + `Programme`-Link
|
||||||
|
3. `RemminaMac.app` auf `Programme` ziehen → liegt in `/Applications/RemminaMac.app`
|
||||||
|
4. Auswerfen, aus Programme starten. Beim ersten Start: Rechtsklick → Öffnen (ad-hoc-Signatur, kein Apple-Notarization).
|
||||||
|
```bash
|
||||||
|
# Prüfen:
|
||||||
|
spctl -a -vv dist/RemminaMac.app
|
||||||
|
hdiutil verify dist/RemminaMac-0.1.0-macos-arm64.dmg
|
||||||
|
```
|
||||||
|
|
||||||
## RDP-Voraussetzungen
|
## RDP-Voraussetzungen
|
||||||
```bash
|
```bash
|
||||||
# Für volle RDP-Unterstützung:
|
# Für volle RDP-Unterstützung:
|
||||||
|
|||||||
+8
-4
@@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
## Lokal bauen
|
## Lokal bauen
|
||||||
```bash
|
```bash
|
||||||
./scripts/build-release.sh [version]
|
./scripts/build-release.sh [version] # ZIP mit Binary + Docs
|
||||||
|
./scripts/build-app.sh [version] # RemminaMac.app (Bundle, ad-hoc-signiert)
|
||||||
|
./scripts/build-dmg.sh [version] # DMG mit App + Programme-Link
|
||||||
# Beispiel:
|
# Beispiel:
|
||||||
./scripts/build-release.sh 0.1.0
|
./scripts/build-release.sh 0.1.0
|
||||||
|
./scripts/build-app.sh 0.1.0
|
||||||
|
./scripts/build-dmg.sh 0.1.0
|
||||||
# Output:
|
# Output:
|
||||||
# dist/RemminaMac-0.1.0-macos-arm64.zip
|
# dist/RemminaMac-0.1.0-macos-arm64.zip (+ .sha256)
|
||||||
# dist/RemminaMac-0.1.0-macos-arm64.zip.sha256
|
# dist/RemminaMac.app/
|
||||||
# dist/RemminaMac-0.1.0-macos-arm64/RemminaMac (Binary)
|
# dist/RemminaMac-0.1.0-macos-arm64.dmg (+ .sha256)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Was das Skript macht
|
## Was das Skript macht
|
||||||
|
|||||||
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Baut RemminaMac.app (Drag-and-drop-fähiges Bundle) aus dem Release-Binary.
|
||||||
|
# Usage: ./scripts/build-app.sh [version]
|
||||||
|
set -euo pipefail
|
||||||
|
VERSION="${1:-0.1.0}"
|
||||||
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
DIST="$ROOT/dist"
|
||||||
|
BIN="$ROOT/.build/release/RemminaMac"
|
||||||
|
APP="$DIST/RemminaMac.app"
|
||||||
|
|
||||||
|
echo "[build-app] Version: $VERSION"
|
||||||
|
if [ ! -x "$BIN" ]; then
|
||||||
|
echo "[build-app] Kein Release-Binary, baue..."
|
||||||
|
swift build -c release --package-path "$ROOT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "$APP"
|
||||||
|
mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources"
|
||||||
|
cp "$BIN" "$APP/Contents/MacOS/RemminaMac"
|
||||||
|
chmod +x "$APP/Contents/MacOS/RemminaMac"
|
||||||
|
|
||||||
|
# Info.plist mit Version versehen
|
||||||
|
sed "s|<string>0.1.0</string>|<string>$VERSION</string>|" "$ROOT/Resources/Info.plist" > "$APP/Contents/Info.plist"
|
||||||
|
echo -n "APPL????" > "$APP/Contents/PkgInfo"
|
||||||
|
|
||||||
|
# Ad-hoc-Signatur (nötig für Apple Silicon / Gatekeeper-Basis)
|
||||||
|
codesign --force --deep --sign - "$APP" 2>&1 | tail -n 3 || true
|
||||||
|
codesign --verify --verbose=2 "$APP" 2>&1 | tail -n 5 || true
|
||||||
|
|
||||||
|
echo "[build-app] Fertig:"
|
||||||
|
ls -ld "$APP"
|
||||||
|
du -sh "$APP"
|
||||||
Executable
+44
@@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Baut ein Drag-and-drop-DMG: RemminaMac.app + Programme-Symlink.
|
||||||
|
# Nur Bordmittel (hdiutil). Usage: ./scripts/build-dmg.sh [version]
|
||||||
|
set -euo pipefail
|
||||||
|
VERSION="${1:-0.1.0}"
|
||||||
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
DIST="$ROOT/dist"
|
||||||
|
APP="$DIST/RemminaMac.app"
|
||||||
|
VOL="RemminaMac $VERSION"
|
||||||
|
RW_DMG="$DIST/.rw.RemminaMac-$VERSION.dmg"
|
||||||
|
FINAL_DMG="$DIST/RemminaMac-$VERSION-macos-arm64.dmg"
|
||||||
|
|
||||||
|
echo "[build-dmg] Version: $VERSION"
|
||||||
|
[ -d "$APP" ] || { echo "[build-dmg] $APP fehlt — erst ./scripts/build-app.sh $VERSION"; exit 1; }
|
||||||
|
|
||||||
|
rm -f "$RW_DMG" "$FINAL_DMG"
|
||||||
|
# 1. Beschreibbares DMG mit App + Programme-Link erzeugen
|
||||||
|
hdiutil create -volname "$VOL" -srcfolder "$APP" -ov -format UDRW "$RW_DMG" > /dev/null
|
||||||
|
MOUNT="$(hdiutil attach -readwrite -nobrowse "$RW_DMG" | grep -E '/Volumes/' | sed 's/.*\/Volumes\//\/Volumes\//')"
|
||||||
|
echo "[build-dmg] Gemountet: $MOUNT"
|
||||||
|
ln -s /Applications "$MOUNT/Programme" || true
|
||||||
|
ln -s /Applications "$MOUNT/Applications" || true
|
||||||
|
# Optionales Fenster-Layout (schlägt headless ggf. fehl — nicht fatal)
|
||||||
|
osascript <<OSA || true
|
||||||
|
tell application "Finder"
|
||||||
|
tell disk "$VOL"
|
||||||
|
open
|
||||||
|
set current view of container window to icon view
|
||||||
|
set toolbar visible of container window to false
|
||||||
|
set the bounds of container window to {100, 100, 640, 420}
|
||||||
|
delay 1
|
||||||
|
end tell
|
||||||
|
end tell
|
||||||
|
OSA
|
||||||
|
hdiutil detach "$MOUNT" > /dev/null
|
||||||
|
# 2. Komprimieren + Checksumme
|
||||||
|
hdiutil convert "$RW_DMG" -format UDZO -imagekey zlib-level=9 -o "$FINAL_DMG" > /dev/null
|
||||||
|
rm -f "$RW_DMG"
|
||||||
|
shasum -a 256 "$FINAL_DMG" > "$FINAL_DMG.sha256"
|
||||||
|
|
||||||
|
echo "[build-dmg] Fertig:"
|
||||||
|
ls -lh "$FINAL_DMG" "$FINAL_DMG.sha256"
|
||||||
|
cat "$FINAL_DMG.sha256"
|
||||||
|
hdiutil imageinfo "$FINAL_DMG" 2>/dev/null | grep -E 'Format|Size' | head -n 4 || true
|
||||||
Reference in New Issue
Block a user