[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