====== AutoUpdater ====== Since our MiniDisc software is subject to ongoing development, it is highly desirable for the users to always have the latest version installed to be able to benefit from the latest updates in the software. In order to assure this, many software packages leverage the use of automatic updates. These updates can either be performed externally by a package manager like it is found on most Unix installations or by an update routine integrated into the program code of the software package. Since automatic updates is very popular among many application developers, several ready-to-use software libraries which implement an automatic updater exist and can easily be integrated into the source code of a software package. The most popular software updaters include - Sparke (MacOSX) - [[http://sparkle.andymatuschak.org/]] - WinSparkle (Windows) - [[http://winsparkle.org/]] - Omaha (Windows) - [[http://code.google.com/p/omaha/]] As mentioned before, Linux and most other Unix derivatives already include a package management system which takes care of periodic updates and thus there is no additional update management within the application necessary. In fact, all popular cross-plattform applications like Firefox or Google Chrome that provide an integrated update mechanism through a menu option, have this option disabled in their Linux versions since the package manager already takes care of it. Thus, we will concentrate on integrating automatic updates into the software application on MacOSX and Windows only. ===== Software versioning ===== In order for the automatic updates to properly work, they need to be able to determine the version of the currently installed instance of the software package. The version number is commonly defined as a three-digit, dot-seperated number in the pattern: x.y.z where //x// denotes the //major//, //y// the minor and //z// the //patch level// version. The major version is usually increased when huge changes are introduced when reaching a milestone which justify a new milestone while the minor version is usually increased when new features are integrated or larger bugs are fixed. The patch level is increased when minor updates to the software were made, usually in form of smaller bugfixes and security updates. The first version of a software package is therefore usually denoted as //0.0.1//, which is also the case for [[qhimdtransfer]]. However, since the software is still under heavy development, we haven't made any official releases yet and are never increasing the version number up to now. In order to be still able to track any changes in development and thus updates, we can leverage the (abbreviated) hash of every individual commit which //git// creates. The hash for the current commit can be determined with //git describe//: glaubitz@squeeze64:~/linux-minidisc> git describe --always 0837a0b The parameter "//--always//" when no tags are defined, i.e. version numbers. But since we want human-readable version numbers, we will simply use tags in future to define these and call //git describe// to read the full //tag// from git and display it in the about dialog as shown below. An updated about dialog displaying the version should look like this mock-up: {{:aboutdialog-version.png|200}} See: * [[http://www.qtcentre.org/wiki/index.php?title=Version_numbering_using_QMake]] * [[http://www.qtforum.org/article/25050/build-date-from-compiler-using-qmake.html]] ===== Automatic Updates for QHiMDTransfer on MacOS ===== We will be using Sparkle See: [[http://el-tramo.be/blog/mixing-cocoa-and-qt]] ===== Automatic Updates for QHiMDTransfer on Windows ===== We will be using WinSparkle See: [[http://winsparkle.org/wiki/Doc/BasicSetup]]