Schritt 6: Developer-ID-Signierung, Notarisierung und Sparkle einrichten

Release-Konfiguration in project.yml auf Manual + Developer-ID-
Application-Zertifikat + Team-ID (XY4C2RG3L5) umgestellt. Debug bleibt
ad-hoc signiert für schnelle lokale Builds. Sparkle 2.10.0 als Package
eingebunden, SUFeedURL/SUPublicEDKey/SUEnableAutomaticChecks gesetzt.
Der private Sparkle-Schlüssel liegt ausschließlich im Schlüsselbund
(generate_keys), nirgendwo im Repo.

scripts/publish-release.sh: Bugfix im Notarisierungs-Check — spctl
gibt bei Erfolg ohne -v-Flag gar keinen Text aus, wodurch
"grep -q accepted" nie anschlug und jede gültige DMG fälschlich als
nicht notarisiert gemeldet worden wäre.

Erste Beta-DMG gebaut und end-to-end verifiziert: archiviert, mit
Developer-ID signiert (inkl. aller eingebetteten Sparkle-XPC-Dienste),
per create-dmg verpackt, bei Apple eingereicht und akzeptiert,
gestapelt, per spctl gegengeprüft und direkt vom gemounteten DMG
gestartet — läuft ohne Gatekeeper-Warnung.

bin/ (heruntergeladene Sparkle-CLI-Tools) und dist/ (Build-Artefakte)
sind bewusst nicht eingecheckt.
main
Samuel Zielke 1 month ago
parent 660ee62153
commit 087c0f9924

8
.gitignore vendored

@ -17,6 +17,14 @@ DerivedData/
## XcodeGen
# Entsteht aus project.yml, siehe README — bewusst nicht eingecheckt.
*.xcodeproj
## Sparkle-Tools
# generate_keys/sign_update aus der offiziellen Release-Distribution,
# lokal heruntergeladen (siehe scripts/publish-release.sh) — kein Quellcode.
/bin/
## Release-Artefakte
dist/
*.moved-aside
*.pbxuser
!default.pbxuser

@ -26,5 +26,11 @@
<false/>
<key>NSHumanReadableCopyright</key>
<string>(c) Samuel Zielke</string>
<key>SUEnableAutomaticChecks</key>
<true/>
<key>SUFeedURL</key>
<string>https://update.zielke.studio/droptwo/appcast.xml</string>
<key>SUPublicEDKey</key>
<string>2Oe3MbYRBVMMm0EtwTdZaHVKGOOIzgBWfI94CFkPQOg=</string>
</dict>
</plist>

@ -11,20 +11,21 @@ settings:
SWIFT_VERSION: "5.9"
MARKETING_VERSION: "0.1.0"
CURRENT_PROJECT_VERSION: "1"
# Ad-hoc-Signatur: laeuft lokal auf dem eigenen Rechner, braucht keine Team-ID.
# Fuer den ersten echten Release auf Manual + DEVELOPMENT_TEAM umstellen.
CODE_SIGN_STYLE: Automatic
CODE_SIGN_IDENTITY: "-"
configs:
Debug:
# Ad-hoc-Signatur: laeuft lokal auf dem eigenen Rechner, braucht keine Team-ID.
CODE_SIGN_STYLE: Automatic
CODE_SIGN_IDENTITY: "-"
Release:
ENABLE_HARDENED_RUNTIME: YES # Pflicht fuer die Notarisierung
CODE_SIGN_STYLE: Manual
CODE_SIGN_IDENTITY: "Developer ID Application"
DEVELOPMENT_TEAM: XY4C2RG3L5
# Sparkle kommt erst in Schritt 6 dazu. Bis dahin auskommentiert --
# das haelt fruehe Builds schnell und die Signierung unkompliziert.
# packages:
# Sparkle:
# url: https://github.com/sparkle-project/Sparkle
# from: "2.6.0"
packages:
Sparkle:
url: https://github.com/sparkle-project/Sparkle
from: "2.10.0"
targets:
@ -46,7 +47,7 @@ targets:
- Sources/DropTwo
dependencies:
- target: DropTwoCore
# - package: Sparkle
- package: Sparkle
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: dev.zielke.droptwo
@ -60,10 +61,9 @@ targets:
LSMinimumSystemVersion: "13.0"
LSUIElement: false # true = reiner Menu-Bar-Betrieb ohne Dock-Icon
NSHumanReadableCopyright: "(c) Samuel Zielke"
# Sparkle-Schluessel und Feed-URL folgen in Schritt 6:
# SUFeedURL: https://.../droptwo/appcast.xml
# SUPublicEDKey: ...
# SUEnableAutomaticChecks: true
SUFeedURL: https://update.zielke.studio/droptwo/appcast.xml
SUPublicEDKey: 2Oe3MbYRBVMMm0EtwTdZaHVKGOOIzgBWfI94CFkPQOg=
SUEnableAutomaticChecks: true
# Pruefstein fuer den Kern: echte Datei durchjagen, bevor Oberflaeche entsteht.
droptwo-cli:

@ -33,7 +33,7 @@ SIGN_UPDATE="${SPARKLE_SIGN_UPDATE:-./bin/sign_update}"
}
echo "==> Notarisierung prüfen"
if ! spctl -a -t open --context context:primary-signature "$DMG" 2>&1 | grep -q accepted; then
if ! spctl -a -v -t open --context context:primary-signature "$DMG" 2>&1 | grep -q accepted; then
echo "FEHLER: DMG ist nicht notarisiert oder nicht gestapled." >&2
echo "Ein Upload jetzt würde Kollegen eine blockierte App ausliefern." >&2
exit 1

Loading…
Cancel
Save

Powered by TurnKey Linux.