Previous Entry Add to Memories Tell a Friend Next Entry
Sparkle Scalability
userpic
[info]chanson
A ton of Mac OS X applications these days are using the excellent Sparkle framework — created by Andy Matuschak and maintained by many — to easily implement their own software update mechanism via Appcasting — essentially, syndicated applications. You just add Sparkle to your application, set a few keys in your Info.plist file, and create an RSS feed on your web server where each new entry has an enclosure with a new version of your application.

For what it was designed for, Sparkle works beautifully: It Just Works™ in a way that more software should, providing a very transparent user experience. If you're building Mac OS X software, I strongly recommend you leverage Sparkle for your software updates rather than writing your own update mechanism — regardless of whether you're a part-time indie developer or a multi-billion dollar company.

There's one downside to Sparkle, though: Its scalability, not on the server side, but on the end user's system. I currently have 23 applications in my Applications folder that embed the Sparkle framework. That's not a big deal; the framework is small and even if different applications embed different versions, they won't interfere with one another. The scalability problem comes with updating: I'm only asked to update an application when I run it. If I want to make sure all 23 applications are current, I need to launch each one!

It would be very cool if there were also an optional Sparkle Update Manager application or preferences pane that could be downloaded and installed, which could optionally centralize the update process. An application could check in with the Sparkle Update Manager if it's installed, and if this checkin is successful, all updating would happen via its embedded engine instead. This would have a few significant benefits:
  1. It would make it possible to update all Sparkle-using applications with a single click. Just open the Sparkle Update Manager, click "Check for Updates," and any of your applications using Sparkle would be updated.
  2. It would provide a single place to set preferences for application updates — whether to check for updates daily or weekly or only on-demand, whether to send system information with the update request, and so on.
  3. It would make it easier to post security or other updates for Sparkle. If flaws or bugs are found in Sparkle, the update could be distributed in a "centralized" fashion that would take effect across a user's entire machine by simply updating the Sparkle Update Manager.
Overall, I think this would be very good for the Mac OS X user community, and not too hard to implement.

There's also already a model that Sparkle can follow for this: The Growl notification framework. You can build an application that has basic Growl functionality by just embedding it in your application and calling its API. Or you can install the Growl distribution and get a whole bunch of additional features, such as control over the style and behavior of notifications from different applications, selective enabling of application Growl support, and so on. I think it provides a great model for third-party frameworks that add behavior to multiple applications to follow.

(Leave a comment)
I hear they make some good medication for people who launch 25 apps to make sure they are all up to date :-).

Seriously, if you aren't using the app, there's little harm in not updating it. Next time you launch, it will update if necessary.

Ah, but what if the app can't update itself because some combination of things on your system has rendered it broken? (That's happened to me before - sorry, I can't share details.) Yeah, you could also get into a situation where a hypothetical Sparkle Update Manager could also wind up broken, but I think it's actually less likely because it would be a single-/special-purpose tool rather than an app that uses a wide variety of system services and APIs.

Well, there is AppFresh. Not sure if this is what you had in mind but if your app uses Sparkle, it will use its appcast to update it. Haven't used it myself but here's a link:

http://metaquark.de/appfresh/


Hey, that looks really handy! Thanks, anonymous!

I've been using app fresh for several days now and frankly I very much like the look and feel of the program, but there are certainly still some kinks to work out...

App Update is another option

(Anonymous)

2007-07-30 05:03 pm (UTC)

I haven't tried AppFresh, but App Update is a widget that seems to work similarly.

http://blog.gkaindl.com/downloads/app-update

- bradsmith74

Re: App Update is another option

(Anonymous)

2007-07-30 08:22 pm (UTC)

While the App Update widget is *much* better in finding updates for my applications, App Fresh works for everything else. I'd like to point out that App Fresh only checks iusethis.com, while the App Update widget checks Apple's downloads, MacUpdate, and VersionTracker.

Really, you should use both alternatingly. It's about the best thing you can do.

Oh, also check out AppUdate's little brother widget, WidgetUpdate.

Re: App Update is another option

(Anonymous)

2007-08-12 03:41 pm (UTC)

Thats not correct. AppFresh checks first for available Sparkle feeds and for the apps not having an appcast itself, it will check iusethis.com. It also checks for Apple updates using a technology based on Apples very own Software Update. It really depends on the apps you have installed if it works better than other apps, but with more devs using appcasts and iusethis.com it will become better too.

Check out: http://metaquark.de/blog/archive/About-Appcasting/

I was under the impression that Sparkle would eventually become a preference pane...

Here we go, it's in the roadmap (http://sparkle.andymatuschak.org/roadmap):

Milestone: Sparkle 2.0
This is the a major Sparkle release. In addition to all the normal bug fixes and minor enhancements, major new goals include:

A client-side Sparkle Updater that updates all Sparkle-compatible programs on the system
A program to automatically generate / update appcasts and to create attractive release notes
Support for bundles: preference panes, plugins, etc.

OCD overload

(Anonymous)

2007-07-30 05:40 pm (UTC)

But, if I'm not using an app, I don't want to be bothered with updates. Heck, I might even skip an update or two. (gasp!)

I do agree that Sparkle's biggest flaw is that it interrupts you right when you open the app. I'd be much happier with an option that allowed me to download the update now, in the background, and install it when I quit the app.

Re: OCD overload

(Anonymous)

2007-07-30 08:28 pm (UTC)

I'm working in a Federal environment, and security is locking us down more and more tightly. They are very concerned about any software that is on a computer, whether or not it is ever run. If the software is there, and has a security vulnerbility, then the machine is vulnerable.

The move is toward taking away the user's ability to install any software, and to only allow software that the IT org can update remotely.

Having most apps able to be automatically updated, and to report their update level, would be a great weapon against the ultimate lockdown.

Little point?

(Anonymous)

2007-07-30 05:43 pm (UTC)

Why update apps you don't use? :) Also, adding this central updating mechanism has it's own set of problems, including that of updating. Of course you can Sparkle to update this tool as well, but that means it will need to stay backwards compatible with all the Sparkle versions used by all the applications you have installed.

I wonder if it would be possible to plug into the Apple's Software Update mechanism.

There's no documented or supported way of doing so.

There definitely is no way doing this, at least in tiger. AppFresh integrates the apple software update as well as sparkle and iusethis appcasts. You might ask the devs ;)

Unless Apple does this in the OS, only hard core geeks are going to use it. Who needs another preference pane?

Most people are better off not updating constantly anyway, as long as their computer is getting work done for them.

Great idea

(Anonymous)

2007-07-31 02:28 am (UTC)

I had the same idea and went to the Sparkle site with the intention of sharing it but found no contact details. I didn't notice that roadmap bit, but that says it all. It's a natural progression.

Thinking about this... surely this could be achievable without apps having to support it explicitly? All of the information for Sparkle to do its job is there in the Info.plist file, so an external app could go through and update any Sparkle-enabled apps without them having to register with the updater at all.

Does it really matter?

[info]kapowaz

2007-07-31 10:26 am (UTC)

I think you may be slightly overstating the problem. Ensuring all of your applications are up-to-date might be the sort of thing an OCD-suffering nerd worries about, but for the typical user it may not be something they care about. Worse, they might not actually want it at all.

Updating applications to their newest versions comes with the added risks of data loss, incompatibility with stored data and (potentially) increased resource usage. When users care (or worry) about these things, it's very likely they'll want to update their applications individually after careful consideration. It's also possible that they don't some applications any more, and so updates to these would just be wasted bandwidth/disk space.

I can think of certain scenarios in which a centralised update mechanism is a very good idea (for instance, Valve Software's Steam platform automatically updates games you've purchased, since they mostly rely on their own game engines; but even there you can disable updating of certain games), but equally I think there's a very good case for not having centralised updates. Consider how the playing field would look if Sparkle didn't exist; each app would implement its own update mechanism, and they'd all work individually. Additional headaches for the end user if this were the case? Not many...

Terriible idea

(Anonymous)

2007-08-01 08:47 pm (UTC)

I hate it when FireFox tells me it needs to install some .x.x.x fix and needs to relaunch when i start the app every blue moon.

Imagine you have your 23 apps and not only when you start the one you clicked on 3 month ago say it needs to update, but instead this one is ok, but another one you haven't clicked on since ages wants to update?? This is madness...

You could probably silently download and ask on startup if you wan to use the new version. But still...

It's a good thing that's not what I'm suggesting then, duh.

I'm suggesting a central place where I can push the "Check for Updates" button or specify that updates for all registered apps should be checked at a specific interval. You know, a user experience like Apple's Software Update mechanism. Not "check for updates to any apps using Sparkle when launching any app using Sparkle." That would be pretty stupid, I'm glad I didn't suggest it.

And Now There Is....

(Anonymous)

2007-08-11 01:40 pm (UTC)

http://hohle.net/projects/perrier/

Sparkle Updater on Sparkle roadmap

(Anonymous)

2007-08-16 06:09 am (UTC)

This is one of the features of Sparkle 2.0 according to the roadmap on http://sparkle.andymatuschak.org/roadmap :
"- A client-side Sparkle Updater that updates all Sparkle-compatible programs on the system"

Appfresh - steals bandwidth?

(Anonymous)

2009-06-06 03:41 pm (UTC)

There are issues with using AppFresh to update freeware. The thread:

http://lists.andymatuschak.org/pipermail/sparkle-andymatuschak.org/2008-May/000425.html

discusses some of them.

Re: Appfresh - doesn't "steal" bandwidth

[info]chanson

2009-06-06 08:26 pm (UTC)

That's a feature of AppFresh, not an "issue" with it.

You decided to make your updates available via the web - regardless of whether your software is freeware, Open Source, shareware, commercial, whatever. AppFresh simply presents those updates.

It's a bummer that you have lots of users who download your app and never use it again, but that's not AppFresh's problem. About the only problem your exchange on the Sparkle list points out is that AppFresh may not pay attention to the Info.plist key that says how often to check for updates. If it does pay attention to that, then I don't see that you'd have any grounds to complain about its behavior at all.

(Leave a comment)