Skip to content

Making Releases

Thorbjørn Lindeijer edited this page Nov 13, 2019 · 49 revisions

Preparing for a new release

For any release

  • Bump the version number in tiled.qbs, tiled.pri, appveyor.yml and docs/conf.py
  • Update the NEWS.md file with the main changes since the last release

For new feature releases

  • Make sure copyright year in About Dialog is up-to-date
  • Update the translation files (by running make ts in the translations folder)
  • Announce the string freeze to the translators

Making a Mac Release

First, make sure you can compile Tiled. You can rely on brew for installing both qt and qbs, after which you do a one-time set up of Qbs:

qbs setup-toolchains --detect
qbs setup-qt /usr/local/opt/qt/bin/qmake qt-brew
qbs config profiles.qt-brew.baseProfile xcode-macosx-x86_64
qbs config defaultProfile qt-brew

Alternatively, you can install any other version of Qt. For Tiled releases I currently use Qt 5.6 LTS, which avoids potential regressions in more recent versions and ensures that Tiled can still run on macOS 10.7.

Open the Terminal, and cd into the base folder of your Tiled checkout.

Run qbs to build Tiled:

qbs install --install-root install config:release

To include the auto-updater feature based on Sparkle, add projects.Tiled.sparkleEnabled:true. This requires the Sparkle.framework to be installed in /Library/Frameworks.

If it builds, you should have a Tiled.app in the install folder. You should run macdeployqt on it to copy the relevant Qt libs and plugins into it and apply the fixup-install-names.rb script to address remaining library loading issues. Then open it and make sure it works properly:

/usr/local/opt/qt/bin/macdeployqt install/Tiled.app
cd install
ruby ../dist/macos/fixup-install-names.rb
open Tiled.app

If everything is running smoothly, the Tiled.app can be zipped up for distribution:

ditto -c -k --sequesterRsrc --keepParent Tiled.app Tiled-$TILED_VERSION-macos.zip

Signing the release

For the Sparkle auto-updater to work, the release needs to be signed. The signature should be included in the AppCast file as the sparkle:dsaSignature attribute. It is created from the release as follows:

openssl dgst -sha1 -binary tiled-0.16.2.dmg | openssl dgst -dss1 -sign $TILED_PRIVATE_KEY_FILE | openssl enc -base64

Or using the tool shipping with Sparkle:

Sparkle/bin/sign_update Tiled-$TILED_VERSION-macos.zip <private_key>

Making a Windows Release

The process of making a Windows release is entirely automated on AppVeyor. It is triggered when a tag is pushed. The following steps are required for manual creation of an installer:

  • Install Qt. Releases can be made based on either MinGW 4.9 (32-bit) or Visual Studio 2013 (32-bit or 64-bit).
  • Install the WiX toolset.
  • Set either the TILED_SNAPSHOT or TILED_RELEASE environment variable to true.
  • Build Tiled using Qbs (tiled.qbs), with the property Tiled.windowsInstaller:true to enable building of the installer (when building from Qt Creator, put this in the Properties field in the Qbs build step).

If the build succeeds, you should find a tiled-...-winXX.msi file in the build directory.

Make sure to update the Chocolatey package as well.

Making a Linux Release

Since Linux is very fragmented, I'm relying on others to package Tiled for various distributions. I'm personally releasing an AppImage on GitHub and itch.io, which should run on most Linux systems.

The Tiled AppImage is built on Travis CI and uploaded to GitHub releases. You can find the commands in the .travis.yml file in the repository.

Arch Linux

Remember to flag the Arch Linux package as Out-of-Date.

Publishing the release on Itch.io

While snapshot builds are pushed to itch.io automatically, releases are done manually as follows:

mkdir windows-64bit
mkdir linux-64bit

mv Tiled-$TILED_VERSION-win64.msi windows-64bit
mv Tiled-$TILED_VERSION-x86_64.AppImage linux-64bit

butler push --userversion=$TILED_VERSION windows-64bit thorbjorn/tiled:windows-64bit
butler push --userversion=$TILED_VERSION Tiled-$TILED_VERSION-macos.zip thorbjorn/tiled:macos
butler push --userversion=$TILED_VERSION linux-64bit thorbjorn/tiled:linux-64bit

Notifying Existing Installs

Tiled checks https://www.mapeditor.org/versions.json for new versions. If the checked version is more recent that the installed version, a notification about the new version appears in the status bar.

The versions.json file can be edited on the gh-pages branch.

Clone this wiki locally