[Sparkle] Proposed solution
Andy Matuschak
andy at andymatuschak.org
Sun Aug 5 17:40:47 PDT 2007
Alright guys, thanks for talking this out with me. I think I have the
basic behaviors I'd like in mind now. Here's what I'm envisioning:
User opens an app using Sparkle for the first time. It gives a brief
explanation of what Sparkle is and asks if he wants to install it.
If user agrees, the app's stub downloads and installs the package: a
prefpane and a daemon with login item.
If the user refuses, nothing happens; he'll have to find the Sparkle
homepage later if he wants it.
The daemon begins checking for updates. If one is found, a Sparkle
icon appears in the dock and bounces (though perhaps not repeatedly
like Software Update—argh!), badged with the number of updates
available.
The update window looks identical to Apple's Software Update window.
Release notes are displayed. There are check boxes, but all are
checked by default.
Buttons: Install Updates (default); Always Install Updates; Remind Me
Later
Like in Apple's SU, you can skip an update by deleting it from the
table view, but I'll also have a "Skip Version" button on the right
side of each row. When clicked, that update will disappear, and
subsequent updates for that app will be unchecked by default until the
user updates it again. If an update to this application is the only
available one, the update window won't be triggered.
Always Install Updates does the thing I want: just installs the damn
updates when they appear. Maybe there'll be Growl notifications.
If an application is open, it'll say "MyApp is running; update will
install when it is quit."
The prefpane has two tabs: General, and Applications
The General tab has:
A big Check Now button with last check timestamp
A check for updates check box next to a popup button with: Daily
(default), Nightly, Weekly
A check box for "install new updates automatically." (off by default,
but checked by that Always Install Updates button)
The Applications tab has a big table of all registered applications;
columns include:
Icon, name, author, current version.
Update action, a popup button: [Ask Me (default), Always Install,
Ignore]. The last of this triggers similar behavior to the "Skip
Version" button described above.
When a new app is launched, it is registered with the Sparkle daemon
unless it's launched from a read-only location. The Sparkle daemon
keeps a CFURLAlias to the app, so it'll be good even if it moves.
I think this design deals with everything as elegantly and
unobtrusively as possible while still giving a lot of flexibility.
Feedback?
Things not yet figured out:
Sparkle+. I want to merge that stuff in, but I'm not sure how it fits
in the UI. Sparkle's already asking something of the user on that
first prompt—installing a prefpane for this weird thing!—so I don't
want to ask about sending anonymous info then too. I think instead
that I'll ask the user if it's okay to send that data on first click
of the "Install" button from the "hey there are updates" prompt.
Old versions. Do we care? Seems like it could cause issues pretty
readily, and it wouldn't be used much.
Branches. This could probably wait until after an initial
implementation is done, but I really would like to be able to support
public/private betas while concurrently updating the main feed. Let's
keep talking about posets.
Licenses. What do you think of the solution in my last email about
those?
- Andy Matuschak
PS: Is anyone else amused that MS's software updater duplicates
Apple's SU UI, but there's never more than one update at a time, so a
table view is really silly?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.andymatuschak.org/private.cgi/sparkle-andymatuschak.org/attachments/20070805/4907d4b4/attachment.htm
More information about the Sparkle
mailing list