fix: target fix for sparkle
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ AGENTS.md
|
|||||||
*.app
|
*.app
|
||||||
*.env
|
*.env
|
||||||
*.dmg
|
*.dmg
|
||||||
|
*.delta
|
||||||
|
|||||||
@@ -424,7 +424,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Gaze/Gaze.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Gaze/Gaze.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_TEAM = 6GK4F9L62V;
|
DEVELOPMENT_TEAM = 6GK4F9L62V;
|
||||||
ENABLE_APP_SANDBOX = YES;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
@@ -460,7 +460,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Gaze/Gaze.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Gaze/Gaze.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_TEAM = 6GK4F9L62V;
|
DEVELOPMENT_TEAM = 6GK4F9L62V;
|
||||||
ENABLE_APP_SANDBOX = YES;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
|||||||
40
build_dmg
40
build_dmg
@@ -27,6 +27,7 @@ echo "📦 Building Gaze DMG for v${VERSION} (build ${BUILD_NUMBER})"
|
|||||||
RELEASES_DIR="./releases"
|
RELEASES_DIR="./releases"
|
||||||
APPCAST_OUTPUT="${RELEASES_DIR}/appcast.xml"
|
APPCAST_OUTPUT="${RELEASES_DIR}/appcast.xml"
|
||||||
FEED_URL="https://freno.me/api/Gaze/appcast.xml"
|
FEED_URL="https://freno.me/api/Gaze/appcast.xml"
|
||||||
|
DOWNLOAD_URL_PREFIX="https://freno.me/api/downloads/"
|
||||||
DMG_NAME="Gaze-${VERSION}.dmg"
|
DMG_NAME="Gaze-${VERSION}.dmg"
|
||||||
|
|
||||||
# Find Sparkle generate_appcast tool
|
# Find Sparkle generate_appcast tool
|
||||||
@@ -79,7 +80,7 @@ if [ -n "$SPARKLE_BIN" ] && [ -d "$SPARKLE_BIN" ]; then
|
|||||||
|
|
||||||
# Generate appcast with download URL prefix and key
|
# Generate appcast with download URL prefix and key
|
||||||
"$SPARKLE_BIN/generate_appcast" \
|
"$SPARKLE_BIN/generate_appcast" \
|
||||||
--download-url-prefix "https://freno.me/downloads/" \
|
--download-url-prefix "$DOWNLOAD_URL_PREFIX" \
|
||||||
$KEY_OPTION \
|
$KEY_OPTION \
|
||||||
"$RELEASES_DIR"
|
"$RELEASES_DIR"
|
||||||
|
|
||||||
@@ -106,7 +107,7 @@ if [ -n "$SPARKLE_BIN" ] && [ -d "$SPARKLE_BIN" ]; then
|
|||||||
|
|
||||||
# Add signature to appcast XML
|
# Add signature to appcast XML
|
||||||
# Find the enclosure line and add sparkle:edSignature attribute
|
# Find the enclosure line and add sparkle:edSignature attribute
|
||||||
sed -i '' "s|<enclosure url=\"https://freno.me/downloads/$DMG_NAME\" length=\"[0-9]*\"|<enclosure url=\"https://freno.me/downloads/$DMG_NAME\" sparkle:edSignature=\"$ED_SIGNATURE\" length=\"$FILE_LENGTH\"|g" "$APPCAST_OUTPUT"
|
sed -i '' "s|<enclosure url=\"${DOWNLOAD_URL_PREFIX}$DMG_NAME\" length=\"[0-9]*\"|<enclosure url=\"${DOWNLOAD_URL_PREFIX}$DMG_NAME\" sparkle:edSignature=\"$ED_SIGNATURE\" length=\"$FILE_LENGTH\"|g" "$APPCAST_OUTPUT"
|
||||||
|
|
||||||
# Verify signature was added
|
# Verify signature was added
|
||||||
if grep -q "edSignature" "$APPCAST_OUTPUT"; then
|
if grep -q "edSignature" "$APPCAST_OUTPUT"; then
|
||||||
@@ -126,10 +127,10 @@ if [ -n "$SPARKLE_BIN" ] && [ -d "$SPARKLE_BIN" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
echo "⚠️ Skipping appcast generation (Sparkle tools not found)"
|
echo "⚠️ Skipping appcast generation (Sparkle tools not found)"
|
||||||
echo "To generate appcast manually, run:"
|
echo "To generate appcast manually, run:"
|
||||||
echo " ./generate_appcast --ed-key-file ~/sparkle_private_key_backup.pem --download-url-prefix 'https://freno.me/downloads/' '$RELEASES_DIR'"
|
echo " ./generate_appcast --ed-key-file ~/sparkle_private_key_backup.pem --download-url-prefix '$DOWNLOAD_URL_PREFIX' '$RELEASES_DIR'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Upload to AWS S3 if environment variables are set
|
# Upload to AWS S3 if environment variables are set
|
||||||
@@ -142,17 +143,36 @@ if [ -n "$AWS_ACCESS_KEY_ID" ] && [ -n "$AWS_SECRET_ACCESS_KEY" ] && [ -n "$AWS_
|
|||||||
export AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY"
|
export AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY"
|
||||||
export AWS_DEFAULT_REGION="$AWS_REGION"
|
export AWS_DEFAULT_REGION="$AWS_REGION"
|
||||||
|
|
||||||
# Upload DMG to S3
|
# Upload all DMG files in releases directory
|
||||||
aws s3 cp "$RELEASES_DIR/$DMG_NAME" "s3://$AWS_BUCKET_NAME/downloads/$DMG_NAME" --region "$AWS_REGION"
|
echo "Uploading DMG files..."
|
||||||
|
for dmg_file in "$RELEASES_DIR"/*.dmg; do
|
||||||
|
if [ -f "$dmg_file" ]; then
|
||||||
|
dmg_basename=$(basename "$dmg_file")
|
||||||
|
echo " Uploading $dmg_basename..."
|
||||||
|
aws s3 cp "$dmg_file" "s3://$AWS_BUCKET_NAME/downloads/$dmg_basename" --region "$AWS_REGION"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Upload all delta files in releases directory
|
||||||
|
echo "Uploading delta files..."
|
||||||
|
for delta_file in "$RELEASES_DIR"/*.delta; do
|
||||||
|
if [ -f "$delta_file" ]; then
|
||||||
|
delta_basename=$(basename "$delta_file")
|
||||||
|
echo " Uploading $delta_basename..."
|
||||||
|
aws s3 cp "$delta_file" "s3://$AWS_BUCKET_NAME/downloads/$delta_basename" --region "$AWS_REGION"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# Upload appcast if it exists
|
# Upload appcast if it exists
|
||||||
if [ -f "$APPCAST_OUTPUT" ]; then
|
if [ -f "$APPCAST_OUTPUT" ]; then
|
||||||
|
echo "Uploading appcast..."
|
||||||
aws s3 cp "$APPCAST_OUTPUT" "s3://$AWS_BUCKET_NAME/api/Gaze/appcast.xml" --region "$AWS_REGION"
|
aws s3 cp "$APPCAST_OUTPUT" "s3://$AWS_BUCKET_NAME/api/Gaze/appcast.xml" --region "$AWS_REGION"
|
||||||
echo "✅ Appcast uploaded to S3"
|
echo "✅ Appcast uploaded to S3"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "✅ Upload complete!"
|
echo "✅ Upload complete!"
|
||||||
echo " DMG: s3://$AWS_BUCKET_NAME/downloads/$DMG_NAME"
|
echo " DMG files: s3://$AWS_BUCKET_NAME/downloads/*.dmg"
|
||||||
|
echo " Delta files: s3://$AWS_BUCKET_NAME/downloads/*.delta"
|
||||||
echo " Appcast: s3://$AWS_BUCKET_NAME/api/Gaze/appcast.xml"
|
echo " Appcast: s3://$AWS_BUCKET_NAME/api/Gaze/appcast.xml"
|
||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
@@ -168,7 +188,7 @@ if [ -f "$APPCAST_OUTPUT" ]; then
|
|||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
echo "Next steps:"
|
echo "Next steps:"
|
||||||
echo " 1. Upload DMG to: https://freno.me/downloads/$DMG_NAME"
|
echo " 1. Upload DMG to: ${DOWNLOAD_URL_PREFIX}$DMG_NAME"
|
||||||
echo " 2. Upload appcast to: $FEED_URL"
|
echo " 2. Upload appcast to: $FEED_URL"
|
||||||
echo " 3. Verify appcast is accessible and valid"
|
echo " 3. Verify appcast is accessible and valid"
|
||||||
echo " 4. Test update from previous version"
|
echo " 4. Test update from previous version"
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
@@ -2,13 +2,24 @@
|
|||||||
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
|
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
|
||||||
<channel>
|
<channel>
|
||||||
<title>Gaze</title>
|
<title>Gaze</title>
|
||||||
|
<item>
|
||||||
|
<title>0.2.1</title>
|
||||||
|
<pubDate>Sun, 11 Jan 2026 19:58:11 -0500</pubDate>
|
||||||
|
<sparkle:version>2</sparkle:version>
|
||||||
|
<sparkle:shortVersionString>0.2.1</sparkle:shortVersionString>
|
||||||
|
<sparkle:minimumSystemVersion>14.6</sparkle:minimumSystemVersion>
|
||||||
|
<enclosure url="https://freno.me/api/downloads/Gaze-0.2.1.dmg" length="4832775" type="application/octet-stream" sparkle:edSignature="rIMuezCOzKhKKZV+HgJV7LNoXFkjVse82toPgSYNfp2YWO8EITVaCBr4ZP2wqXZlRfdE4J6r9BDewbkKxkf7AQ=="/>
|
||||||
|
<sparkle:deltas>
|
||||||
|
<enclosure url="https://freno.me/api/downloads/Gaze2-1.delta" sparkle:deltaFrom="1" length="94254" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="858560" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,uk" sparkle:edSignature="qfxSfqD9iVJ7GVL19V8T4OuOTz0ZgqJNceBH6W+dwoKel1R+BTPkU9Ia8xR12v07GoXkyyqc+ba79OOL7jIpBw=="/>
|
||||||
|
</sparkle:deltas>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<title>0.1.1</title>
|
<title>0.1.1</title>
|
||||||
<pubDate>Sun, 11 Jan 2026 18:07:02 -0500</pubDate>
|
<pubDate>Sun, 11 Jan 2026 18:07:02 -0500</pubDate>
|
||||||
<sparkle:version>1</sparkle:version>
|
<sparkle:version>1</sparkle:version>
|
||||||
<sparkle:shortVersionString>0.2.0</sparkle:shortVersionString>
|
<sparkle:shortVersionString>0.2.0</sparkle:shortVersionString>
|
||||||
<sparkle:minimumSystemVersion>14.6</sparkle:minimumSystemVersion>
|
<sparkle:minimumSystemVersion>14.6</sparkle:minimumSystemVersion>
|
||||||
<enclosure url="https://freno.me/downloads/Gaze-0.2.0.dmg" length="4831161" type="application/octet-stream" sparkle:edSignature="zCEmiiO4Q7HV7uGbI/CQcfJElm1uqrYorznE6uCWaKm/Zg1bUrWaeTRf9+Uv9f9+0iptyiS2FNdglLQB8RKkCA=="/>
|
<enclosure url="https://freno.me/api/downloads/Gaze-0.2.0.dmg" length="4831161" type="application/octet-stream" sparkle:edSignature="zCEmiiO4Q7HV7uGbI/CQcfJElm1uqrYorznE6uCWaKm/Zg1bUrWaeTRf9+Uv9f9+0iptyiS2FNdglLQB8RKkCA=="/>
|
||||||
</item>
|
</item>
|
||||||
</channel>
|
</channel>
|
||||||
</rss>
|
</rss>
|
||||||
Reference in New Issue
Block a user