Mike Bombich
Dec 20, 2012 @ 4:58 pm

Before you yield pitchforks, please understand that this is not a decision I have taken lightly. I have given this long and careful consideration. Here are the reasons that I have chosen to drop support for Growl, starting with Mountain Lion:

  1. The Growl framework has caused many applications (including CCC) to crash, and that leads to a poor user experience for people that might not even have Growl installed on their system. The Growl developers tackle these issues all the time, but their fix cycle and my release cycle rarely coincide well enough to not leave lots of my users in the lurch for long periods of time.
  2. I felt pretty burned by the Growl 1.3 release. It was posted long before the developer SDKs were provided to the rest of us. That meant that users were updating to Growl 1.3 well before developers had an opportunity to make adjustments for the new version. Apps like CCC require minor customizations to Growl to make it work (or at least access to the SDK to understand how it changed), so not having access to the SDK meant that I couldn't implement the new functionality even if I wanted to, and this made us look bad to many Growl users.
  3. CCC's scheduled tasks run in the root security context, and this makes the implementation of Growl within CCC complicated. It's nothing that I couldn't overcome, but I spent many, many hours making this work, and the Growl team broke it all with the 1.3/Lion release.
  4. I can't use the same version of the Growl framework on the three OSes that I support, I have to bundle two different versions in my application and load the correct one at launch time. This is messy and complicated, and when I was developing this functionality, there was no sample code available explaining how to do this. I don't enjoy spending numerous hours trying to make third-party software work with my software when it will benefit only a small portion of my users.
  5. Finally an alternative exists for user notifications (ML notification center). This isn't everything that Growl is, but it's a lot of it. It took me all of 15 minutes to implement support for Notification Center in CCC, and it works perfectly, pretty much every time. I don't worry that supporting Notification Center will crash my application.
  6. Scheduled tasks support pre and postflight scripts, so you can leverage these for posting notifications to Growl (e.g. with GrowlNotify, more on this below).

Developing a user-oriented product is very, very different from developing a framework for developers. If you're going to develop a framework that you expect other developers to add to their applications -- if you're going to write code that you expect another developer to run within his/her application -- you have to behave like that kind of developer. Frameworks require a LOT more testing than user-oriented applications, and it is imperative that these frameworks change at a MUCH slower pace and with a lot more lead time. Frameworks and their SDKs should be available to developers long before the product ships! Apple has this figured out, I can continue to use frameworks for at least three OS cycles, meaning that I can support at least three OS releases with one product. That isn't the case with Growl, I need a special version of the framework for Snow Leopard, and yet another for Lion/Mountain Lion.

I don't disagree that Growl adds some great functionality that Notification Center doesn't have, and may never have. I just can't justify spending this much time making it work with my software and protecting my software from it.

Touching on a couple specific points others have made:

in my case I need notifications pushed to my iPhone

CCC offers email notifications, and those emails can be retrieved on mobile devices. I'm not suggesting that this is an exactly comparable solution, but the functionality should be very close. You could also use Prowlmail to forward specific emails as push notifications.

Growl can push notifications directly into Notification Center

I don't want my point to be lost in this -- I'm not dropping Growl support because Notification Center replaces its functionality. I'm dropping Growl support because it's a large portion of third-party code that I don't want to run inside of my application, and because it requires too much of my time to debug Growl-related issues. If/when Growl "just works" without the bugginess that I have seen in the past, and if it can support the same OSes that CCC supports in one product, then I'll reconsider adding the framework back to CCC. I hope everyone understands that this is an entirely pragmatic, time vs. reliability vs. functionality decision.

The removal of Growl support for Mountain Lion is a showstopper for me

Last point -- CCC offers opportunities to run third-party applications before and after your scheduled backup tasks run, and there is a way to generate Growl notifications at that time: growlnotify.

Workaround

You can download growlnotify here:

http://growl.cachefly.net/GrowlNotify-2.0.zip

And you can run growl notify from CCC pre/postflight scripts. Two example scripts are attached to this discussion. Pre/postflight scripts are documented here:

Running shell scripts before and after the backup task

Mike Bombich,
Bombich Software

Sample Pre/Postflight Scripts