[Sparkle] Thinking about unifying Sparkle...

Andy Matuschak andy at andymatuschak.org
Sun Aug 5 15:55:20 PDT 2007


On Aug 4, 2007, at 8:11 PM, David Symonds wrote:
> A bunch of awesome stuff on posets.

This is really (probably overly) fancy but at the same time very cool.  
I like the idea of being able to update beta testers while at the same  
time releasing main-line bugfix releases. There are some  
implementation details we'd have to muddle with. I'm not sure this'd  
be very happy living in XML like the rest of the appcast; it doesn't  
really allows hierarchies of items, so we'd have to have some kind of  
header with this information. But something like  
<sparkle:versionordering>0.1 < 0.2 < 0.99b1 < 1.0</ 
sparkle:versionordering> is so ugly and we totally can't do that.

It's also really important that branches be named. The problem is that  
if the tree can be branched at any one time, we can't just have a  
plain preference for something like "development releases" vs "public  
releases", etc. I really want to keep the prefpane UI simple.

I do want to make an app to create and update appcasts with minimal  
data entry, but I'm not sure how I'll do this kind of thing in that  
UI, either. Thought is required.

On Aug 4, 2007, at 10:58 PM, Steven W Riggins wrote:
> In fact, Sparkle should be a generic installer as well, in other
> words, apps can register what should be uninstalled.

I'm sorry, I don't understand what you mean by this. What should be  
uninstalled? So that you can remove an app, too, and all its stuff in  
Library, etc, will go away?

> Also some apps, like shareware Snak, will stop working if you get a
> version 2 years past the date you licensed it, without a new
> license.  If Sparkle could handle THAT it would rock.  "There is a
> new version of Snak available, but it requires a new license..."

I would like to handle this. Snak has a particularly pathological  
case. For simple cases, a "paid upgrade" flag in the appcast is all  
that's required: we just notify users that there is an update, but it  
requires a paid upgrade. The thing is, we ideally want to get them  
going through the license process, then download the update. We don't  
want to just download it when they click "visit the site to buy the  
license", because then if they decide not to, they're screwed. We also  
don't want to make them download the update manually, because that's  
so 2005.

More likely, since every uses difference licensing systems and simply  
directing users to the app homepage probably isn't sufficient for many  
cases, I'll have an application delegate protocol through DO, and I'll  
let the app do the logic for whether the update will require a new  
license (so Snak will work), and I'll let it deal with presenting the  
upgrade UI and letting Sparkle know when the upgrade is complete so it  
can continue the download.

For people who just use web sites for license purchases, one solution  
would be to put a sparkle:// link on the "thanks for the purchase!"  
page.

- Andy Matuschak

On Aug 4, 2007, at 8:11 PM, David Symonds wrote:

> On 05/08/07, Andy Matuschak <andy at andymatuschak.org> wrote:
>>> I'd suggest using posets to represent version changes, which could  
>>> be
>>> encoded fairly compactly in an appcast, so the whole clunky
>>> version-guessing-game can be almost completely removed.
>>
>> Can you give me an example of how you see this working? Another issue
>> is the UI for selecting which branch to be on. If there's a simple
>> list of branches, we could just have a default branch and then  
>> options
>> in the prefpane. But posets aren't that simple. Also, it'd be nice to
>> be able to give the developer some control somehow over access to
>> difference branches.
>
> There are two issues:
>  (1) representation of the relationships between releases (of any  
> kind)
>  (2) the semantics of the structure of those representations
>
> I'm learning to use git at the moment, and it's shaped a bit of my
> thinking about this, so here's my initial take on (1), above:
>
> Let's take the fictional "MyApp", which has a successive linear set of
> initial releases, with versions 0.1, 0.2, 0.99b1, 1.0rc1, and 1.0. We
> can represent those as elements of a poset
> (http://en.wikipedia.org/wiki/Poset):
>
> MyApp 0.1 < MyApp 0.2
> MyApp 0.2 < MyApp 0.99b1
> MyApp 0.99b1 < MyApp 1.0rc1
> MyApp 1.0rc1 < MyApp 1.0
>
> Or, more compactly:
>
> MyApp 0.1 < MyApp 0.2 < MyApp 0.99b1 < MyApp 1.0rc1 < MyApp 1.0
>
> So far so good, though it already has the benefit of not needing any
> fancy version comparison functions, so the developer can use any wacky
> versioning system he wants. Now, imagine he starts working on version
> 2.0 with some beta testers, but keeps making minor revisions of 1.0.
> Here we get a divergence from the strictly linear version ordering:
>
> MyApp 1.0 < MyApp 1.1 < MyApp 1.2 < MyApp 1.3
> MyApp 1.0 < MyApp 2.0b1 < MyApp 2.0b2 < MyApp 2.0b3
>
> Eventually, MyApp 2.0 will be ready for release, so the developer can
> mark it as superseding MyApp 1.3, as well as the final beta version:
>
> MyApp 1.3 < MyApp 2.0
> MyApp 2.0b3 < MyApp 2.0
>
> At this point, we get a nice diamond shape, or two parallel tracks
> ("branches"). If you excuse my crummy ASCII art:
>
>                    MyApp 1.1 < MyApp 1.2 < MyApp 1.3
> MyApp 1.0 <
>        < MyApp 2.0
>                    MyApp 2.0b1 < MyApp 2.0b2 < MyApp 2.0b3
>
> As for (2), each of these branches could be labelled easily enough,
> and a requirement could be made to mark one as the "default" branch,
> which can easily be propagated through the poset, etc.
>
> Thoughts?
>
>
> Dave.
> _______________________________________________
> Sparkle mailing list
> Sparkle at lists.andymatuschak.org
> http://lists.andymatuschak.org/listinfo.cgi/sparkle-andymatuschak.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.andymatuschak.org/private.cgi/sparkle-andymatuschak.org/attachments/20070805/eb88f685/attachment.htm 


More information about the Sparkle mailing list