joliclic blog

Aller au contenu | Aller au menu | Aller à la recherche

samedi, mai 21 2011

Distribuer votre appli XULRunner - 2.1 - Linux commun

This post exists also in english

Ce billet fait partie d'une série sur comment déployer une application XULRunner. Voir le préambule pour le contexte.

2 - Linux

2.1 Linux commun

2.1.1 Généralités

Nous ciblons la plateforme Linux dans cette partie. Et c'est le cas le plus simple.

Pour toutes les distributions que j'ai essayées, XULRunner est disponible depuis le gestionnaire de paquets, et Firefox est basé sur lui. Donc XULRunner peut facilement être une dépendance de notre application.

2.1.2 Créer un lanceur

Il est facile de créer un lanceur, créons simplement un script shell nommé myapp.sh, dans le dossier principal de notre application (celui qui contient application.ini), avec le contenu suivant :

#!/bin/sh

CUR_DIR=$(dirname $(readlink -f "$0"))

if [ -x /usr/bin/xulrunner ]; then
/usr/bin/xulrunner "$CUR_DIR/application.ini" $@
elif [ -x /usr/bin/firefox ]; then
/usr/bin/firefox -app "$CUR_DIR/application.ini" $@
else
echo "Error: unable to find XULRunner or Firefox!"
fi

et rendons le exécutable :

chmod +x myapp.sh

Le script trouve dans quel dossier il se trouve, puis lance le fichier application.ini via xulrunner s'il le trouve, sinon via firefox avec l'argument -app. Le script passe aussi les éventuels arguments supplémentaires (comme -jsconsole par exemple).

Plus tard dans ce tutoriel, quand nous créerons les paquets deb et rpm, nous ajouterons un lien symbolique vers ce fichier dans /usr/bin .

Note: l'argument -f de readlink utilisé dans ce script est disponible uniquement dans la version GNU, donc dans toutes les distributions Linux, mais pas forcément sur d'autres systèmes de type Unix, comme Mac OSX par exemple.

2.1.3 Des icônes pour nos fenêtres

Pour l'instant, notre application est lancée, mais l'icône affichée dans la barre de tâches est celle générique de XULRunner, ou celle de Firefox. Il est facile d'afficher notre propre icône. Créons simplement un dossier nommé 'icons' à l'intérieur du dossier chrome principal de notre appli, puis créons dans celui-ci un autre nommé 'default'. Copions 3 fichiers png, nommés default16.png, default32.png, et default48.png. Et c'est tout, maintenant c'est notre icône qui est affichée.

    |- samples_chapter_2/
|- myapp/
|- chrome
|- icons/
|- default/
|- default16.png
|- default32.png
|- default48.png
 2.1.4 Intégration au bureau

Pour une intégration complète au bureau, nous devons maintenant créer quelques fichiers supplémentaires, un fichier .desktop, et quelques icône associées. Ainsi notre appli apparaitra dans le menu Applications du gestionnaire de fenêtres.

En exemple, voici le contenu d'un fichier myapp.desktop :

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=MyApp
Comment=a Hello World XULRunner app
Comment[fr]=un Bonjour Monde pour XULRunner.
Exec=/usr/bin/myapp
Terminal=false
Type=Application
Categories=Utility;
Icon=myapp

Voir cette documentation pour les détails, et celle ci pour choisir les Catégories.

L'entrée Exec est décrite en détail ici, nous utilisons un lien symbolique vers notre lanceur, depuis /usr/bin/ (le standard pour les exécutables sur Linux). Son emplacement réel sera dans /usr/lib/myapp/.

L'entrée Icon contient le nom de notre icône, que nous créerons par la suite.

L'entrée Comment est optionnelle, et peut être localisée (comme quelques autres entrées, voyez la spécification), ici nous définissons sune valeur par défaut, et une française (fr).

Si l'appli gère certains types mime, i.e. peut ouvrir certains types de fichiers, vous devez ajouter une ligne avec l'entrée MimeType, par exemple :

MimeType=text/html;text/xml;application/xhtml+xml;

Ce fichier myapp.desktop est sensé être placé à l'étape finale dans le dossier /usr/share/applications/ folder.
(Voir http://www.freedesktop.org/wiki/Specifications/menu-spec et http://www.freedesktop.org/wiki/Specifications/basedir-spec pour plus de détail)

Maintenant nous avons besoin de quelques icônes. Nous utiliserons des png et svg (xpm est également possible, mais semble déprécié, nous n'utiliserons pas ce format). Nous pouvons avoir différentes tailles, personnellement je me restreint à 4 png (16x16, 22x22, 32x32, 48x48), comme suggéré par les Tango Guidelines, plus un svg de 48x48.

Ces images doivent être nommées myapp.png, et myapp.svg .

Et elles doivent finalement être placées dans les dossiers suivants :

  • /usr/share/icons/hicolor/16x16/apps/myapp.png
  • /usr/share/icons/hicolor/22x22/apps/myapp.png
  • /usr/share/icons/hicolor/32x32/apps/myapp.png
  • /usr/share/icons/hicolor/48x48/apps/myapp.png
  • /usr/share/icons/hicolor/scalable/apps/myapp.svg
 2.1.5 Distribuer un tar.gz

Notre application est utilisable telle quelle avec son lanceur, vous pouvez donc la distribuer avec un simple tar.gz. Pour le créer :

tar -zcvf myapp.tar.gz myapp

Un utilisateur peut le télécharger, le décompresser n'importe où, et lancer l'appli via myapp.sh.

Mais pour être plus convivial, un paquet utilisable avec le gestionnaire de paquet de sa distribution, avec l'intégration au bureau complète, est préférable. C'est ce que nous verrons dans les prochaines sections.

Nicolas Martin

Vous pouvez télécharger tous les exemples de ce chapitre 2 (Linux) dans l'archive samples_chapter_2.tar.gz .

L'application myapp, de developer.mozilla.org, est dans le Domaine Public.

L'icône utilisée est issue du Tango Desktop Project, et est dans le Domaine Public.

Toutes les autres données ajoutées, et les fichiers en exemple, sont dans le Domain Public également.

Distribute your XULRunner app - 2.1 - Linux common

Ce billet existe aussi en français

This post is part of a series about how to package a XULRunner application.
See the preamble for the context case.

2.1 Linux common

2.1.1 Generalities

We target the platform Linux in this part. And this is the simplest case.

For all distributions that I have take a look at, XULRunner is available from the package manager, and Firefox is based on it. So XULRunner can easily be a dependency of your application.

2.1.2 Create a launcher

It's easy to create a launcher, simply create a shell script named myapp.sh, into your main application folder (those which contains application.ini) with the following content:

#!/bin/sh

CUR_DIR=$(dirname $(readlink -f "$0"))

if [ -x /usr/bin/xulrunner ]; then
/usr/bin/xulrunner "$CUR_DIR/application.ini" $@
elif [ -x /usr/bin/firefox ]; then
/usr/bin/firefox -app "$CUR_DIR/application.ini" $@
else
echo "Error: unable to find XULRunner or Firefox!"
fi

and make it executable:

chmod +x myapp.sh

The script retrieves in which folder is it from, then launches the application.ini file via xulrunner if found, firefox with the -app argument otherwise. The script passes eventual additional arguments too (like -jsconsole for example).

Later in this howto, when we'll create the deb and rpm packages, we will add a symbolic link to this file into /usr/bin/ .

Note: the readlink -f argument used in this script is available only in the GNU version, so in all Linux distributions, but not in some other unix like systems, like Mac OSX for example.

2.1.3 Icons for our windows

As is, the app is launched, but the icon displayed in the task bar is the XULRunner generic one, or the Firefox icon. It's easy to display our own icon. Simply create a folder named 'icons' inside the main chrome folder of the app, then create inside another one named 'default'. Copy 3 png files, named default16.png, default32.png, and default48.png. That's all, now this is your own icon that's displayed.

    |- samples_chapter_2/
|- myapp/
|- chrome
|- icons/
|- default/
|- default16.png
|- default32.png
|- default48.png

 2.1.4 Desktop integration

For a complete desktop integration, we now need to create some additional files,  a .desktop file, and some associated icons. This allows our app to appear in the applications menu of the windows manager.

As example, here's the content of a myapp.desktop file:

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=MyApp
Comment=a Hello World XULRunner app
Comment[fr]=un Bonjour Monde pour XULRunner.
Exec=/usr/bin/myapp
Terminal=false
Type=Application
Categories=Utility;
Icon=myapp

See this documentation for detail, and this one to choose Categories.

The Exec entry is described in detail here, we use a symbolic link to our launcher, from /usr/bin/ (the standard for executable on Linux). Its real location will be in /usr/lib/myapp/.

The Icon entry content the name of our icons that we will create below.

The Comment entry is optional, and can be localized (like some others entries, see the spec), here there's a default value, and a french (fr) one.

If the app handles some mime types, i.e. can open some type of files, you must add a line with a MimeType entry, for example:

MimeType=text/html;text/xml;application/xhtml+xml;

This myapp.desktop file is intended to be placed in the final stage into the /usr/share/applications/ folder.
(See http://www.freedesktop.org/wiki/Specifications/menu-spec and http://www.freedesktop.org/wiki/Specifications/basedir-spec for more details)

Now we need some icons. We will use png and svg (xpm is possible too, but seems deprecated, I don't use it). We can have several sizes, personaly I have restricted to 4 png (16x16, 22x22, 32x32, 48x48), as suggested by the Tango Guidelines, plus a 48x48 svg.

These images must be named myapp.png, and myapp.svg .

And they should be finally placed into the following folders:

  • /usr/share/icons/hicolor/16x16/apps/myapp.png
  • /usr/share/icons/hicolor/22x22/apps/myapp.png
  • /usr/share/icons/hicolor/32x32/apps/myapp.png
  • /usr/share/icons/hicolor/48x48/apps/myapp.png
  • /usr/share/icons/hicolor/scalable/apps/myapp.svg

 2.1.5 Distribute a tar.gz

Our application is runnable as is with its launcher, so you can distribute it as a simple tar.gz. To create it:

tar -zcvf myapp.tar.gz myapp

A user can download it, unpack it anywhere, and launch it via myapp.sh.

But to be more friendly, a package usuable by the package manager of the distribution, with the complete desktop integration, is preferable. That's what we will see in the next sections.

Nicolas Martin

You can download all the samples of this chapter 2 (Linux) in the samples_chapter_2.tar.gz archive.

The myapp application, from developer.mozilla.org is in the Public Domain.

The icon used is from the Tango Desktop Project, and is in the Public Domain.

All added data, and sample files, of this chapter 2, are in the Public Domain too.

vendredi, mai 20 2011

Distribuer votre appli XULRunner - 1 - Préambule

This post exists also in english

Ceci est le premier billet d'une série sur comment déployer une application XULRunner.

1 - Préambule

But: vous avez créer une jolie application XULRunner, que vous voulez distribuer de manière conviviale sur toutes les plateformes supportées par XULRunner.

Il s'agit d'un petit morceau de code, vous ne voulez pas embarquer XULRunner dans votre application (*).

Je vais partager avec vous le résultat de quelques expérimentations et recherches web, pour l'empaqueter et l'installer, et résoudre quelques spécificités propres à certaines plateformes.

Nous allons voir comment créer un lanceur, parfois basé sur Firefox et l'argument -app (qui peut être utilisé comme "moteur" XULRunner), et comment créer des installeurs habituels, deb et rpm pour Linux, un installeur nsis pour Windows, un bundle d'application et un dmg pour Mac OSX.

Nous utiliserons l'application 'Hello World' comme exemple, de developer.mozilla.org. Et tout ceci sera fait depuis Linux.

Tout commentaire et retour seront bien sûr les bienvenus ;) , si quelque chose vous semble faux, n'hésitez pas à commenter.

(*) Note: mais si vous embarquez XULRunner dans votre application, ces informations pourront quand même vous être utile ;) .

Voici le plan complet à venir :

Distribuer votre appli XULRunner

  • 1 Préambule
  • 2 Linux
    • 2.1 Linux commun
      • 2.1.1 Généralités
      • 2.1.2 Créer un lanceur
      • 2.1.3 Des icônes pour nos fenêtres
      • 2.1.4 Intégration au bureau
      • 2.1.5 Distribuer un tar.gz
    • 2.2 Empaqueter un deb
      • 2.2.1 Synopsis
      • 2.2.2 Fichiers Debian
      • 2.2.3 Créer le deb
    • 2.3 Un cas spécial : deb pour Maemo
      • 2.3.1 Maemo - généralités
      • 2.3.2 Adapter le lanceur
      • 2.3.3 Nouvelle organisation des fichiers - Où placer notre appli
      • 2.3.4 Additions au fichier .desktop
      • 2.3.5 Changements aux fichiers Debian
      • 2.3.6 Créer le deb
    • 2.4 Empaqueter un rpm
      • 2.4.1 Préalable
      • 2.4.2 Fichiers RPM
      • 2.4.3 Créer le rpm
  • 3 Windows
    • 3.1 Icônes pour Windows
    • 3.2 Créer un lanceur (batch ou C)
    • 3.3 Créer un script NSIS
    • 3.4 Créer l'installeur
  • 4 Mac OSX
    • 4.1 Icônes pour Mac OSX
    • 4.2 Créer un lanceur
    • 4.3 Quelques spécifités Mac
    • 4.4 Créer un "Application Bundle"
    • 4.5 Empaqueter un tar.gz et un dmg
  • 5 Synthèse - toutes plateformes
    • 5.1 Changements dans l'appli
    • 5.2 Données ajoutées
    • 5.3 Installeurs créés
    • 5.4 Un script global et réutilisable
    • 5.5 Conclusions
  • 6 Annexe - liens en relations

Nicolas Martin

Distribute your XULRunner app - 1 - Preamble

Ce billet existe aussi en français

This is the first post of a series about how to package a XULRunner application.

1 - Preamble

Purpose: you have made a nice XULRunner application, that you want to distribute as friendly for all platforms supported by XULRunner.

This is a small piece of code, you don't want to distribute XULRunner itself with your application (*).

I will share with you the result of some of my experiments and web researches, to package it and resolve some platform specificities.

We will see how to create a launcher, sometime based on Firefox with the -app argument (which can be used as a XULRunner runtime), and how to create common installers, deb and rpm for Linux, a nsis installer for Windows, an application bundle and a dmg for Mac OSX.

We will use the 'Hello World' application as example, from developer.mozilla.org. And all of this will be performed from Linux.

All comments and feedback will be really welcome ;) , if something seems wrong to you, please comment.

(*) Note: but if you embed XULRunner into your application, this information should be still useful ;) .

Here's the complete incoming plan:

Distribute your XULRunner app

  • 1 Preamble
  • 2 Linux
    • 2.1 Linux common
      • 2.1.1 Generalities
      • 2.1.2 Create a launcher
      • 2.1.3 Icons for our windows
      • 2.1.4 Desktop integration
      • 2.1.5 Distribute a tar.gz
    • 2.2 Package as deb
      • 2.2.1 Synopsis
      • 2.2.2 Debian files
      • 2.2.3 Create the deb
    • 2.3 Special case : deb for Maemo
      • 2.3.1 Maemo generalities
      • 2.3.2 Adapt the launcher
      • 2.3.3 A new file system organization - Where place our app
      • 2.3.4 Additions to the .desktop file
      • 2.3.5 Changes to the Debian files
      • 2.3.6 Create the deb
    • 2.4 Package as rpm
      • 2.4.1 Prerequisites
      • 2.4.2 RPM files
      • 2.4.3 Create the rpm
  • 3 Windows
    • 3.1 Icons for Windows
    • 3.2 Create a launcher (batch or C)
    • 3.3 Create a NSIS script
    • 3.4 Create the installer
  • 4 Mac OSX
    • 4.1 Icons for Mac OSX
    • 4.2 Create a launcher
    • 4.3 Some Mac specificities
    • 4.4 Create a Application Bundle
    • 4.5 Package as tar.gz and dmg
  • 5 Synthesis - all platforms
    • 5.1 Changes to the app
    • 5.2 Added data
    • 5.3 Created installers
    • 5.4 A global and reusable script
    • 5.5 Conclusions
  • 6 Annexe - related links

Nicolas Martin

Boox 3.0 final, for Firefox 4

english:

Finally, here it is :) . Thank you very much to all who have tested and reported bug, your help is precious!

Automatic update should be available if you have installed a previous version from my site.
In approval phase on AMO.

Of course you can report here any new bug ;) .

french :

Enfin, la voilà. Merci beaucoup à ceux qui ont testé et rapporté les bugs, votre aide est précieuse !

La mise à jour automatique doit être disponible si vous aviez installé une version précédente depuis mon site.
En phase d'approbation sur AMO.

Et bien sûr, vous pouvez rapporter ici d'éventuels bug ;) .

mercredi, mai 18 2011

a XUL App Launcher, in C, for Windows

  • en version
  • version fr

english version

To launch a XULRunner application which doesn't embed XULRunner, you can use a Shell script on Linux and on Mac, calling a installed XULRunner executable or Firefox with the -app argument.

On Windows you can use a batch script, but there's a ugly black command window that is opened too.

To avoid this inconvenience, here's a proposal, another solution for Windows.
This is a light C program, it must be located in the main folder of a XULRunner app, alongside the application.ini file.
Then this executable launches the local application.ini, invoking Firefox with the -app argument. If used in command line, in a terminal, any additional argument (like -jsconsole for example) is passed to Firefox too.

And it's possible to embed an icon, and text information, to this executable too.

This is a light C program, and the code is independent of the Mozilla code. It means that you can compile it with any C compiler, for example with MingW from Linux, that's what I do myself.

This little piece of code is MIT licensed. But any remark, suggestion, enhancement, or better, patch, is welcome of course ;) .

version française

Pour lancer une application XULRunner qui n'embarque pas XULRunner en interne, on peut utiliser un script Shell sur Linux ou Mac, qui invoque un exécutable XULRunner installé, ou Firefox avec l'argument -app.

Sur Windows on peut utiliser un script batch, mais une désagréable fenetre noire de commande est également ouverte.

Pour éviter ce désagrément, voici une autre proposition pour Windows.
C'est un petit programme C, qui doit etre placé dans le dossier principal d'un programme XULRunner, à coté du fichier application.ini.
Cet exécutable lance le application.ini local, en invoquant Firefox avec l'argument -app. Si il est utilisé en ligne de commande, les éventuels arguments supplémentaires (comme -jsconsole par exemple) sont également transmis à Firefox

Et il est aussi possible d'inclure une icone, et des informations textuelles, à l'executable.

C'est un tout petit programme en C, son code est indépendant du code de Mozilla. Çà veut dire que l'on peut le compiler avec n'importe quel compilateur C, par exemple MingW depuis Linux, c'est ce que je fais personnellement.

Ce petit bout de code est sous licence MIT. Mais toute remarque, suggestion, amélioration, ou mieux, patch, sont bien sur les bienvenus ;) .

- page 4 de 12 -