Xcode Start Stop Server App

Bonjour


 


j'ai un projet xcode de type external build.


 


Je n'ai aucun problème pour faire mes builds. J'ai ajouté des targets à  mes schèmes, et tout se passe bien.


 


je voulais simplement pouvoir démarrer et arrêter mon appli depuis XCode 


Mais je n'ai pas trouvé comment faire.


 


j'ai en effet ajouté la ligne de commande dans la partie RUN de mon scheme.et mon appli démarre bien


mais en fait mon appli se comporte comme un serveur 


app start


Et rends la main immédiatement.


il faut lancer 


app stop pour l'arrêter


Et je n'ai pas trouvé comment configurer Xcode pour qu'il appelle cette commande pour faire un stop.


 


Pour l'heure ma seule solution est d'ouvrir un terminal et de taper la commande.


 


Comment faire pour que xcode exécute "app start" lorsqu'on clique sur run


Et "app stop" lorsqu'on clique sur stop ?


 


A+JYT


 


Réponses

  • Si ton application est de type service, tu ne dois pas la détacher pour pouvoir la deboguer. Tu es censer lancer le service directement depuis Xcode et non utiliser les commandes de lancement du service depuis Xcode.


     


    Si app start lance appd avec les options X Y et Z alors c'est ce appd que tu dois lancer depuis Xcode avec les arguments qui vont bien.


     


    Si app start fait un fork de lui même et rend la main, alors tu dois prévoir une option de debug qui ne détachera pas l'execution principale.


  • Non mon exe est app


    executer app affiche de l'aide


    executer app start démare le service est rend la main


    executer app stop arrète de la service.


     


    il ne s'agit pas de script mais bien de l'éxé lui même.


     


    J'ai effectibement la possibilité de démarrer dans rendre la main avec une option 


    mais de toute façon pour l'arrêter il faut executer


    app stop et c'est ça que je ne sais pas faire.


     


    A+JYT


  • AliGatorAliGator Membre, Modérateur
    Quand Xcode lance une appli, il tourne (avec le debuggeur attaché au process) dans que le process en question est vivant.
    - Si tu demandes à  Xcode de faire un "stop", il va SIGKILL (ou SIGSTOP ?) le process.
    - Si le process s'arrête de lui-même (fin du main(), par exemple) alors Xcode va détecter cet arrêt et arrêter le run aussi
    C'est logique d'ailleurs, Xcode et LLDB ne peuvent plus être attaché à  un process qui n'existe plus !

    Donc tu ne peux pas faire rendre la main à  ton appli juste après le "app start" car si quand tu lances "app start" ton appli lance le service puis rend la main, ton exécutable "app" va se terminer (même si le service, lui, continue à  tourner), et donc Xcode ne va plus être attaché à  "app" puisque l'appli sera arrêtée/terminée.

    Par contre tu peux faire en sorte comme te l'a déjà  conseillé yoann de prévoir un mécanisme dans ton app qui au lieu de forker et rendre la main tout de suite et se terminer, va exécuter le service directement et continuer à  tourner jusqu'à  recevoir une interruption (SIGSTOP ou SIGKILL).
    - Xcode restera du coup attaché à  ton app tant qu'elle tournera, et ne va pas s'arrêter qques secondes après son lancement " comme ça serait le cas si app se terminait après avoir lancé le service " mais va rester attaché au process "app" que tu pourras débuguer.
    E
    - Et quand tu vas demander à  Xcode de faire un STOP ton app va recevoir le signal adéquat (SIGSTOP ou SIGKILL ou autre je sais pas trop faut regarder dans la doc ou tester) et va pouvoir interrompre le service " comme quand tu fais "app stop" dans le cas où tu as lancé ton appli pour qu'elle se fork et rende la main... ou comme dans le cas où tu as lancé ton appli avec "app start --nofork" ou autre qui lance le service sans forker et qui interrompt le service seulement quand tu interrupt ton app avec un SIGSTOP ou SIGINT ou SIGKILL.
  • C'est bien là  mon problème


     


    Je sais lancer mon app sans rendre la main


    mais mon dev concerne un package qui est dynamiquement chargé par cet exe


    je ne peux pas modifier son comportement


     


    et même si je le lance sans rendre la main la seule façon de l'arrêter est d'executer "app stop"


    l'exe ne régit ni à  SIGSTOP ni SIGTERM et ça je ne peux pas le changer.


     


    app stop ouvre une socket sur le point d'entrée admin du service et lui demande de s'arrêter.


     


    si je comprends bien XCode ne peut être paramètré pour faire autre chose qu'un signal pour l'arrêt de l'appli


     


    A+JYT

  • AliGatorAliGator Membre, Modérateur
    Bah en même temps c'est un peu logique...
    Pourquoi tu ne peux pas changer ton exécutable pour qu'il intercepte SIGTERM ? Ou faire un wrapper pour ça ?
  • ça serait cool de se relire un minimum et travailler la mise en forme des post quand même, ça simplifierais la lecture...


     


    Sinon regarde la documentation du service sur lequel tu te colle, tu dois forcément avoir un mode de debug sans fork, c'est obligatoire pour être debogable.


     


    Si tu ne trouve rien du tout, tu peux déjà  insulter le créateur et tenter un dernier recours avec le mode Xcode qui permet de ne pas lancer l'executable au Run mais de surveiller et de s'attacher aux process à  venir. À voir si ça marche malgré le fait que le process va être lancé deux fois...


  • encore une fois, je NE VEUX PAS déboguer l'exécutable 


    je veux juste le lancer et l'arrêter


     


    Comment dire c'est, un peu, comme si je faisais du PHP.


    Je veux lancer et arrêter le serveur apache pour que mon PHP s'exécute.


     


    Le serveur apache est ce qu'il est. Ce n'est pas parce que je veux développer un PHP que je dois modifier le serveur.


     


    J'ai donc un exécutable qui m'est fourni et qui démarre un serveur dans lequel je déploie mon développement.


     


    Si j'envoie un SIGKILL à  cet exécutable, il meurt salement. (C'est d'ailleurs pour ça que sur tous les systèmes Unix il y a un moyen de lancer des scripts d'arrêt.)


    Il ne redémarrera pas. il faut alors supprimer les locks


     


    Enfin, je connais des centaines sinon des milliers de serveurs qui fonctionnent ainsi. 


    C'est un modèle tellement répandu que je pensais que XCode le prenait en charge.


    J'ai donc comme l'impression de XCode n'est pas l'IDE qu'il me faut.


     


    A+JYT


  • AliGatorAliGator Membre, Modérateur
    D'où le wrapper dont je parlais.
  • Dernière fois que je t'explique comment on débogue un plug-in.


     


    Déjà  il va falloir que tu comprenne qu'un plug-in compilé ça ne se débogue pas comme un script php. L'un est compilé, l'autre est interprété.


     


    Lorsque tu développe un plug-in applicatif (comme par exemple un prefpane) tu développe du code qui sera chargé dans le processus du service auquel tu te rattache. Il n'y aura pas de process détaché dans la plupart des cas.


     


    Si tu veux donc déboguer des plug-in tu es obliger de charger le service auquel tu te rattache dans le déboguer. C'est comme cela qu'on fait lorsqu'on développe un pref pane par exemple et Xcode le supporte très bien.


     


    Que tu n'ai ou pas envie de charger le service d'origine ne change rien au fait que c'est comme cela qu'il faut faire. Et attacher le deboguer au service d'origine ne veut pas dire le modifier.


     


    Maintenant si ce n'est pas un plug-in mais un service externe qui vient dialoguer avec un service existant (et qui est lancé par ce dernier) alors tu as alors une autre option dont j'ai déjà  parler, dire à  Xcode de surveiller le lancement de ton binaire qui sera lancé par un autre service.


     


    Quelque soit le cas, Xcode le prend en charge, ne remet pas la faute sur l'outil quand c'est toi qui t'y prend à  l'envers.


     


    Dernière chose, je te rappel que tu es sur un forum de bénévole ici, alors tes caps tu te les gardes et tu reste courtois. Si les réponses ne te plaisent pas, soit tu explique plus en détail ton problème en disant par exemple à  quel service tu cherche à  te rattacher et comment, soit tu va chercher ta solution tout seul.


  • Dans Xcode, et plus spécifiquement dans la partie RUN de ton scheme tu as les "pre-actions" et les "post-actions" pour définir des actions avant et/ou après le l'éxécution de l'application. Tu peux peut être ajouter un script "app stop" en guise de post-action ?


  • @yoan je crois qu'on ne s'est pas compris.


    Je ne peux pas utiliser le débogueur de XCode il ne possède pas de débogueur pour le langage que j'utilise


    Je veux juste arrêter et démarrer le service.


     


    @Lexxis merci je vais voir les Post-action ça me semble une piste.


     


    A+JYT


  • Décidément je ne comprend pas. Si tu utilise un langage qui n'est pas compris par Xcode, pourquoi tu veux lancer ton projet avec Xcode ?!


  • pour utiliser xcode pour ce qu'il sait faire


    editer du source gérer le ropository


    lancer une compil


     


    et si je pouvais lancer et arrêter la plateforme


    c'est déjà  pas mal fasse à  vi et la ligne de commande 


     


    non ?




  • pour utiliser xcode pour ce qu'il sait faire


    editer du source gérer le ropository


    lancer une compil


     


    et si je pouvais lancer et arrêter la plateforme


    c'est déjà  pas mal fasse à  vi et la ligne de commande 


     


    non ?




     


    "Faire rentrer des ronds dans des carrés"


     


    En forçant bien ça passe, mais tu vois bien que c'est pas fait pour.


     


    Trouve l'outil adapté à  ton langage. Au moins tu auras une auto completion et un debug qui marche correctement. Là  tu perd du temps pour rien. Xcode est un IDE fait pour l'Objective-C et puis c'est tout.


     


    Tu as largement de quoi faire à  coté pour les autres langages. Regarde Netbeans, regarde IntelliJ & cie.


     


    Et gérer le repository, désolé mais non, Xcode ne sait pas du tout faire. S'il y a bien un truc qui ne faut pas utiliser dans Xcode c'est ça. Tu veux un gestionnaire de repos sous OS X, tu prends Source Tree, tu prends Version, tu prends Tower, mais tu ne prends pas Xcode.

Connectez-vous ou Inscrivez-vous pour répondre.