chore: v1.0.4

This commit is contained in:
Owen Gretzinger
2025-07-16 09:15:22 -04:00
parent 960beecf4f
commit b35b79e904
3 changed files with 82 additions and 31 deletions
+4 -4
View File
@@ -280,7 +280,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 8; CURRENT_PROJECT_VERSION = 9;
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
DEVELOPMENT_TEAM = ML6HYR5LUR; DEVELOPMENT_TEAM = ML6HYR5LUR;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
@@ -294,7 +294,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 14.0; MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 1.0.3; MARKETING_VERSION = 1.0.4;
ONLY_ACTIVE_ARCH = NO; ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = owen.meetingnotes; PRODUCT_BUNDLE_IDENTIFIER = owen.meetingnotes;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -315,7 +315,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 8; CURRENT_PROJECT_VERSION = 9;
DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"meetingnotes/Preview Content\"";
DEVELOPMENT_TEAM = ML6HYR5LUR; DEVELOPMENT_TEAM = ML6HYR5LUR;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
@@ -329,7 +329,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 14.0; MACOSX_DEPLOYMENT_TARGET = 14.0;
MARKETING_VERSION = 1.0.3; MARKETING_VERSION = 1.0.4;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = owen.meetingnotes; PRODUCT_BUNDLE_IDENTIFIER = owen.meetingnotes;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
+18 -21
View File
@@ -2,16 +2,29 @@
<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>Meetingnotes</title> <title>Meetingnotes</title>
<item>
<title>1.0.4</title>
<pubDate>Wed, 16 Jul 2025 09:02:52 -0400</pubDate>
<sparkle:version>9</sparkle:version>
<sparkle:shortVersionString>1.0.4</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.4/Meetingnotes-1.0.4.zip" length="9518446" type="application/octet-stream" sparkle:edSignature="aWBAf2cnvhAf1WBEa9oUHzL+N5RBph8Xbsh/XXBhR7wo9Vkeh51CqBh+3pjWJqxaDGxb3aimgydjIKrCVVpyAw==" />
<sparkle:deltas>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.4/Meetingnotes9-8.delta" sparkle:deltaFrom="8" length="2038454" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="AUNQbGbKk3a7Phzxfm1yEQQ6KuaqvX0NASF7u657DtdkcTbxvBqPBon/JKaZIEVtlnq+qDyjfcUpTY1S1Cj0Cw==" />
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.4/Meetingnotes9-7.delta" sparkle:deltaFrom="7" length="2027690" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="+libxIpQFVA0lsctoJzmH8dNGCcHZLE8agqRKMzbCN1+fRA8Zq0hrvIAxvrpyCim1StmOtvh/zWKz+483SyJBw==" />
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.4/Meetingnotes9-6.delta" sparkle:deltaFrom="6" length="2022146" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="LLFyZQK3TLSNvD8RCpQKNmKfefg8mp9Z7J1uw09zaYhahjSa+hV1jbzkSMIEG6P6ncBScBfmOrhhuimAG6OWBw==" />
</sparkle:deltas>
</item>
<item> <item>
<title>1.0.3</title> <title>1.0.3</title>
<pubDate>Tue, 15 Jul 2025 13:35:21 -0400</pubDate> <pubDate>Tue, 15 Jul 2025 13:35:21 -0400</pubDate>
<sparkle:version>8</sparkle:version> <sparkle:version>8</sparkle:version>
<sparkle:shortVersionString>1.0.3</sparkle:shortVersionString> <sparkle:shortVersionString>1.0.3</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion> <sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.3/Meetingnotes-1.0.3.zip" length="9475086" type="application/octet-stream" sparkle:edSignature="YPaFIk/x98RBfM8qgLMPVYtIRAqtrLZ1Bl8Z4amgG7rcLcKEhP9XeTQ0CTlNQcaTp9UOJjhbW50Qi1jUpieqCg=="/> <enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.3/Meetingnotes-1.0.3.zip" length="9475086" type="application/octet-stream" sparkle:edSignature="YPaFIk/x98RBfM8qgLMPVYtIRAqtrLZ1Bl8Z4amgG7rcLcKEhP9XeTQ0CTlNQcaTp9UOJjhbW50Qi1jUpieqCg==" />
<sparkle:deltas> <sparkle:deltas>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.3/Meetingnotes8-7.delta" sparkle:deltaFrom="7" length="300426" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="wrGn8nljzn8rmi0K2XhcH8y+p0BTD6q3Hbtzsq0yQd3ynIjPqS2VieKYYvmlHKFtl8kZL39JwJEixsAuUs7DAw=="/> <enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.3/Meetingnotes8-7.delta" sparkle:deltaFrom="7" length="300426" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="wrGn8nljzn8rmi0K2XhcH8y+p0BTD6q3Hbtzsq0yQd3ynIjPqS2VieKYYvmlHKFtl8kZL39JwJEixsAuUs7DAw==" />
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.3/Meetingnotes8-6.delta" sparkle:deltaFrom="6" length="642614" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="0TSiWwSQR6ECWn8iX6OjLU693zDwoX9NDuX3mKDiELDgpYgx1nFuVxB7O0/O41pYyyzgMCbhDJ6VnbO3zWnbBw=="/> <enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.3/Meetingnotes8-6.delta" sparkle:deltaFrom="6" length="642614" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="0TSiWwSQR6ECWn8iX6OjLU693zDwoX9NDuX3mKDiELDgpYgx1nFuVxB7O0/O41pYyyzgMCbhDJ6VnbO3zWnbBw==" />
</sparkle:deltas> </sparkle:deltas>
</item> </item>
<item> <item>
@@ -20,26 +33,10 @@
<sparkle:version>7</sparkle:version> <sparkle:version>7</sparkle:version>
<sparkle:shortVersionString>1.0.2</sparkle:shortVersionString> <sparkle:shortVersionString>1.0.2</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion> <sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.2/Meetingnotes-1.0.2.zip" length="9453364" type="application/octet-stream" sparkle:edSignature="N2KYxZ5WuId3x3lkhbX6MMlzl1eu3ZJdpN3y4w7ANYd1HMFKgURHbsXbTUn7lh1So2gAulMj2omRkT7oQ0o/Ag=="/> <enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.2/Meetingnotes-1.0.2.zip" length="9453364" type="application/octet-stream" sparkle:edSignature="N2KYxZ5WuId3x3lkhbX6MMlzl1eu3ZJdpN3y4w7ANYd1HMFKgURHbsXbTUn7lh1So2gAulMj2omRkT7oQ0o/Ag==" />
<sparkle:deltas> <sparkle:deltas>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.2/Meetingnotes7-6.delta" sparkle:deltaFrom="6" length="358238" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="FtVwt5RO1qg2KP39D4XJy9JEucBsJsXujejMgRsyW8v4M0KNruGi0RbW+K1p7ds3c1b96XV7m4z4vQa128H6Bg=="/> <enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.2/Meetingnotes7-6.delta" sparkle:deltaFrom="6" length="358238" type="application/octet-stream" sparkle:deltaFromSparkleExecutableSize="864832" sparkle:deltaFromSparkleLocales="de,he,ar,el,ja,fa,en" sparkle:edSignature="FtVwt5RO1qg2KP39D4XJy9JEucBsJsXujejMgRsyW8v4M0KNruGi0RbW+K1p7ds3c1b96XV7m4z4vQa128H6Bg==" />
</sparkle:deltas> </sparkle:deltas>
</item> </item>
<item>
<title>1.0.1</title>
<pubDate>Mon, 14 Jul 2025 18:59:45 -0400</pubDate>
<sparkle:version>6</sparkle:version>
<sparkle:shortVersionString>1.0.1</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.2/Meetingnotes-1.0.1.zip" length="9453114" type="application/octet-stream" sparkle:edSignature="mZUkDI01sjMNOG/GxOaE8ZyS706PkxDxe+4v16CyYP4/gvZdLWtZN8oB8+hfwPXBGk8aQ9Y4cOGWkHjswcYkAg=="/>
</item>
<item>
<title>1.0.0</title>
<pubDate>Mon, 14 Jul 2025 16:22:59 -0400</pubDate>
<sparkle:version>5</sparkle:version>
<sparkle:shortVersionString>1.0.0</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/owengretzinger/meetingnotes/releases/download/v1.0.0/Meetingnotes-1.0.0.dmg" length="9243712" type="application/octet-stream" sparkle:edSignature="JvjYtW9HvTtb1ILqSUieeFL8Na4d6NlnLLX4uYbkDRJd+B9vOcL5bkZYZQFWbzTFSoctatVeC9CQqocH9yjRDw=="/>
</item>
</channel> </channel>
</rss> </rss>
+60 -6
View File
@@ -275,13 +275,16 @@ rm -rf "$APPCAST_WORK"
mkdir -p "$APPCAST_WORK" mkdir -p "$APPCAST_WORK"
echo "🔗 Staging ZIP archives for appcast generation..." echo "🔗 Staging ZIP archives for appcast generation..."
echo "[DEBUG] Staging ZIP and delta archives with directory structure..." echo "[DEBUG] Staging all ZIP archives from all versions..."
rsync -avm --include='*/' --include='*.zip' --include='*.delta' --exclude='*' "$RELEASES_DIR/" "$APPCAST_WORK/" find "$RELEASES_DIR" -maxdepth 2 -type f -name "*.zip" -exec cp {} "$APPCAST_WORK"/ \;
echo "[DEBUG] Staging all existing delta files to preserve them..."
find "$RELEASES_DIR" -maxdepth 2 -type f -name "*.delta" -exec cp {} "$APPCAST_WORK"/ \;
echo "[DEBUG] Appcast workdir contents:" echo "[DEBUG] Appcast workdir contents:"
ls -la "$APPCAST_WORK" ls -la "$APPCAST_WORK"
echo "[DEBUG] Running generate_appcast..." echo "[DEBUG] Running generate_appcast..."
/opt/homebrew/Caskroom/sparkle/2.7.1/bin/generate_appcast "$APPCAST_WORK" \ /opt/homebrew/Caskroom/sparkle/2.7.1/bin/generate_appcast "$APPCAST_WORK" \
--download-url-prefix "https://github.com/owengretzinger/meetingnotes/releases/download/" \
-o "appcast.xml" 2>&1 | tee "$BUILD_DIR/generate_appcast.log" -o "appcast.xml" 2>&1 | tee "$BUILD_DIR/generate_appcast.log"
if grep -q "Could not unarchive" "$BUILD_DIR/generate_appcast.log"; then if grep -q "Could not unarchive" "$BUILD_DIR/generate_appcast.log"; then
@@ -290,9 +293,60 @@ if grep -q "Could not unarchive" "$BUILD_DIR/generate_appcast.log"; then
exit 3 exit 3
fi fi
echo "🚚 Moving generated delta files into version folder..." echo "🔧 Fixing download URLs in appcast.xml..."
if compgen -G "$APPCAST_WORK/*.delta" > /dev/null; then # Fix ZIP/DMG URLs to include version folder
mv "$APPCAST_WORK"/*.delta "$VERSION_DIR/" # Transform "https://github.com/.../download/Meetingnotes-1.0.3.zip" to "https://github.com/.../download/v1.0.3/Meetingnotes-1.0.3.zip"
sed -i '' -E 's|url="([^"]*/download/)(Meetingnotes-([0-9]+\.[0-9]+\.[0-9]+)\.(zip\|dmg))"|url="\1v\3/\2"|g' appcast.xml
# Fix delta URLs - they need to be in the version folder of the release they belong to
# We'll need to parse the appcast to figure out which version each delta belongs to
python3 << 'EOF'
import xml.etree.ElementTree as ET
import re
# Parse the appcast
tree = ET.parse('appcast.xml')
root = tree.getroot()
# Register namespace to preserve it in output
ET.register_namespace('sparkle', 'http://www.andymatuschak.org/xml-namespaces/sparkle')
# Process each item
for item in root.findall('.//item'):
# Get the version for this item
version_elem = item.find('.//{http://www.andymatuschak.org/xml-namespaces/sparkle}shortVersionString')
if version_elem is not None:
version = version_elem.text
# Fix all delta URLs within this item's sparkle:deltas section
deltas_elem = item.find('.//{http://www.andymatuschak.org/xml-namespaces/sparkle}deltas')
if deltas_elem is not None:
for enclosure in deltas_elem.findall('.//enclosure[@url]'):
url = enclosure.get('url')
if url and '.delta' in url:
# Extract just the filename
filename = url.split('/')[-1]
# Set the correct URL with version folder
new_url = f'https://github.com/owengretzinger/meetingnotes/releases/download/v{version}/{filename}'
enclosure.set('url', new_url)
# Write the fixed appcast
tree.write('appcast.xml', encoding='UTF-8', xml_declaration=True)
# Add back the standalone attribute
with open('appcast.xml', 'r') as f:
content = f.read()
content = content.replace('<?xml version=\'1.0\' encoding=\'UTF-8\'?>', '<?xml version="1.0" standalone="yes"?>')
with open('appcast.xml', 'w') as f:
f.write(content)
EOF
echo "🚚 Moving only NEW delta files into version folder..."
# Get the build number from the project
BUILD_NUMBER=$(grep -m1 "CURRENT_PROJECT_VERSION" Meetingnotes.xcodeproj/project.pbxproj | sed 's/.*= \(.*\);/\1/')
if compgen -G "$APPCAST_WORK/${APP_NAME}${BUILD_NUMBER}-"*.delta > /dev/null 2>&1; then
echo "[DEBUG] Moving new delta files for build $BUILD_NUMBER..."
mv "$APPCAST_WORK/${APP_NAME}${BUILD_NUMBER}-"*.delta "$VERSION_DIR/" 2>/dev/null || true
fi fi
rm -rf "$APPCAST_WORK" rm -rf "$APPCAST_WORK"