Publication d'une application
Objectifs
L’empaquetage (ou packaging) d’une application est une étape indispensable de sa mise à disposition aux utilisateurs de manière efficace et fiable. Hormis le cas où votre application n’est constituée que d’un unique exécutable et qu’elle ne nécessite pas de bibliothèque externe, vous devrez fournir un exécutable d’installation à vos utilisateurs.
Un exécutable d’installation, aussi appelé setup, est une archive exécutable dans laquelle tous les fichiers à installer sont compactés, et qui fournit aux utilisateurs un assistant pour l’installation de ces fichiers. L’assistant permet à l’utilisateur d’adapter la configuration dès l’installation, en fonction de ses besoins (emplacement sur le disque, fonctionnalités optionnelles, licence, etc.).
Cela est en particulier important sous Windows car l’installation d’un programme suppose souvent le stockage de clés dans la base de registre et de fichiers à un ou plusieurs endroits du disque, ce qui rend la désinstallation non triviale pour un utilisateur normal. Le programme d’installation mettra aussi à la disposition de l’utilisateur un programme pour désinstaller proprement tous les fichiers et les configurations stockés sur son disque.
Nous vous présenterons...
Comprendre les licences
Avant d’entamer le packaging de votre application, il est très important que vous compreniez bien le fonctionnement des licences d’exploitation des logiciels et bibliothèques que vous intégrez à votre package ou à votre archive. Dès que vous utilisez un logiciel, une bibliothèque tierce ou encore des contenus multimédias que vous n’avez pas créés, vous avez différents droits et obligations. Ceux-ci diffèrent en fonction de l’auteur, et lui seul est maître de ce qu’il vous autorise à faire avec son logiciel, sa bibliothèque ou ses images.
Il existe un (trop) grand nombre de licences, plus ou moins restrictives. En effet, en l’absence de licence pour un produit nous considérerons qu’il est à usage libre ; la présence d’une licence induit au pire une restriction, au mieux l’absence de restriction.
Les restrictions peuvent être de plusieurs natures :
-
Utilisation : limitation à un certain type de clientèle. Une licence peut n’être accordée qu’à des universitaires par exemple.
-
Compilation : limitation dans l’édition de liens. Vous n’aurez peut-être pas le droit de lier la bibliothèque statiquement avec votre exécutable, c’est par exemple le cas de Qt en licence open...
Les dépendances
Vos logiciels posséderont dans la plupart des cas un certain nombre de dépendances, c’est-à-dire de fichiers bibliothèques, programmes tiers ou fonctionnalités liées à l’environnement d’exécution.
Vous devrez toujours faire le point sur les dépendances de vos logiciels afin de ne pas omettre d’inclure les fichiers nécessaires dans votre package ou de signaler à vos clients les pré-requis au fonctionnement du logiciel.
Parmi les dépendances vous devrez vérifier celles-ci principalement :
-
Bibliothèques de Qt (C++).
-
Plugins Qt Quick.
-
Bibliothèques tierces (fonctionnalités réseau, multimédia, etc.).
-
Bibliothèques runtime système.
-
Graphismes, polices de caractères et sons qui n’ont pas été intégrés comme ressource.
-
Licences (GPL, LGPL, etc.).
-
Plug-ins Qt.
Cette liste de dépendances n’est pas exhaustive, il vous appartient de les contrôler.
Sous OS X, il n’est pas nécessaire d’effectuer ce contrôle car le packaging est simplifié par l’utilitaire macdeployqt.
Sous GNU/Linux, l’utilitaire est nommé lindeploygt. De plus, vous pouvez découvrir les dépendances de votre programme en exécutant la commande suivante :
$ ldd -v votreProgramme
Cette commande...
Créer un installeur universel
Qt propose un système universel pour la création de programmes d’installation. Celui-ci a été créé avec les API de Qt et propose à l’utilisateur final un assistant lui permettant de choisir les fonctionnalités qu’il souhaite installer ainsi que l’emplacement du programme, et de consulter la ou les licences fournies avec votre logiciel. Il est même possible de mettre en place une installation par Internet qui permet à l’utilisateur de ne télécharger que les paquets dont il a besoin.
Digia accorde une licence spéciale aux utilisateurs du framework d’installation Qt (en version 3 et supérieures) en leur permettant de créer un installeur sous la forme d’une binaire avec liaison statique des bibliothèques Qt, à la condition que l’installeur résultant et son contenu ne modifie pas le comportement des bibliothèques fournies par Qt..
L’outil de génération d’un installeur pour Qt s’appelle Qt Installer Framework. Il n’est pas fourni dans le SDK officiel mais ses sources sont téléchargeables sur le site du projet Qt. La documentation est accessible à cette adresse : https://doc.qt.io/qtinstallerframework/index.html
Avant de pouvoir utiliser cet outil il faut l’installer à l’aide...
Créer un installeur spécifique à Windows
Différentes solutions s’offrent à vous si vous n’utilisez pas l’installeur universel. Parmi celles-ci figure un des systèmes les plus populaires : NSIS.
Il s’agit d’un logiciel qui crée un exécutable d’installation setup.exe à partir d’un script que vous aurez écrit. Le script décrit la manière dont l’assistant d’installation devra se comporter, les écrans qu’il devra afficher et les choix qu’il devra offrir à l’utilisateur. Il décrit aussi les fichiers à inclure dans l’installation et l’endroit où ils doivent être déployés. Le script vous permettra aussi d’inscrire des données dans la base de registres de Windows et d’exécuter des programmes externes pour effectuer, par exemple, l’installation d’un autre logiciel ou d’un driver système.
Le programme d’installation ainsi produit est monolithique, il intègre toutes les dépendances que vous avez incluses dans le script. Si vous utilisez un certain nombre de bibliothèques Qt, et notamment les plus volumineuses comme Qt Webkit, votre exécutable dépassera certainement la taille de 30 Mo. Pensez donc à n’inclure dans celui-ci que les bibliothèques...
Créer un installeur pour OS X
Le packaging d’une application sous OS X peut être fait de plusieurs manières, le choix dépendra de la façon de vous souhaitez commercialiser votre programme ou le rendre disponible, et des contraintes de sécurité liées à la plateforme de déploiement ou d’exécution.
En d’autres termes, si vous vendez ou donnez votre logiciel sur l’App Store d’Apple, vous devrez certifier votre exécutable et tout ce qu’il contient avec votre certificat de développeur. Dans le cas contraire vous avez davantage de liberté, mais sachez tout de même que si votre programme n’est pas certifié, les machines sous OS X 10.8 et supérieurs compliqueront son installation en indiquant à l’utilisateur qu’elle provient d’un développeur non identifié et décourageront son installation.
Prenez également garde à une chose : les utilisateurs de Mac ne sont pas habitués aux installeurs d’applications. Habituellement, les applications pour Mac sont livrées sous la forme d’une image disque compressée (.dmg) contenant un bundle d’application (voir ci-après). Pour installer une application sur un Mac, il suffit de glisser-déposer le bundle dans le dossier /Applications. C’est un élément d’érgonomie à prendre en considération dans vos développements.
1. Bundle
Le bundle d’application est le programme créé par la compilation sous Qt. Il s’agit d’un dossier portant l’extension .app et contenant l’exécutable de votre programme et les dépendances. Le dossier /Applications d’OS X ne contient que des bundles, OS X masque l’extension .app, mais si vous listez ce répertoire avec la ligne de commande vous constaterez qu’il s’agit de dossiers portant l’extension .app.
Le bundle offre...
Créer un paquet pour Debian/Ubuntu
La création d’un paquet d’installation pour Debian ou Ubuntu met en jeu l’utilitaire dpkg. Celui-ci vous permet de créer un paquet mais aussi à l’utilisateur final d’installer votre application ainsi que les dépendances comme les bibliothèques de Qt.
1. Arborescence
Avant de pouvoir créer un paquet dpkg, vous devez créer un répertoire racine contenant les fichiers à packager et y placer un certain nombre de dossiers et fichiers :
DEBIAN/
/changelog Fichier texte dans lequel vous indiquez les
changements survenus dans les différentes versions
de votre application.
/control Fichier contrôlant la création du paquet (voir
ci-dessous).
/copyright Fichier de licence ou de copyright.
/postinst Script exécuté à la fin de l'installation sur
l'ordinateur...
Inclure les plug-ins de Qt
Il est important de ne pas oublier d’inclure dans votre paquet d’installation les plug-ins de Qt que vous utilisez. Parcourons les points à prendre en compte lors de la construction de votre paquet d’installation.
1. Windows
Sous Windows, les plug-ins se présentent dans leurs répertoires d’origine au même niveau que l’exécutable de votre application. Par exemple, si vous utilisez le plug-inbearer\qcorewlanbearer.dll vous devrez créer un répertoire bearer au même niveau que l’exécutable et placer la bibliothèque dans ce répertoire.
C:\Program files\MonApplication\
MonApplication.exe
QtCore5.dll
QtGui.dll
QtWidgets.dll
bearer\qcorewlanbearer.dll
sqldrivers\qsqlmysql.dll
2. OS X
Sous OS X vous n’avez rien à faire, l’utilitaire macdeployqt s’occupe de tout pour vous, il copiera les plug-ins au bon emplacement dans le bundle de votre application.
Cependant, n’oubliez pas de les signer individuellement, comme vous l’avez fait avec les bibliothèques !
3. GNU/Linux
Sous GNU/Linux, les plug-ins doivent être positionnés dans leurs répertoires d’origine au même niveau que l’application, ou dans le PATH du système....
Tester son application
Il est crucial de tester votre application et son installeur sur une ou plusieurs machines, ou machines virtuelles, dépourvues d’outils de développement et, si possible, fraîchement installées. En effet, certaines dépendances sont disponibles sur votre ordinateur de développeur et ne le sont pas sur celui de vos clients, par exemple sur une machine tout juste achetée. Vous aurez alors peut-être la surprise de découvrir qu’il manque un certain nombre de dépendances à votre paquet d’installation.