====== Créer une application native macOS depuis un jar ====== Cet article décrit comment encapsuler un //.jar exécutable// dans un //bundle macOS// (une application native macOS, donc un répertoire //.app// possédant une certaine structure). ===== appbundler ===== Tout d'abord, il vous faut le programme //appbundler// disponible (par exemple) chez [[https://bitbucket.org/infinitekind/appbundler/overview| Bitbucket]]. C'est lui qui crée l'application native.\\ Voici la version disponible au moment de l'écriture de cet article: {{ :appbundler:infinitekind-appbundler-6687ec9d200c.zip |}} Décompressez, vous obtenez alors un répertoire contenant un fichier ''build.xml'' et un sous-répertoire ''appbundler'', lancez un ''Terminal'' et placez-vous dans le répertoire contenant ''build.xml''. Il suffit alors de lancer ''ant''.\\ Chez moi, il est ici: ''/Applications/NetBeans/NetBeans 8.1.app/Contents/Resources/NetBeans/extide/ant/bin/ant''. Il vous faudra ''Xcode'' afin de compiler ''JavaAppLauncher'' ou alors prenez directement mon fichier ''appbundler-1.0ea.jar.zip'' disponible ci-dessous. Cela crée le programme ''appbundler-1.0ea.jar'' dans le répertoire ''appbundler/bin''. Voici le mien: {{ :appbundler:appbundler-1.0ea.jar.zip |}}, il est modifié afin de n'avoir que la version 64 bits de ''JavaAppLauncher''. ===== Utilisation ===== Voyons comment faire à l'aide d'un exemple, l'article de [[verbiste-macos|Verbiste]] contient {{ :verbiste:verbiste-gui.jar.zip |}}. Placez //verbiste-gui.jar//, //appbundler-1.0ea.jar// et {{ :appbundler:verbiste.icns.zip |}} (décompressé) dans un même répertoire. Toujours dans ce répertoire, créez le fichier ''build.xml'' comme suit: Lancez ''ant'', c'est terminé. On peut aussi mettre cela dans le build.xml de la racine d'un projet //NetBeans// comme expliqué à: http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html.\\ C'est le cas du projet fourni dans l'article [[verbiste-macos|Verbiste sous macOS]]. La documentation //Oracle// citée ci-dessus explique aussi comment encapsuler le ''JRE'' dans le //bundle// afin de le distribuer indépendamment de l'installation de //Java// sur la cible.