Apple - How does software updates work in OS X?

  • With cask, upgrading all of your installed applications (that installed with cask) is done with a single command:

    brew cask update
    

    This is an unofficial (community based) way to upgrade applications and only has free softwares on its repository (there is no way to purchase). Advantages of this mechanism are:

    1. It's scriptable
    2. It separates system applications from user applications (your installed applications are placed in ~/Applications/ instead of /Applications/) so it's per user.
    3. Installation of packaged installers is in the background so it doesn't need user interactions.
    4. Uninstallation of applications is programmed by its community so there is no worry about remaining files after uninstallation.
    5. It's possible to have multiple versions of applications systematically because the mechanism uses symbolic links for the latest or selected version of applications.
    6. The source of applications is kept in the cache so you can install and uninstall them without additional downloads.

    Disadvantages of this mechanism are:

    1. There is no differential upgrade. It downloads the whole application image (.dmg) or package (.pkg) and stores in the cache.
    2. Installation of applications is relied on symbolic links that may be not ideal (There are two copies of an application and may be repeated in "Open with" list)
  • There is also official App Store mechanism (the default) for upgrading applications that are installed with itself and it supports differential upgrade and can upgrade all of it's installed application with a single click; but unlike Cask it's not scriptable to run upgrade, installation, etc and does not keep the sources.

  • Another mechanism is in-app upgrade check that occurs when application starts. It is different from App Store upgrade and also supports differential upgrade.

I think it's up to you to choose which mechanism to use for which kind of applications, this comparison may help you.

I use the Cask for applications that is not provided in the App Store (like VLC, OS X FUSE, OwnCloud, Weka, etc.) and App Store for non-free applications i purchased. In-app upgrades are not suitable for me because it does not keep the source of downloaded data.


There isn't a general accepted "best" way for non Apple delivered, non Mac App store apps to update. There are many ways, some use linux tools, others reinvent certain wheels, others are scripting rsync/curl in a similar vein to how homebrew is built on a core script and ruby package recipes.

As far as apps self-updating (or at least notifying end users when an update might be available), some use a framework like sparkle to check for updates or program their own update check mechanism. Microsoft Office, Chrome, Firefox and many other apps don't need any other update mechanism other than opting in to the self-update mechanism.

Homebrew casks probably update as well as the core homebrew experience does for command line tools so I would start with that and then ask a follow on question if/when you have a specific app in mind that's not updating to your desires.

  • http://caskroom.io
  • http://brew.sh

If you manage Macs professionally, there are many frameworks to image, update, and even run your own "app store" to package specific versions of apps and side-step Apple's process.

  • http://www.johnkitzmiller.com/blog/better-software-updates/
  • http://www.lindegroup.com/autopkgr and https://github.com/lindegroup/autopkgr
  • https://www.munki.org and https://www.munki.org/munki-pkg/
  • https://github.com/unixorn/luggage