# 1.18.0

 * Name of the host app is used in authorization prompt (the `SPARKLE_RELAUNCH_TOOL_NAME` setting is now obsolete)
 * More detailed progress bar for package installers (Kornel Lesiński)
 * Disabled the keyboard shortcut for the install button for scheduled updates to avoid accidental installs. (George Nachman)
 * generate_appcast tool adds release notes if there's an .html file with the same base name as the archive (Brett Walker)
 * Added `sparkle:shortVersionString` to the enclosure, #1032 (Brett Walker)
 * Fixed Japanese localization (1024jp)
 * Fixed escaping of system profile URLs
 * Added more logging in various failure cases (Kornel Lesiński)
 * Better error message for quarantined apps that can't be updated

# 1.17.0

 * Added Touch Bar support (Bi11)
 * Upgraded SULog to use logging APIs that Apple provides built-in (Zorg)
 * Skip buttons are disabled if the update is marked as critical (Kornel Lesiński)
 * Background updates ask OS for lower-priority networking (Kornel Lesiński)
 * Refactorings to sync with upcoming 2.0
   * Added kqueue based termination listener (Zorg)
   * Added AppKit prevention guards to modules that shouldn't import it (Zorg)
   * Added Obj-C generics where applicable (Zorg)
   * Made SUBundleIcon & SUApplicationInfo take SUHost, not NSBundle (Zorg)
   * Improved -[SUHost objectForInfoDictionaryKey:] (Zorg)
   * Detect and fail if any two-way dependencies exist in the project (Zorg)
 * generate_appcast:
   * fixed handling of multiple directories in an archive
   * percent encode the filename used in the delta url (Brett Walker)
 * Update Sparkle.strings (BR Lingo)
 * Improved handling of non-ASCII names in delta archives (Kornel Lesiński)
 * Don't touch Info.plist unless git version changes (Václav Slavík)

# 1.16.0

 * Guided package installs are now the default for updating packages (Zorg)
   - `pkg` installers won't show any UI. If you require the old behavior of showing a full installer window, rename the `*.pkg` file to `*.sparkle_interactive.pkg`
 * Previous version of the app is now deleted instead of staying in the trash (Zorg)
 * Added `generate_appcast` helper tool (Kornel Lesiński)
 * Made manual check resume pending automatic updates instead of starting a new update (Kornel Lesiński)
 * Started using `length` value from RSS if HTTP doesn't give one (Zorg)
 * Hidden automatic updates checkbox for information only updates (Bi11)
 * Added progressbar for DMG and binary delta extraction (Kornel Lesiński)
 * Fixed showing of download status if we attempt a 2nd download (Zorg)
 * Refactorings to sync with upcoming 2.0
    * Decoupled and simplified installation code using protocols (Zorg)
    * Added nullability annotations (Zorg)
    * Allowed delegate methods that return an object to return nil (Zorg)
    * Decreased responsibility of SUHost and moved code into other components (Zorg)
    * Removed Sparkle.pch and many file #includes (Zorg)

# 1.15.0

* A new icon! Thanks to 1024jp
* Show alert when an update is sent over insecure HTTP with no DSA key (Zorg)
  - If you can't use HTTPS, you must at least sign updates with a DSA key.
* Improved binary delta implementation (Zorg)
* Added improved -validateMenuItem: as a method in SUUpdater.h for public use (Zorg)
* Removed reachability preflight check (Zorg)
* Clear update caches directory before downloading new update (Zorg)
* Check the bundle's parent directory for writability too (Zorg)
* Don't follow symbolic links for file operations (Zorg)
* Don't bring up an authorized dialog during cleanup (Zorg)
* Made Sparkle look for the highest compatible version regardless of timestamps (Zorg)
* Fixed compatibility with 10.7
  * Fixed crash on 10.7 - subscript operator not available (kleuter)
  * Fixed warnings caused by -Wpartial-availability (Zorg)
* Fixed german l10n. (Sebastian Volland)
* Error code for download errors (Kornel Lesiński)
* Update last update check date when the update driver finishes (Zorg)
* Scale app icon up if needed in Software Update window (Nicholas Riley)
* Don't register for termination notifications more than once (Zorg)
* Don't terminate the app if we're already terminating (Zorg)
* Removed SUEnableAutomaticChecksKeyOld and SUCheckAtStartup constants (Eitot)
* Updated Sparkle framework headers to use modules if modules are available (B. Kevin Hardman)
* Fixed warnings, fixed uses of SULocalizedString (Jerry Krinock)
* Improved signing verifier to take any host and s/application/bundle/ (Zorg)
* Improved Spotlight updates after delta extraction (Zorg)

# 1.14.0 (Mar 11, 2016)

* Disable javascript by default and make it opt-in (Zorg)
* URL-encoding of appcast URLs is preserved (Kornel Lesiński)
* Delegate is asked for fallback updates if delta update fails (Kornel Lesiński)
* Fixed crash on 10.7 - subscript operator not available (kleuter)
* Fixed check of feed URL before delegate had a chance to set it (Kornel Lesiński)
* Re-added support for password-protected dmg images (Andrew K. Boyd)
* Added warning about ATS blocking (Kornel Lesiński)
* Translation fixes for pt-BR. (vitu)
* Add some Japanese lozalized strings (1024jp)
* Made test app available in all languages #695 (LIU Dongyuan / 柳东原)
* Czech localizations update (Frantisek Erben)
* Removed a test resource from the framework bundle (Karl Moskowski)
* Test if the updated app is the frontmost one (Zorg)
* UI Tests for the Test Application (Zorg)

# 1.13.1 (Jan 31, 2016)

Important security fixes:

* Prevent inclusion of local files via file:// XML entities
* Disable redirects to non-HTTP URLs in release notes webview

# 1.13.0 (Dec 18, 2015)

* Changed framework's bundle ID from `org.andymatuschak.Sparkle` to `org.sparkle-project.Sparkle`.

# 1.12.0 (Dec 13, 2015)

* Rewritten file operations for updating an app (Zorg)
  - Ensuring atomic move operations, robust error handling.
  - Faster.
  - Using modern APIs where possible (no FSPathMakeRef, FSGetCatalogInfo, FSFindFolder, etc.)
  - Strong documentation, easier to read code.
* Automatic updates won't be installed if the system is about to shut off (Zorg)
* Deprecated serving over HTTP without DSA (Zorg)
  - Note that Apple has deprecated insecure HTTP in macOS 10.11
* Improved Autoupdate application (Zorg)
    * Do all the installation work after the runloop is set up
    * TerminationListener only does termination listening now
    * Handle cases where host path is not installation path and host path is not desired executable path
    * Don't show Autoupdate dock icon if we shouldn't show UI
    * Update modification & access time for new update
* Added installUpdatesIfAvailable (Ian Langworth)
* Removed extensions from shell scripts (Jake Petroules)
* Rewritten test app so it works again, and from a local web server (Zorg)
* Replaced use of Python with built-in web server (Kevin Wojniak)
* Set LD_RUNPATH_SEARCH_PATHS in Podspec (Jake Petroules)
* Don't install automatic updates if the system might shut off (Zorg)
* Don't show Autoupdate dock icon if we shouldn't show UI (Zorg)
* Updated layout constraints when removing release notes (Zorg)
* Improved BinaryDelta error handling & logging (Zorg)
* Refactored quarantine removal (Zorg)
* Fixed German localization (1024jp)
* Updated zh_CN translation (LIU Dongyuan / 柳东原)
* Updated Mac models list until July 2015 (Gabriel Ulici)
* Updated Polish translation (Kornel Lesiński)
* Updated Xcode project languages for which we have translations (Jake Petroules)
* Updated XIB files (Kornel Lesiński)
* Use NSByteCountFormatter if available (Jake Petroules)
* Declared protocols on SUUpdateAlert for the 10.11 SDK (Daniel Jalkut)
* Silenced warning about casting away const-ness and -Wassign-enum (Daniel Jalkut)
* Added script to generate a report comparing the Sparkle.strings files (Kevin Wojniak)
* Check for empty strings (as well as nil) in SUHost's -name method (Karl Moskowski)
* Don't follow symlinks for checking file existence (Zorg)
* Unit tests in Swift (Zorg, Jake Petroules)
* Fixed framework imports (Felix Schulze)
* Fixed issues with copying files from different mounted drives (Zorg)
* Disallowed automatic updates when user can't write to the bundle (Zorg)
* Set the task working directories instead of changing the process working directory (Kevin Wojniak)

# 1.11.1 (Nov 9, 2015)

* Don't install automatic updates when system is about to shut down

# 1.11.0 (Aug 24, 2015)

* Big improvements to code signing and DSA verification
   - Sparkle now checks not only whether an update is correctly signed, but also whether the updated version will be able to verify future updates. Updates now must either use DSA keys correctly, or not try to use them at all. Same goes for Apple Code Signing.
   - Rely on code signing and the DSA key in the new app instead of appcast. If the new app has a public DSA key, then the appcast item must have a DSA signature for the app, even if the app is code signed. (Zorg)
* More verbose error message when DSA keys don't match (Kornel Lesiński)
* Added delegate methods for pre-download and immediately post-failed-download (Isaac Greenspan)
* Fix Lucida Grande is always used for release notes (LIU Dongyuan / 柳东原)
* Only remove quarantine with setResourceValue: when it's present. Fixes "Unable to quarantine: 93" messages from showing up in the console. (Zorg)
* Fixed const and nullability warnings (Jake Petroules, Kornel Lesiński)
* Replaced deprecated NSRunAlertPanel/alertWithMessageText (Kevin Wojniak)
* Imported the Foundation umbrella header in all the public headers (C.W. Betts)
* pt-BR localization update (Victor Figueiredo)
* Reject unsupported code-signing xattrs in binary delta (Zorg)
* Fixed crash while applying delta update (antonc27)
* Added logging of appcast/download URL on error (Kornel Lesiński)
* More robust reading of Autoupdate.app path from Sparkle bundle

# 1.10.0 (Apr 26, 2015)

* Massive improvements to the BinaryDelta tool (Zorg)
  - Ability to track file permissions (Zorg)
  - Nicely formatted log output (Zorg)
  - Numerous bug fixes in handling of symlinks, empty directories, case-insensitive names, etc. (Zorg)
  - Refactored and modernized code (Zorg)
  - libxar is no longer weak-linked (C.W. Betts)
* Double-check the code signature of the the app after installation (Isaac Wankerl)
* Added headless guided package installation (Graham Miln)
* Added ability to inject custom HTTP headers in appcast request (Mattias Gunneras)
* Changes to make unarching more reliable (Zorg, Kornel Lesiński)
* Have Sparkle build a framework module (C.W. Betts)
* Stdout used for non error outputs (JDuquennoy)
* French locale update (Kent Sutherland)

# 1.9.0 (Jan 26, 2015)

* Added SUUpdater delegate method for failures. (Benjamin Gordon)
* Make the error definitions public (C.W. Betts)
* Add support for lzma compressed tarballs (Kyle Fuller)
* Back to SKIP_INSTALL=YES by default (Tony Arnold)
* Properly set install names and rpaths for targets (Jake Petroules)
* Use Library/Caches rather than app support directory (Kornel Lesiński)
* Check for a modal window being onscreen before trying to put up the Sparkle prompt (Alf Watt)
* Fixed crashes on 10.7 (Chris Campbell, Ger Teunis)
* Fixed Sparkle tags parsing (Tamás Lustyik)
* SULog code cleanups (Kevin Wojniak)
* Make sure CFBundleVersion is a semantic version number. (Jake Petroules)
* Replace typedef enums with typedef NS_ENUM to make Swift happier (C.W. Betts)
* Fix warnings under Xcode 6.1 relating the SUUpdateAlert XIB (Tony Arnold)
* Prefer string constants to strings (Jake Petroules)
* Use Info.plist keys instead of macros (Jake Petroules)
* Only export public symbols. (Jake Petroules)
* BinaryDelta: avoid crash with bad paths (Jake Petroules)
* Fixing Swedish translations (Erik Vikström)
* Turkish localization fixes (Emir)
* Proofing of Ukrainian localization (Vera Tkachenko)

# 1.8.0 (Jul 26, 2014)

* New SUDSAVerifier based on up-to-date macOS APIs (Zachary Waldowski)
* Detailed error log for failed signature checks (Kornel Lesiński)
* Converted Sparkle to ARC (C.W. Betts)
* Converted ivars to properties. (Jake Petroules)
* Cocoapod support (Xhacker Liu)
* Quarantine removal on macOS 10.10 (C.W. Betts)
* Updated Japanese localization (1024jp)
* Added Greek localization

# 1.7.1 (Jul 2, 2014)

* Removed option to install unverified updates (Kornel Lesiński)
* Added detailed log when code signing verification fails (Sam Deane)
* Restored original Sparkle icon. (Jake Petroules)
* Switched SUUpdateAlert.xib to AutoLayout (Kornel Lesiński)
* Replace references to andymatuschak.org with sparkle-project.org. (Jake Petroules)
* Several code cleanups, modernizations, fixed warnings and improved code formatting (Jake Petroules)
* Make the repository significantly more organized. (Jake Petroules)
* Xcode project: set organization name and class prefix. (Jake Petroules)
* Link to Foundation and AppKit instead of Cocoa. (Jake Petroules)
* Use new operatingSystemVersion API when available. (Jake Petroules)
* Add .clang-format configuration file for source code formatting. (Jake Petroules)
* Add a target to build Sparkle API documentation using Doxygen. (Jake Petroules)

# 1.7.0

* Dropped support for macOS 10.6. Sparkle now supports 10.7 and newer (including 10.10 Yosemite) on 64-bit Intel Macs (the last 32-bit Mac was released in 2006).
* Removed use of deprecated functions (Zachary Waldowski)
* Switched to modern Obj-C runtime and new literals syntax
* Removed pre-10.7 code. (C.W. Betts)
* Use more Blocks/libdispatch code. (C.W. Betts)
* Cleaned up and improved security of `generate_keys`/`sign_update` scripts

# 1.6.1

* Removed archive password prompt (Kornel Lesiński)
* (Re)fixes bug where URLs are naively double escaped (Andrew Madsen)
* Fixed typo that caused crashes in BinaryDelta (Tamas Lustyik)
* SUStandardVersionComparator.h is public (Vincent CARLIER)
* Remove pre-10.6-specific code. (C.W. Betts)
* Objective C 2 getters and setters. (C.W. Betts)
* Define correct dependencies on locale scripts (Antonin Hildebrand)

# 1.6.0

* Cleaned up and deleted redundant strings files (Kornel Lesiński)
* Modern Objective C syntax, properties where possible. (C.W. Betts)
* Make SUAppcastDelegate a formal protocol. (C.W. Betts)
* Fixed default font in release notes WebView (Kornel Lesiński)
* Configurable name for finish_installation.app (Kornel Lesiński)
* Removed code for 10.4 (Kornel Lesiński)
* Convert all strings files to UTF-8 (UTF-16 must die) (Kornel Lesiński)
* Removing GC target (Matt Thomas)
* finish_installation.app and pkg files will not removed when we use *.pkg installer and restart system in the installer (Takayama Fumihiko)
* Select Korean and Slovak for Sparkle.strings localization (Shon Frazier)
* Updated the Romanian translation (Gabe)
* pt-BR localization polishing (BR Lingo)
* update zh_CN (61)
* Shut up some warnings & make build with newer Xcode (Uli Kusterer)
* Less unsafety with format strings (Uli Kusterer)
* New icon (Rick Fillion)
* fixed a 'content rectangle not entirely onscreen' warning (Simone Manganelli)
* updated sends system profile to use info.plist if user defaults key isn't present (Jamie Pinkham)
* Support for notifications on some updater events (Doug Russell)
* Allow the delegate to trigger a silent install and relaunch (Matt Stevens)
* Support silent relaunches (Matt Stevens)
* Increment the sudden termination counter if installing on quit (Matt Stevens)
* Prompts the user to update after a week (rather than a day) if he doesn't quit the app (Andy Matuschak)
* Adding <sparkle:tags> appcast item element, <sparkle:criticalUpdate /> tag (Andy Matuschak)
* We have this check box that says "Automatically download and install updates in the future." But we only download them automatically. We still ask permission again before installing them. (Andy Matuschak)

# 1.5.0-beta6

* Important Changes
 * 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.

# 1.5.0-beta5

* 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 feedParamatersForUpdater: delegate method now requires "displayKey" and "displayVersion" keys 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.

# 1.5.0-beta4

* Fixed a critical bug which prevented non-.dmgs from unarchiving properly.
* Added reporting of 64-bit capability to the profiling system.

# 1.5.0-beta3

* 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 Tobschall, 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.

 # 1.5.0-beta2

 * 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 IB.
* 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: Maarten Van Coile
 * French: Yann Ricquebourg
 * Spanish: Ernesto Gomez Cereijo

 # 1.5.0-beta1

 * The most important things to know:
 * The 10.3 support is untested at best; sketchy at worst. Test with it thoroughly before you use it.
 * Sparkle now asks for permission to update on second launch; don't be surprised at that. You can change that behavior with a delegate method; read SUUpdater.h for more info.
 * We no longer distinguish between "check on startup" and "scheduled updates"; everything is scheduled, with the default being every day.
 * The test application is using the new profiling features, but that's only for demonstration: these are off by default. More on this later.
 * There are no localizations yet.
* New features:
 * Sparkle now supports .pkgs. Just name the .pkg the name of the app and put in the update archive.
 * Sparkle now sends optional demographic profiling information; set SUEnableSystemProfiling to YES in your Info.plist and check out the GET data sent to your webserver when fetching the appcast. More on this in the documentation. The test application has this on so you can see the behavior.
 * Sparkle now supports updating non-.apps. Just call -setHostBundle: on the global SUUpdater to let it know what you're trying to update.
 * Sparkle now supports garbage collection in the host app. Use "Sparkle-with-GC.framework" for that, but be aware it's 10.5-only.
 * Sparkle is now 64-bit compatible, compiling both ppc64 and x86_64.
 * Sparkle now supports a sparkle:minimumSystemVersion key you can set on appcast items. It does what you think it does.
 * Sparkle now checks to see if the host app is running from a disk image and refuses to update if it is. (10.4+ only)
 * Added support for entities in enclosure paths.
 * The file size output is now formatted prettily.
 * Sparkle now gives visual indication that it's checking for updates when the update's user initiated. ie: it pops up a status controller saying "checking for updates..."
 * Added support for an SUPublicDSAKeyFile, so people don't have to copy/paste their entire key into their Info.plist. Set this key in your Info.plist to the filename of the key in your Resources directory.
 * Added an actually maintainable codebase.
* Changes:
 * Sparkle version comparison is now dramatically less stupid and verified by a bunch of unit tests. If something doesn't work the way you think it should, add a test to SUVersionComparisonTest.m
 * Added a minimum to the check interval so that developers don't accidentally release their apps into the wild with 60-second test check intervals and have DOS-attack-like results. It's an hour now for release mode; feel free to change it.
 * The relaunching process now uses a separate helper app, which is a much more robust method.
 * Changed CFBundleShortVersionString behavior: Sparkle no longer uses Apple's about box style of displaying ShortVersionString (CFBundleVersion) when the latter is available.
 * No more MD5 checking. Use DSA: it's actually secure.
 * The abomination that was SUStatusChecker is dead. Use SUProbingUpdateDriver instead.
* Bugfixes:
 * Fixed a huge bug with fully-automatic updating: before, if the user chose to relaunch later, the app would be running from the trash for a while. Now the buttons are "install and relaunch" or "install later."
 * Sparkle forces Spotlight to reindex the updated app so that it won't keep pointing to the one in the trash.
 * Sparkle trims whitespace from around DSA signatures; this could cause crashes before.
 * Fixed a bug where the user choosing to skip a version would inhibit future automatic updates until the next launch.
 * Fixed a bug that could occur when the app has a localized CFBundleName.
 * .dmgs now work on Leopard.
 * The status controller's button now sizes appropriately to the localization.
 * Sparkle now works correctly with LSUIElement apps: it focuses them before displaying the update alert.
 * Sparkle now deletes failed partial downloads.
 * The update alert no longer floats above everything in the app.
 * Fixed varied and sundry memory leaks.
* A ton of other things that I've forgotten or were too small to mention!

# 1.1

* Optimized framework size: now only 1.4mb with all localizations and 384kb with only English (an English-only version is in the Extras folder).
* Added a new SUStatusChecker class for programmatically determining if a new version is available (see the docs); thanks, Evan Schoenberg!
* Added support for apps using SIGCHLD; thanks, Augie Fackler!
* Added a zh_CN update from JT Lee
* Added a Polish update from Piotr Chylinski
* Fixed DMG support for images with /Applications symlinks.
* Fixed a really stupid interval-checking bug that could cause repeated hits to the appcast.
* Fixed a bug where the check interval would be inconsistent if a value of 0 was stored in the user defaults.

# 1.0

* Additions:
 * Added real version comparison courtesy Kevin Ballard: Sparkle now knows that 0.89 < 1.0a3 < 1.0.
 * Added many localizations courtesy David Kocher's localization team.
 * Added a much better installation mechanism courtesy Allan Odgaard.
 * Added a user agent string to the RSS fetch request.
 * Added support for CFBundleShortVersionString in addition to CFBundleVersion, and support for a sparkle:shortVersionString attribute on the enclosure.
 * Added support for CFBundleDisplayName if available.
* Changes:
 * Automatic updating is now allowed by default, but only if DSA signing is on.
 * Pressing Escape or closing the update alert now reminds the user later.
 * Now when there's a stored check interval, Sparkle doesn't check immediately on startup the first time the app is launched because the user hasn't consented to it yet.
 * The update alert now remembers its size and floats.
* Bug Fixes:
 * Fixed installation of DMGs with multiple files enclosed.
 * Fixed a nasty memory leak.
 * Fixed a bug wherein having no value for allowing automatic updates would display a checkbox for the updates but would not honor it.
 * Fixed a bug in zip extraction that occurred in Panther.
 * Fixed release notes caching.
 * Fixed a bug wherein Sparkle refused to authenticate the installation if the user had cancelled authentication previously in that session.
 * Fixed a weird bug that would cause a second help menu to appear on first launch.
 * Fixed a bug that could occur when changing the scheduled check interval.
 * Fixed a bug wherein the host app could crash if the user clicked Remind Me Later before the release notes finished loading.
 * Fixed a bug wherein the behavior was undefined if the user manually initiated a check when an automatic one was already taking place.
 * Fixed wrapping on the description field in the update alert.

# 1.0-beta3

* Fixed a nasty crasher that occurred often when the user was not connected to the internet.

# 1.0-beta2

* Major Improvements:
 * Fully automatic updating! (see the Documentation: this is beta and off by default)
 * Added support for DSA signatures (see the Documentation).
 * Added support for MD5 sum verification.
 * Added Security.framework-based authentication for installing to privileged directories.
 * Huge refactoring of the codebase: there's now a Sparkle Xcode project, Sparkle is now a framework, and everything is modular / abstracted. And no more code-generated interface.
* Minor Improvements:
 * A SUUpdaterWillRestartNotification is sent out before restarting now.
 * Added key equivalents to alert panel buttons.
 * Error handling is much prettier now: technical messages are not presented to the user anymore.
 * There's now a test app for developers to see what Sparkle's like before using it.
 * Wrote new, pretty, extremely thorough documentation.
* Bug Fixes:
 * Relaunch behavior is much improved and shouldn't fail in huge apps anymore.
 * Fixed a bug wherein a failing tar command could crash the host app.
 * Sparkle now looks at InfoPlist.strings in addition to Info.plist.
 * Fixed some stupid typos.

# 1.0-beta1

* Major New Features:
 * Sparkle now supports scheduled periodic updates—read the Readme for information on how to use it.
 * Sparkle now supports WebKit-based release notes (for CSS and full HTML), which it displays in the main update alert, not a separate panel. The Readme has much more information. Sparkle will, of course, fall back on NSTextView if the host app does not include WebKit.
* Minor New Features:
 * Added support for .zip update archives.
 * Added support for .dmg update archives.
 * Implemented Remind Me Later to replace simple update cancellation.
 * Implemented Skip This Version functionality.
 * Added support for multiple feeds via the user defaults SUFeedURL key taking precedent over the one in Info.plist.
 * Added support for Sparkle's custom XML namespace, which is optional but may prove useful. See the Readme for more information.
* Bug Fixes:
 * Sparkle will no longer enter an inconsistent state if the user tries to update again while one is already in progress.
 * Sparkle now uses CFBundleName to determine the application's name instead of the app's filename.
 * Sparkle no longer crashes if the user cancels during extraction.
 * Lots of code refactoring.

# 0.1

* Initial Release
