Sparkle is the updates framework for cocoa that “just works” , yea ok it does , however the documentation for it is a bit lacking on some very important aspects that i discovered over time :
1 – the preferences for your application must have SUAutomaticallyUpdate TRUE for autoupdates to happen , just setting SUEnableAutomaticChecks TRUE in the app’s Info.plist is not enough ,
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@”SUAutomaticallyUpdate”];
[defaults synchronize];
OR
SUUpdater *updater = [SUUpdater updaterForBundle:[NSBundle mainBundle]];
[updater setAutomaticallyChecksForUpdates:YES];
OR
create a checkbox in the preferences of your app to toggle it on , unless you do that you have to use one of the methods above directly in code.
2 – since 1.0 sparkle implemented sparkle:shortVersionString to match CFBundleShortVersionString , the problem however is that it is only used when it also sees a different version in sparkle:version , for example if your app has
CFBundleVersion 1
CFBundleShortVersionString 1.1
and the appcast has
sparkle:version=”1″
sparkle:shortVersionString=”1.2″
sparkle will say you have the latest version , it only uses shortVersionString if version differs from CFBundleVersion
3 – some times you might also want to force a update , either when the user clicks a Update Now button or when the application launches
SUUpdater *updater = [SUUpdater updaterForBundle:[NSBundle mainBundle]];
[updater checkForUpdates:nil];
OR
[updater setAutomaticallyDownloadsUpdates:NO];
[updater checkForUpdatesInBackground];
Both check for a update , however the first way also notifies the user if the current version is the latest one , so should only be triggered from a user action.
The second can be ran transparently on startup as it will not alert the user unless there is a new update , remember to set automaticallydownloadupdates off , or else the updates will only get downloaded and never installed (bug in Sparkle 1.5 b6)
EDIT: the bug has been confirmed for 1.5 b6 by Andy Matuschak , it is fixed in the github sources however http://github.com/andymatuschak/Sparkle/