diff --git a/01_Project/syncthingStatus/Info.plist b/01_Project/syncthingStatus/Info.plist
index 61a3803..397851c 100644
--- a/01_Project/syncthingStatus/Info.plist
+++ b/01_Project/syncthingStatus/Info.plist
@@ -20,5 +20,7 @@
eH6joIk0G+i5Hur25e/9B4hF3jN8q5lBqXzMxuOfcxw=
SUEnableAutomaticChecks
+ SUEnableInstallerLauncherService
+
diff --git a/01_Project/syncthingStatus/syncthingStatus.entitlements b/01_Project/syncthingStatus/syncthingStatus.entitlements
index 0c67376..77493f9 100644
--- a/01_Project/syncthingStatus/syncthingStatus.entitlements
+++ b/01_Project/syncthingStatus/syncthingStatus.entitlements
@@ -1,5 +1,11 @@
-
+
+ com.apple.security.temporary-exception.mach-lookup.global-name
+
+ $(PRODUCT_BUNDLE_IDENTIFIER)-spks
+ $(PRODUCT_BUNDLE_IDENTIFIER)-spki
+
+
diff --git a/README.md b/README.md
index e83969d..6735f9f 100644
--- a/README.md
+++ b/README.md
@@ -174,7 +174,7 @@ Or visit the [Releases page](https://github.com/Xpycode/syncthingStatus/releases
> **Note**: The app is notarized by Apple and will run without security warnings.
-> **Auto-update troubleshooting**: if the in-app update fails with _"An error occurred while launching the installer"_, the bundle on disk is at a malformed path (e.g. `/Applications/syncthingStatus.app.1` or any name without the `.app` suffix — usually a Finder rename mishap). macOS won't dispatch Sparkle's XPC services unless the parent bundle ends in `.app`. Run [`tools/repair-install.sh`](tools/repair-install.sh) for a clean re-install that preserves your settings, or just trash the malformed bundle in `/Applications/` and drag-install fresh from the DMG.
+> **Auto-update troubleshooting**: if the in-app update fails with _"An error occurred while launching the installer"_, the bundle on disk may be at a malformed path (e.g. `/Applications/syncthingStatus.app.1` or any name without the `.app` suffix — usually a Finder rename mishap). macOS won't dispatch Sparkle's XPC services unless the parent bundle ends in `.app`. Sandboxed builds also need Sparkle's installer launcher service and Mach lookup entitlements; release notarization now asserts both so future packages fail fast instead of shipping a broken updater. Run [`tools/repair-install.sh`](tools/repair-install.sh) for a clean re-install that preserves your settings, or just trash the malformed bundle in `/Applications/` and drag-install fresh from the DMG.
### Build from Source
1. Clone this repository:
diff --git a/tools/notarize.sh b/tools/notarize.sh
index 946ddf9..82c0381 100755
--- a/tools/notarize.sh
+++ b/tools/notarize.sh
@@ -117,6 +117,20 @@ for key in com.apple.security.app-sandbox com.apple.security.network.client; do
done
echo " ✓ sandbox + network.client entitlements intact"
+# Sandboxed Sparkle apps must opt into the installer launcher service and allow
+# Sparkle to communicate with its installer/status helpers via temporary Mach lookup.
+bundle_id="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$APP/Contents/Info.plist")"
+installer_launcher="$(/usr/libexec/PlistBuddy -c 'Print :SUEnableInstallerLauncherService' "$APP/Contents/Info.plist" 2>/dev/null || true)"
+if [ "$installer_launcher" != "true" ]; then
+ echo "error: SUEnableInstallerLauncherService is not true; sandboxed Sparkle installs will fail" >&2
+ exit 1
+fi
+for service in "${bundle_id}-spks" "${bundle_id}-spki"; do
+ printf '%s' "$ent" | grep -Fq "$service" \
+ || { echo "error: exported app lost Sparkle Mach lookup entitlement $service" >&2; exit 1; }
+done
+echo " ✓ Sparkle sandbox installer configuration intact"
+
# --- 3. submit to the notary service ---------------------------------------
mkdir -p "$OUT_DIR"
rm -f "$ZIP"