Skip to content

[feat] Add Sparkle#1

Merged
LoopingStudio merged 3 commits intomainfrom
feat/sparkle
Feb 16, 2026
Merged

[feat] Add Sparkle#1
LoopingStudio merged 3 commits intomainfrom
feat/sparkle

Conversation

@LoopingStudio
Copy link
Copy Markdown
Owner

This pull request introduces Sparkle-based automatic update functionality to the ApertureTokensManager app. It updates the project configuration to add Sparkle as a Swift Package dependency, includes the necessary entitlements and Info.plist keys, implements the update check UI, and provides an initial appcast feed for Sparkle. Additionally, it updates version numbers and enables outgoing network connections to support update checking.

The most important changes are:

Sparkle Integration and Update Functionality:

  • Added Sparkle as a Swift Package dependency to the Xcode project and linked it in the build settings (ApertureTokensManager.xcodeproj/project.pbxproj, Package.resolved). [1] [2] [3] [4] [5] [6] [7]
  • Implemented Sparkle updater logic and UI, including a "Check for Updates…" menu item and associated view model (ApertureTokensManager/App/ApertureTokensManagerApp.swift). [1] [2]

Configuration and Entitlements:

  • Added ApertureTokensManager.entitlements to support Sparkle's required temporary Mach lookup exceptions.
  • Updated Info.plist with Sparkle-specific keys such as SUFeedURL and SUPublicEDKey (ApertureTokensManager/Info.plist).
  • Modified project settings to reference the new Info.plist and entitlements files, and enabled outgoing network connections for update checks (ApertureTokensManager.xcodeproj/project.pbxproj). [1] [2] [3] [4] [5] [6]

Appcast Feed:

  • Added an initial appcast.xml file for Sparkle to use as the update feed, describing version 1.0.1.

Versioning:

  • Bumped the marketing and project version numbers to 1.0.1 and 2, respectively, to reflect the new release. [1] [2]

@LoopingStudio LoopingStudio self-assigned this Feb 16, 2026
@LoopingStudio LoopingStudio added the enhancement New feature or request label Feb 16, 2026
@LoopingStudio LoopingStudio merged commit c05a583 into main Feb 16, 2026
4 checks passed
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request adds Sparkle-based automatic update functionality to the ApertureTokensManager macOS application. The changes enable users to check for updates through a menu item and configure the app to download and install updates automatically via Sparkle's framework.

Changes:

  • Integrated Sparkle 2.8.1 as a Swift Package dependency with necessary UI components and view models
  • Configured project entitlements and Info.plist with Sparkle-specific keys (feed URL, public key, installer service)
  • Created initial appcast.xml feed describing version 1.0.1 release
  • Updated version numbers to 1.0.1 (marketing) and 2 (build), and enabled outgoing network connections

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
appcast.xml New Sparkle appcast feed XML defining version 1.0.1 with download URL and signature
ApertureTokensManager/Info.plist New file with Sparkle configuration keys (feed URL, public ED key, installer service)
ApertureTokensManager/App/ApertureTokensManagerApp.swift Added Sparkle integration with CheckForUpdatesViewModel, CheckForUpdatesView, and menu command
ApertureTokensManager/ApertureTokensManager.entitlements New entitlements file with Mach lookup exceptions for Sparkle services
ApertureTokensManager.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved Added Sparkle 2.8.1 package resolution
ApertureTokensManager.xcodeproj/project.pbxproj Updated project configuration to link Sparkle, reference new files, bump versions, and enable network access

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread appcast.xml
<h2>What's New</h2>
<ul>
<li>Initial release of Aperture Tokens Manager.</li>
<li>Enjoy the first version of the app !</li>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's an extra space before the exclamation mark in "the app !". In English, punctuation should typically be placed directly after the last word without a preceding space.

Suggested change
<li>Enjoy the first version of the app !</li>
<li>Enjoy the first version of the app!</li>

Copilot uses AI. Check for mistakes.
<key>SUEnableInstallerLauncherService</key>
<true/>
<key>SUFeedURL</key>
<string>https://loopingstudio.github.io/ApertureTokenManager/appcast.xml</string>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The URLs use "ApertureTokenManager" (without 's') while the app is named "ApertureTokensManager" (with 's'). Ensure that the GitHub repository name is actually "ApertureTokenManager" and that GitHub Pages is correctly configured at this URL, otherwise update checks will fail.

Suggested change
<string>https://loopingstudio.github.io/ApertureTokenManager/appcast.xml</string>
<string>https://loopingstudio.github.io/ApertureTokensManager/appcast.xml</string>

Copilot uses AI. Check for mistakes.
Comment thread appcast.xml
<pubDate>Fri, 16 Feb 2026 10:19:35 +0100</pubDate>
<sparkle:version>1</sparkle:version>
<sparkle:shortVersionString>1.0.1</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The minimum system version is set to 15.0, but this should be aligned with the actual deployment target. The Xcode project sets MACOSX_DEPLOYMENT_TARGET = 15.0, so this is consistent. However, ensure that Sparkle 2.8.1 supports macOS 15.0 as the minimum version.

Copilot uses AI. Check for mistakes.
Comment thread appcast.xml
</ul>
]]>
</description>
<enclosure url="https://github.com/LoopingStudio/ApertureTokenManager/releases/download/1.0.1/ApertureTokensManager.zip" length="7253356" type="application/octet-stream" sparkle:edSignature="pPTbrV1VW8MjuWMyeQxQh8MsYUYOaiX/qTw8WFdjmE1nzTgUy3QirBKVPenqXDifibe5BhosHD6XFsRvkn0xCQ=="/>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The enclosure URL points to a GitHub release (1.0.1) that may not exist yet if this is the initial release adding Sparkle functionality. Ensure the release is created and the ZIP file is uploaded to GitHub releases before this version is distributed, otherwise update checks will fail.

Copilot uses AI. Check for mistakes.
Comment thread appcast.xml
<item>
<title>1.0.1</title>
<pubDate>Fri, 16 Feb 2026 10:19:35 +0100</pubDate>
<sparkle:version>1</sparkle:version>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sparkle:version is set to "1" but the CURRENT_PROJECT_VERSION in the Xcode project is set to "2". These values should match to ensure Sparkle can properly compare version numbers. The sparkle:version should be "2" to match the build number in the project configuration.

Suggested change
<sparkle:version>1</sparkle:version>
<sparkle:version>2</sparkle:version>

Copilot uses AI. Check for mistakes.
Comment thread appcast.xml
</ul>
]]>
</description>
<enclosure url="https://github.com/LoopingStudio/ApertureTokenManager/releases/download/1.0.1/ApertureTokensManager.zip" length="7253356" type="application/octet-stream" sparkle:edSignature="pPTbrV1VW8MjuWMyeQxQh8MsYUYOaiX/qTw8WFdjmE1nzTgUy3QirBKVPenqXDifibe5BhosHD6XFsRvkn0xCQ=="/>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The enclosure element is missing the required sparkle:version attribute. According to Sparkle 2.x documentation, the enclosure tag should include sparkle:version to specify the build number for the update package.

Suggested change
<enclosure url="https://github.com/LoopingStudio/ApertureTokenManager/releases/download/1.0.1/ApertureTokensManager.zip" length="7253356" type="application/octet-stream" sparkle:edSignature="pPTbrV1VW8MjuWMyeQxQh8MsYUYOaiX/qTw8WFdjmE1nzTgUy3QirBKVPenqXDifibe5BhosHD6XFsRvkn0xCQ=="/>
<enclosure url="https://github.com/LoopingStudio/ApertureTokenManager/releases/download/1.0.1/ApertureTokensManager.zip" length="7253356" type="application/octet-stream" sparkle:version="1" sparkle:edSignature="pPTbrV1VW8MjuWMyeQxQh8MsYUYOaiX/qTw8WFdjmE1nzTgUy3QirBKVPenqXDifibe5BhosHD6XFsRvkn0xCQ=="/>

Copilot uses AI. Check for mistakes.
Comment thread appcast.xml
Comment on lines +14 to +15
<li>Initial release of Aperture Tokens Manager.</li>
<li>Enjoy the first version of the app !</li>
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The release notes describe this as the "Initial release" which is inconsistent with the version number 1.0.1. An initial release should typically be version 1.0.0, or if this is version 1.0.1, the release notes should describe what's new in this update compared to 1.0.0.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants