published on Sunday 14 September, 2008 at 11:42 am. {10 Comments}
Alright, folks, it’s been another few weeks, and it’s time for another Sparkle release! You can grab it here. I’m frozen on new code now, and there are no known bugs left, so unless there’s something critically wrong, this’ll be the last beta before 1.5 final.
Another piece of good news is that Sparkle’s documentation is finally coming together, and in wiki form. Check it out, and feel free to contribute.
Make sure you read the release notes thoroughly; the important thing to note is that DSA signatures are now required.
I could really use help from localizers on the remaining languages! If you are or know a localizer for a language Sparkle’s missing, please let me know.
Sparkle 1.5b6 Release Notes
- Sparkle now requires DSA signatures on your updates. Check the documentation for more information on how to set that up if you don’t already sign your updates. You can bypass this requirement if you deliver both your appcast and your updates over SSL.
- Sparkle will no longer display release notes located at file:// URLs, since Javascript on such a page would be able to read files on your file system.
- For security reasons, Sparkle will refuse to install updates which appear to “downgrade” the app.
- SUUpdater now implements new keys: “automaticallyDownloadsUpdates”, “lastUpdateCheckDate”, and “sendsSystemProfile.”
- Fixed a bug that could prevent SUProbingUpdateDriver from working.
- Fixed a bug that prevented the updaterWillRelaunchApplication: delegate method from getting called.
- Fixed displaying release notes transmitted “loose” in the <description> key.
- Fixed Sparkle compilation on 10.4 systems.
- Fixed a bug that could cause window confusion if an app changed its LSUIElement at runtime.
- Added support for Sparkle 1.1’s behavior of disabling updates when the check interval is 0.
- Sparkle can now handle appending parameters to URLs which already have parameters.
- If an update’s sparkle:shortVersionString is the same as the host’s CFBundleShortVersionString, the sparkle:version and CFBundleVersion will be presented in parentheticals.
published on Wednesday 13 August, 2008 at 9:19 pm. {Share Your Thoughts}
Alright, folks, it’s that time again. Sparkle 1.5b5’s out! Tons of bugs fixed, and tons of stuff refactored. I made much of the API private—that’ll give me more flexibility to change the architecture out from under you in the future.
Please read the release notes, because unless you’re using a .app and haven’t called anything in the Sparkle framework, I’ve probably broken things for you.
- Important Changes!
- Made every Sparkle class private except for
SUUpdater, SUAppcast, SUAppcastItem, and the SUVersionComparisonProtocol.
- There is now a single
SUUpdater singleton for every host bundle; instead of -[SUUpdater setHostBundle], you can use +[SUUpdater updaterForBundle].
- Redefined the (entire) delegate protocol accordingly.
- Renamed
-[SUUpdater updatePreferencesChanged] to -[SUUpdater resetUpdateCycle]. This provides better semantics for non-apps, which need to start the update cycle manually.
-[SUUpdater checkForUpdatesWithDriver] is private. If you were using SUProbingUpdateDriver, you can now use -[SUUpdater checkForUpdateInformation] for a similar effect.
- All the user defaults keys are now private; instead,
SUUpdater is KVC-compliant for automaticallyChecksForUpdates, updateCheckInterval, and feedURL.
- Reduced the size of the English-only framework by 25%.
- System profiling information is now only submitted to the server once per week; this will help normalize your statistics across users with different interval preferences.
- The
feedParametersForUpdater: delegate method now requires displayKey and displayValue keys (just human readable versions of key and value) so that it can inform the user what’s being sent.
- Added a delegate method called
pathToRelaunchForUpdater: which can be used for plugins to provide the path which should be used when relaunching the client after installing an update.
- Added support for xml:lang to pick localized nodes in appcasts (for release notes, etc).
- Fixed a bug which would cause the “checking for updates” window to not disappear in certain extraordinary error conditions.
- Fixed a DSA signature checking bug for .tar.gz archives.
- Sparkle now refuses to update on any read-only volume, not just dmgs.
- Sparkle will clean up the host app’s name and version before sending it as the user agent string; some non-ASCII characters were causing problems.
- Added an Italian localization courtesy Michele Longhi.
- Added a Swedish localization courtesy Daniel Bergman.
- Fixes to the French localization courtesy Ronald Leroux and Yann Ricqueberg.
- Fixes to the German localization courtesy Sven-S. Porst.
- Fixes to the Russian localization courtesy Alexander Bykov and Anton Sotkov.
- Fixed a number of issues related to archive format detection: I reverted back to extensions from UTIs.
- Focus behavior fixes for
LSUIElement apps.
- The status window progress bar now animates even when indeterminate.
- Major refactorings to improve functionality for non-app bundles.
published on Saturday 05 July, 2008 at 12:19 pm. {6 Comments}
Somehow, a critical comma slipped out of 1.5b3 which prevented non-.dmgs from being extracted properly. Please update to 1.5b4 to fix that problem.
Sorry about that, folks.
published on Friday 04 July, 2008 at 12:28 pm. {Share Your Thoughts}
I’m working on some major refactorings to enable Sparkle to work for updating multiple bundles at once, but that’ll take a while, and some rather important bugs have been fixed since 1.5b2. In the spirit of releasing more frequently, I give you 1.5b3. If you’ve released an app with b2, I recommend upgrading as soon as you can.
- Added a new delegate method to SUUpdater.h to allow delegates to specify custom version comparators.
- Added a German localization, courtesy the Camino localizer team: Dominik T., Tobias Stohr, and Friedemann Bochow.
- Bug fixes:
- Fixed a serious bug which could cause a server to be DDoS’d (or the host app to crash!) if an appcast fails to be parsed.
- Fixed .tbz extraction if the archive was made with Stuffit.
- Fixed support for .tar.bz2 and .tar.gz; Sparkle has to assume the archive is a tar when it sees “bz2″ and “gz”; don’t use those without tarring.
- Fixed a typo which caused the shouldPromptForPermissionToCheckForUpdatesToHostBundle: method to not work in 1.5b2.
- Fixed .zip extraction on Tiger (Apple changed the UTI between releases)
- Fixed a crasher on Tiger.
- Fixed display of the default app icon when the host app doesn’t have an icon.
- Sparkle now displays a sensible progress string and uses an indeterminate progress bar when the server doesn’t report a file size.
- Fixed some memory leaks.
published on Sunday 29 June, 2008 at 9:13 pm. {8 Comments}
Alright folks, it’s been a few weeks, and we’ve gotten a ton of bugs hammered out. If you’re using 1.5b1, you should absolutely upgrade to b2, as a number of somewhat critical bugs have been fixed.
As of this writing, there are no known bugs (other than Sparkle being bigger than I want it to be), so please let me know if you find something amiss.
Still no documentation yet, but now that the bugs are closed, I’ll get on that.
What’s New?
- Compatibility Issues:
- Most of the delegate method selectors have changed to scale better. See
SUUpdater.h for changes; you’ll likely have to make changes if you implement any delegate methods.
- If you’re using .tar.gz or .tar.bz2 archives, name them “.tbz” or “.tgz” instead; Sparkle now uses UTIs for archive detection, and it’s not smart about double extensions.
- I’m no longer supporting 10.3. This may or may not work on Panther—probably not.
- Sparkle’s no longer built for
ppc64 by default. If you want to ship that, feel free to build your own, but this saves a few hundred k.
- Enhancements:
- Sparkle now detects if the preferences for automatic update checks or the time interval change mid-cycle. If your product is a non-.app, you need to clue Sparkle in on the change by calling
[[SUUpdater sharedUpdater] updatePreferencesChanged].
- Added a cancel to the “checking for updates…” dialog.
- Sparkle now cleans up all its litter in /tmp.
- Made
SUUpdater's delegate an IBOutlet so you can hook it up in Interface Builder.
- Bug fixes:
- Sparkle no longer crashes on non-GC hosts when the user cancels an update’s downloads.
- Sparkle no longer gets stuck in an inconsistent state or crashes when it can’t parse the appcast on scheduled updates.
- Added the sharedUpdater method to
SUUpdater, as it should have been.
- Fixed a bug where the “checking for updates…” window wouldn’t go away if an error occurs while checking for updates.
- Made the dual-mode build configuration actually use the .xcconfig which builds it with GC support. (oops!)
- Fixed relaunching for prefpanes.
- Sparkle no longer fails to install updates on Snow Leopard (though there’s still an issue with trashing the old version of the app, but it seems to be a 10.6 bug)
- Sparkle now handles redirects correctly under Tiger.
- Fixed the installation path for non-.app bundles.
- Fixed a bug which could crash Sparkle under non-English locales.
- Fixed a weird race condition which could cause the relaunch tool to never notice that its target relaunched.
- Fixed a bug where if the host app is inactive when an update occurs, the update alert sometimes doesn’t become key.
- Minor textual fixes.
- Localizations:
- Dutch, courtesy Maarten Van Coile
- French, courtesy Yann Ricquebourg
- Spanish, courtesy Ernesto Gomez Cereijo