IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement OS X Discussion :

Création d'une "application" OS X via un script shell


Sujet :

Développement OS X

  1. #1
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut Création d'une "application" OS X via un script shell
    Bonjour à tous,

    Pour une petite application Open-Source sur lequel je participe, je souhaite générer une application OS X (un .app) depuis un script "sh" en ligne de commande (fin d'un setup).
    Je suis débutant sous Mac OS X, je viens du monde Linux, donc j'ai un petit réflexe a utilisé simplement le terminal et les scripts bash, d'où mon besoin de transformer mon script en application plus "Mac".

    Pour cela, j'ai suivi le tutoriel de Mathias Bynens (https://mathiasbynens.be/notes/shell-script-mac-apps)
    C'est assez simple et la technique marche en effet bien dans tout ces exemples.

    Dans mon cas, j'ai bien pu créer mon ".app" qui doit lancer une petite interface graphique Tkinter faite en Python.
    Lorsque je clique sur mon nouvel icon, l'application tente de se lancer mais elle se referme aussi tôt.
    Par contre, si dans un terminal OS X, je tape "open <mon application .app>" elle se lance parfaitement bien.

    Je recherche déjà un outil de log pour savoir pourquoi mon application ne veux pas se lancer via l'environnement graphique d'OS X alors que tout se passe bien en terminal.
    C'est d'autant déroutant, que mon Mac ne me retourne aucun message d'erreur.
    J'ai essayé de redirigé la sortie la sortie standard de mon script vers un fichier de log, mais sans succès également.

    Si également quelqu'un a une idée du pourquoi mon script ne veux pas se lancer encapsuler dans un ".app", je suis preneur.
    J'avais vu déjà que seule les fichiers "*.command" pouvaient s’exécuter dans Finder (et pas tout les scripts ayant la permission d’exécution), je me suis demandé si c'était lié (bien que l'exemple de Mathias marche sur mon MacBook).

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 440
    Points : 43 082
    Points
    43 082
    Par défaut
    Comme ça j'aurais tendance à dire que le termine se referme et n’exécute pas tout ton script. Quand tu passes par le terminal celui reste ouvert donc ton code s’exécute dans son intégralité. Après je peux me tromper.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Comme ça j'aurais tendance à dire que le termine se referme et n’exécute pas tout ton script. Quand tu passes par le terminal celui reste ouvert donc ton code s’exécute dans son intégralité. Après je peux me tromper.
    Oui, c'est possible.
    Mais pourquoi le script de Mathias marche bien et pas le mien?
    Est ce qu'il y a un outil de log sous OS X, pour comprendre pourquoi l'application se termine si vite?
    Je ne suis quand même pas le premier à me confronter à ce souci, si?

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 440
    Points : 43 082
    Points
    43 082
    Par défaut
    Sans voir le script comment veux tu que je réponde ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    Je recherchais en premier lieu un moyen de voir une erreur, un message expliquant le souci, enfin un outil de log de développeur en gros.
    Mais cela n'existe peut être pas sous Mac OS X en standard pour l’environnement graphique .

    Sinon, je vous copie mon script '/var/lucterios2/launch_lucterios_gui.sh':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env bash
    
    . /var/lucterios2/virtual_for_lucterios/bin/activate
    cd /var/lucterios2/
    lucterios_gui.py
    Note: "/var/lucterios2/virtual_for_lucterios" est un répertoire "virtualenv" de Python où mon application est installé via pip.

    et je crée l'application "app" ainsi qui parait très bien tant que l'on ne clique pas dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ICON_PATH="lucterios/install/lucterios.png"
    APP_NAME="Lucterios"
    
    APPDIR="/Applications/$APP_NAME.app"
    mkdir -p "$APPDIR/Contents/MacOS"
    cp "/var/lucterios2/launch_lucterios_gui.sh" "$APPDIR/Contents/MacOS/$APP_NAME"
    chmod ogu+rx "$APPDIR/Contents/MacOS/$APP_NAME"
    # change icon
    icon="/var/lucterios2/virtual_for_lucterios/lib/python3.4/site-packages/$ICON_PATH"
    rm -rf $APPDIR$'/Icon\r'
    sips -i $icon >/dev/null
    DeRez -only icns $icon > /tmp/icns.rsrc
    Rez -append /tmp/icns.rsrc -o $APPDIR$'/Icon\r'
    SetFile -a C $APPDIR
    SetFile -a V $APPDIR$'/Icon\r'
    chmod -R ogu+r $APPDIR
    Merci d'avance si mon script vous fait "tilt" dans un contexte Mac OS X.
    Venant du monde Linux, il y a sûrement des subtilités qui ne marche pas pareil.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 440
    Points : 43 082
    Points
    43 082
    Par défaut
    Je recherchais en premier lieu un moyen de voir une erreur, un message expliquant le souci, enfin un outil de log de développeur en gros.
    Mais cela n'existe peut être pas sous Mac OS X en standard pour l’environnement graphique
    Bien sur que si. Tu as un environnement complet de programmation nommé XCode, intégrant un EDI, un compilateur, un débogueur, et fournit par Apple.

    Il te faut comprendre aussi qu'un programme fait en python, c'est un script normalement appelé par une commande "python nom_du_script" depuis un terminal.

    En plus tu lance un script shell pour l'appeler. Donc pour faire du débogage, il te faut gérer 2 aspects, l'aspect python et l'aspect script shell. Je ne fais pas de python, mais en regardant vite fait j'ai vue qu'il y a une classe PDB pour le débogage. Pour ce qui est du débogage du script, tu peux mettre des "points d'arrêt" avec une commande de type read.

    Ensuite, j'ajouterais que tu as des applications en mode graphique et en mode console. du python, se sera en mode console. Une application en mode console est dépendante du terminal qui l'a ouverte. Si ce terminal est fermé, ses processus enfant le sont aussi. Ce qui explique que cela fonctionne si tu lance ton .app depuis le terminal.

    Si tu rajoutes "&" à la fin d'une commande d'un script Shell, celle-ci s’exécutera de façon indépendante du shell, la fin du shell ne fermera pas la commande.

    Regardes aussi ici c'est peut-être la meilleure piste:
    https://pythonhosted.org/py2app/
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Création d'une mini-application
    Par girl97224 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 13/01/2009, 16h01
  2. Création d'une mini-application avec ?
    Par ghohm dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 11/04/2007, 23h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo