Permettre à  AppleScript de piloter mon application

HollowManHollowMan Membre
00:05 modifié dans API AppKit #1
Bonjour à  tous,
Je souhaiterais pouvoir piloter mon application avec AppleScript. Je n'ai pas besoin de grand chose, uniquement d'une commande avec un argument texte.

Après lecture de kilomètres de doc, j'ai commencé par activer AppleScript dans le fichier Info.plist, puis ait créé mon fichier sdef comme suit:
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />&lt;!DOCTYPE dictionary SYSTEM &quot;file://localhost/System/Library/DTDs/sdef.dtd&quot;&gt;<br />&lt;dictionary title=&quot;RarMachine Terminology&quot;&gt;<br />	&lt;suite name=&quot;RarMachine Suite&quot; code=&quot;RarM&quot; description=&quot;Common classes for RarMachine.&quot;&gt;<br />		&lt;command name=&quot;RarchiveIt&quot; code=&quot;aevtrarm&quot; description=&quot;Launches a compression.&quot; id=&quot;rarm&quot;&gt;<br />			&lt;cocoa class=&quot;RMAppleScriptHandler&quot;/&gt;<br />			&lt;direct-parameter description=&quot;Blabla.&quot; type=&quot;file&quot;/&gt;<br />		&lt;/command&gt;<br />	&lt;/suite&gt;<br />&lt;/dictionary&gt;


Du côté Obj-C, ma classe ressemble à  ca:
@interface RMAppleScriptHandler : NSScriptCommand {<br />	<br />}<br /><br />-(id)performDefaultImplementation;<br /><br />@end<br /><br />@implementation RMAppleScriptHandler<br /><br />-(id)performDefaultImplementation<br />{<br />	NSLog(@&quot;%@&quot;, [self directParameter]);<br />	return(nil);<br />}<br /><br />@end


Pour l'instant donc, je ne voudrais que récupérer le directParameter, mais lorsque j'exécute mon AppleScript, il me dit "Some parameter is missing for RarchiveIt".

Voici le code AppleScript, tout ce qui me parait de plus banal:
RarchiveIt &quot;/plop&quot;


Si je passe le direct parameter en optinnal dans le fichier sdef, il m'exécute bien mon code, mais écrit dans le log "(null)".

Je me retrouve complètement bloqué, et je n'arrive pas à  voir d'où provient mon erreur  :(

Merci par avance !

Réponses

  • HollowManHollowMan Membre
    00:05 modifié #2
    Et bien il semblerait que mon code n'était pas si mauvais que ça...

    J'ai fait une pause de quelques heures, quitté Xcode et L'AppleScript Editor, et quand j'ai réouvert, tout fonctionnait.

    Je reste dubitatif...  ???
  • tabliertablier Membre
    00:05 modifié #3
      :P dubitatif -> avec des cheveux ça doit géner!

    Bon, je suppose que dans le info.plist tu as bien mis les deux définitions:
        <key>NSAppleScriptEnabled</key>
        <string>YES</string>
        <key>OSAScriptingDefinition</key>
        <string>NomDuSdef.sdef</string>

    La doc est en effet Kilométrique! et pas toujours très claire. Ou claire pour ceux qui savent!
    Ma petite expérience me dit que, pour être sur que ça marche, il faut, sur une machine juste démarrée, lancer directement le script d'appel et de commande de l'application (application non ouverte bien sur).
    tell application "Machin"
      commande "paramètre"
    end tell
    Bien vérifier qu'il n'y a plus qu'une version de l'appli dans le Disque dur, de préférence la version 'Release'.

  • HollowManHollowMan Membre
    00:05 modifié #4
    Oui j'avais bien rajouté les infos correspondantes au script.

    J'avais en effet plusieurs applications du même nom, mais j'avais précisé le chemin dans le telle application. Cela n'aurait-il pas suffit, et le gredin serait-il allé chercher une autre version de mon appli? :o
  • tabliertablier Membre
    00:05 modifié #5
    Comme tu le sais, l'échange entre ton programme et le script est converti en AppleEvents puis tout se passe entre le "System Event" et la provision de traitement des AppleEvents mis dans ton application par l' Appkit framework.
    Donc on ne voit pas réellement comment ça marche. Les principes sont énoncés dans la doc, le détail n'est pas développé.
    J'ai eu le même problème que toi. Mon impression(??) est que le "System Event" possède un cache et ne relit pas (ou pas toujours) les .sdef déjà  lus! De plus, il m'a semblé que le cache était vide après un re-boot. Donc, re-booter pour faire les essais.
  • HollowManHollowMan Membre
    00:05 modifié #6
    C'est bon à  savoir !
Connectez-vous ou Inscrivez-vous pour répondre.