deamon en Objective-C, c'est possible ?
odjau
Membre
Salut tout le monde,
Ma question est peut-être un peu tordu, mais bon, je vais essayer d'être claire (et sans faire trop de fautes d'orthographes )
J'ai une petite appli obj-c/cocoa qui affiche un NSStatusItem (une image) dans la NSSTatusBar (à droite de la barre de menu). Je fais varier cette image en fonction d'un popUp. Tous ce petit monde fonctionne .
Mon problème c'est que j'aimerai faire apparaitre et commander le changement d'item à partir d'une autre appli développée en... LabVIEW.
En LabVIEW le seul moyen à ma conaissance pour communiquer avec une autre appli est d'utiliser l'équivalant d'une ligne de commande.
Ma question est donc la suivante, est-il possible à partir de ma petite appli de faire un deamon (je ne suis pas convaincu que le terme soit approprié ???) qui serait :
- "launchable"/"stoppable" par ligne de commande
- "commandable" (changement de l'item) toujours par ligne de commande
- et invisible dans le dock
J'espère avoir été claire, et que vous aurez une ou deux pistes à me proposer :P
Ciao
Ma question est peut-être un peu tordu, mais bon, je vais essayer d'être claire (et sans faire trop de fautes d'orthographes )
J'ai une petite appli obj-c/cocoa qui affiche un NSStatusItem (une image) dans la NSSTatusBar (à droite de la barre de menu). Je fais varier cette image en fonction d'un popUp. Tous ce petit monde fonctionne .
Mon problème c'est que j'aimerai faire apparaitre et commander le changement d'item à partir d'une autre appli développée en... LabVIEW.
En LabVIEW le seul moyen à ma conaissance pour communiquer avec une autre appli est d'utiliser l'équivalant d'une ligne de commande.
Ma question est donc la suivante, est-il possible à partir de ma petite appli de faire un deamon (je ne suis pas convaincu que le terme soit approprié ???) qui serait :
- "launchable"/"stoppable" par ligne de commande
- "commandable" (changement de l'item) toujours par ligne de commande
- et invisible dans le dock
J'espère avoir été claire, et que vous aurez une ou deux pistes à me proposer :P
Ciao
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
ça c'est pas glop
mais, je ne veux pas renoncer trop vite, je vais chercher d'autre piste et peut être que quelqu'un aura une bonne idée ::)
1- on peut facilement créer (sous xcode) un projet pour faire un "outil" en objective-c/cocoa. Cet outil n'aura pas d'ui (donc pas d'utilisation du AppKit), mais peut être manipuler en ligne de commande.
2- on peut créer une appli objective-c/cocoa qui n'aura pas d'ui visible (donc pas dans le dock) en manipulant les clés LSUIPresentationMode ou LSBackgroundOnly du Info.plist de l'appli.
doc sur LSBackgroundOnly.
doc sur LSUIPresentationMode.
.
Donc je serais dans l'impossibilité d'utiliser NSStatusBarItem ???
A mon avis, c'est la seconde option qui correspond le mieux à ce que tu veux réaliser. Le Dock fonctionne de la même manière : une ui minimale, pas, pas de barre de menu, pas d'icône dans le Dock (lui même !!).
.
Mais comment je fait pour "piloter" mon appli ?
En tous cas, merci pour les infos.
En fait, je pense même que la clé LSUIElement est réellement ce qui te conviens, puisque ton appli semble bien être un "agent".
Qu'entends-tu par piloter ton appli ? Car je n'ai pas vraiment saisi ton speech du début concernant le fait d'être "commandable" par ligne de commande...
.
Actuellement mon appli posséde une action liée à un NSPopUpButton.Suivant la valeur de ce dernier je change l'image de mon NSStatusItem.
J'aimerais remplacer l'action sur le NSPopUpButton par une ligne de commande...
Tu as déjà répondu à tout, Bru!
Il faut faire une autre appli "outil" (proposition 1) qui sera lancée par ligne de commande, et qui communiquera ses résultats à l'appli "agent" (proposition 2)
Ah non, la j'suis pas d'accord, parceque quand je vais rajouter ma couche LabVIEW, ça va me faire chaà®ner 3 Applis. Moi j'appel ça une usine à gaz ;D :fouf):
Déjà que c'est pas super clean comme méthode
En Unix, la commande "tail" affiche la fin d'un fichier. Mais si on rajoute l'option -f, après l'affichage, le tail se bloque jusqu'à ce qu'il y ait une nouvelle ligne à afficher.
Maintenant, imaginons que dans ce fichier, chaque ligne décrive le travail à faire par ton appli. Et bien à chaque fois que tu rajoutes une telle ligne dans le fichier, ton appli la récupère et peut l'interpréter.
En mixant ça avec une NSTask et un NSPipe, tout va bien. J'ai testé, ça marche.
L'avantage de cette technique, c'est que tu n'as pas besoin de faire plusieurs programmes, l'appli est son propre démon (le code précédent peut être mis dans un thread à part)
NB : pour tester, ne modifie pas le fichier "pipe.dat" avec TextEdit, car TextEdit, quand il sauvegarde, créer une copie du fichier et supprime l'ancien, donc ça ne marche pas. Pour tester, passe donc par la ligne de commande et fait des "echo "turlututu" >> pipe.dat"
Si tu veux plus de détails Unixiens, je peux être plus disert, faut juste demander.
+
Chacha
[edit]
Dans ce cas, Labview doit simplement ajouter des lignes au fichier surveillé, pas besoin de lancer des commandes...
[/edit]
Je vais tester ça de ce pas. D'ailleurs j'allais justement regarder une solution de ce type, mais pas autant "unixienne".
Merci
PS : juste une question, la boucle infinie ça va pas me prendre 100% des resources de mon processeur par hasard ?
[Edit] je viens de relire plus précisément ta solution, je crois j'ai dis une connerie dans mon PS on oublie [/edit]
Non non, puisque l'appel à "availableData" est bloquant. ça s'endort tant qu'il n'y a rien de nouveau...