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 ## XcodeGen
# Entsteht aus project.yml, siehe README — bewusst nicht eingecheckt. # Entsteht aus project.yml, siehe README — bewusst nicht eingecheckt.
*.xcodeproj *.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 *.moved-aside
*.pbxuser *.pbxuser
!default.pbxuser !default.pbxuser

@ -26,5 +26,11 @@
<false/> <false/>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>(c) Samuel Zielke</string> <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> </dict>
</plist> </plist>

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

@ -33,7 +33,7 @@ SIGN_UPDATE="${SPARKLE_SIGN_UPDATE:-./bin/sign_update}"
} }
echo "==> Notarisierung prüfen" 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 "FEHLER: DMG ist nicht notarisiert oder nicht gestapled." >&2
echo "Ein Upload jetzt würde Kollegen eine blockierte App ausliefern." >&2 echo "Ein Upload jetzt würde Kollegen eine blockierte App ausliefern." >&2
exit 1 exit 1

Loading…
Cancel
Save

Powered by TurnKey Linux.