diff --git a/appcast.xml b/appcast.xml
index 067ef64..2dd92aa 100644
--- a/appcast.xml
+++ b/appcast.xml
@@ -4,11 +4,11 @@
Meetingnotes
-
1.0.1
- Mon, 14 Jul 2025 18:29:29 -0400
+ Mon, 14 Jul 2025 18:59:45 -0400
6
1.0.1
14.0
-
+
-
1.0.0
diff --git a/releases/Meetingnotes-1.0.1.dmg b/releases/Meetingnotes-1.0.1.dmg
index 53c0bbc..7a909ef 100644
Binary files a/releases/Meetingnotes-1.0.1.dmg and b/releases/Meetingnotes-1.0.1.dmg differ
diff --git a/releases/Meetingnotes-1.0.1.zip b/releases/Meetingnotes-1.0.1.zip
new file mode 100644
index 0000000..d8e95c4
Binary files /dev/null and b/releases/Meetingnotes-1.0.1.zip differ
diff --git a/scripts/build_release.sh b/scripts/build_release.sh
index 1def27f..349e33e 100755
--- a/scripts/build_release.sh
+++ b/scripts/build_release.sh
@@ -173,6 +173,19 @@ create-dmg \
echo "✅ DMG created: $RELEASES_DIR/$DMG_NAME"
+# 🔖 -------------------------------------------------
+# NEW: Create a ZIP archive for Sparkle auto-updates
+# --------------------------------------------------
+ZIP_NAME="${APP_NAME}-${VERSION}.zip"
+
+echo "📦 Creating ZIP archive for Sparkle auto-updates..."
+# Keep parent so the archive extracts directly to the app bundle
+# ditto preserves resource forks and extended attributes that Gatekeeper expects
+
+ditto -c -k --keepParent "$APP_PATH" "$RELEASES_DIR/$ZIP_NAME"
+
+echo "✅ ZIP created: $RELEASES_DIR/$ZIP_NAME"
+
# 📡 Notarization (required for all production builds)
echo "📡 Starting notarization process..."
@@ -198,24 +211,25 @@ else
fi
# Generate appcast with signatures - only process current version to avoid URL corruption
-echo "📡 Generating appcast with EdDSA signatures..."
+# -----------------------------------------------------------------------------
+# We only want the .zip in our appcast. Move DMGs out temporarily so they are
+# not picked up by generate_appcast.
-# Temporarily move old DMGs to avoid URL corruption
-echo "📦 Temporarily moving old DMGs to preserve their URLs..."
-mkdir -p "$RELEASES_DIR/temp_old"
-find "$RELEASES_DIR" -name "*.dmg" ! -name "$DMG_NAME" -exec mv {} "$RELEASES_DIR/temp_old/" \;
+echo "📡 Generating appcast with EdDSA signatures (ZIP only)..."
+
+echo "📦 Temporarily moving DMGs so generate_appcast only sees ZIP archives..."
+mkdir -p "$RELEASES_DIR/temp_dmg"
+find "$RELEASES_DIR" -name "*.dmg" -exec mv {} "$RELEASES_DIR/temp_dmg/" \;
-# Generate appcast (will only see current DMG + existing appcast.xml)
/opt/homebrew/Caskroom/sparkle/2.7.1/bin/generate_appcast "$RELEASES_DIR" \
--download-url-prefix "https://github.com/owengretzinger/meetingnotes/releases/download/v${VERSION}/" \
-o "appcast.xml"
-# Move old DMGs back
-echo "📦 Restoring old DMGs..."
-if [ -d "$RELEASES_DIR/temp_old" ] && [ "$(ls -A "$RELEASES_DIR/temp_old")" ]; then
- mv "$RELEASES_DIR/temp_old"/* "$RELEASES_DIR/"
+echo "📦 Restoring DMGs..."
+if [ -d "$RELEASES_DIR/temp_dmg" ] && [ "$(ls -A "$RELEASES_DIR/temp_dmg")" ]; then
+ mv "$RELEASES_DIR/temp_dmg"/* "$RELEASES_DIR/"
fi
-rmdir "$RELEASES_DIR/temp_old"
+rmdir "$RELEASES_DIR/temp_dmg"
echo "📝 Note: Make sure to upload the DMG to GitHub releases with the correct tag (v${VERSION})"
@@ -225,10 +239,11 @@ echo "✅ Appcast generated: appcast.xml"
echo ""
echo "📊 Release Summary:"
echo " Version: $VERSION"
+echo " ZIP: $ZIP_NAME ($(du -h "$RELEASES_DIR/$ZIP_NAME" | cut -f1))"
echo " DMG: $DMG_NAME ($(du -h "$RELEASES_DIR/$DMG_NAME" | cut -f1))"
-echo " Location: $RELEASES_DIR/$DMG_NAME"
+echo " Location: $RELEASES_DIR"
echo " Code Signing: ✅ Production (Owen's Developer ID)"
-echo " Notarization: ✅ Complete"
+echo " Notarization (DMG): ✅ Complete"
echo ""
echo "🎉 Production release ready! Next steps:"
echo " 1. Test the DMG on another Mac"