27 votes

Comment ajouter une prise en charge de l'AppleScript à mon application Cocoa ?

Je suis nouveau dans le monde de la programmation Cocoa, et je souhaite ajouter le support Applescript à mon application. Les exemples sur le site web d'Apple semblent dépassés.

Comment puis-je ajouter le support Applescript à mon application Cocoa?

34voto

auco Points 2663
  1. Si vous souhaitez envoyer AppleScript depuis votre application et avez besoin d'une application sandbox, vous devez créer un entitlement temporaire

  2. Vous devez ajouter ces deux clés dans votre info.plist

    NSAppleScriptEnabled
    
    OSAScriptingDefinition
    NomDeVotreApplication.sdef

...bien sûr, vous devez remplacer "NomDeVotreApplication" par le nom de votre application

  1. Créez un fichier .sdef et ajoutez-le à votre projet. Le cours ultérieur dépend largement des besoins de votre application, il y a :

    1. Éléments de classe (créez un objet à partir d'AppleScript)
    2. Éléments de commande (remplacez NSScriptCommand et exécutez des commandes "verbalement")
    3. Éléments d'énumération
    4. Éléments de type enregistrement
    5. Éléments de type de valeur (KVC)
    6. Éléments Cocoa

    -

    Consultez ici une description détaillée et de nombreux détails sur leur mise en œuvre : https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ScriptableCocoaApplications/SApps_script_cmds/SAppsScriptCmds.html

  2. J'ai trouvé travailler avec des Éléments de Classe et KVC très compliqué, car je voulais simplement exécuter une seule commande, rien de compliqué. Afin d'aider les autres, voici un exemple de comment créer une nouvelle commande simple avec un argument. Dans cet exemple, cela va "rechercher" une chaîne comme ceci :

    dites à l'application "NomDeVotreApplication"
        recherche "une chaîne"
    fin raconte
  3. Le fichier .sdef pour cette commande ressemble à ceci :

  4. Créez une sous-classe de NSScriptCommand et nommez-la MaCommandeDeRecherche

    Le fichier MaCommandeDeRecherche.h

    #import 
    
    @interface MyLookupCommand : NSScriptCommand
    
    @end

    Le fichier MaCommandeDeRecherche.m

    #import "MaCommandeDeRecherche.h"
    
    @implementation MyLookupCommand
    
    -(id)performDefaultImplementation {
    
        // obtenir les arguments
        NSDictionary *args = [self evaluatedArguments];
        NSString *stringToSearch = @"";
        if(args.count) {
            stringToSearch = [args valueForKey:@""];    // obtenir l'argument direct
        } else {
            // lever une erreur
            [self setScriptErrorNumber:-50];
            [self setScriptErrorString:@"Erreur de paramètre : Un paramètre est attendu pour le verbe 'recherche' (Vous devez spécifier _quoi_ vous voulez rechercher!)."];
        }
        // Implémenter votre logique de code (dans cet exemple, je poste juste une notification interne)
        [[NSNotificationCenter defaultCenter] postNotificationName:@"L'AppDoitRechercherChaîneNotification" object:stringToSearch];
        return nil;
    }
    
    @end

    Voilà en gros. Le secret est de sous-classer NSScriptCommand et de remplacer performDefaultImplementation. J'espère que cela aidera quelqu'un à y arriver plus rapidement...

4voto

Les versions modernes de Cocoa peuvent directement interpréter la définition du script (.sdef) dans la liste des propriétés, donc tout ce que vous avez à faire pour un support de base d'AppleScript est de créer le fichier .sdef selon la documentation, l'ajouter à votre phase de "copy bundle resources" et déclarer le support d'AppleScript dans votre Info.plist. Pour accéder aux objets autres que NSApp, vous définissez des spécificateurs d'objet, de sorte que chaque objet connaisse sa position dans la hiérarchie du monde du script. Cela vous permet de manipuler les propriétés des objets avec kvc, et d'utiliser les méthodes des objets comme des commandes simples du script.

3voto

Le meilleur endroit pour trouver des informations sur le sujet est la Bibliothèque de référence Mac OS X.
Voici toutes les informations dont vous aurez besoin pour commencer :

SimpleScripting

Cet exemple vous guide à travers les étapes les plus basiques requises pour rendre une application scriptable. Cela inclut la configuration du fichier info.plist, l'ajout d'un dictionnaire de script et l'ajout d'une propriété à la classe principale de l'application.

SimpleScriptingObjects

Cet exemple est une suite des exemples SimpleScripting et SimpleScriptingProperties et montre comment ajouter une hiérarchie d'objets à la terminologie fournie par une application AppleScriptable.

SimpleScriptingProperties

Cet exemple est une suite de l'exemple SimpleScripting et montre comment ajouter des propriétés à la terminologie fournie par une application AppleScriptable.

SimpleScriptingVerbs

Cet exemple est une suite de l'exemple SimpleScripting et montre comment ajouter des verbes à la terminologie fournie par une application AppleScriptable.

SimpleScriptingPlugin

Cet exemple est une suite de l'exemple SimpleScriptingObjects, et utilise de nombreuses techniques de l'exemple SimpleScriptingVerbs. Après avoir terminé les étapes définies dans l'exemple SimpleScriptingObjects pour configurer et créer une application scriptable, vous pouvez continuer avec les étapes de cet exemple pour ajouter à la fois des capacités de plugins de script à l'application et un exemple de plugin de script.

Les techniques présentées ici illustrent un certain nombre de choses intéressantes que vous pouvez faire avec un plugin de script. Cela inclut :

(a) ajouter de nouvelles classes de script

(b) étendre les classes de script existantes

(c) ajouter de nouvelles commandes de script

En résumé, une fois qu'une application est scriptable, permettre l'utilisation de plugins de script est un travail facile. Les modifications à apporter à l'application hôte sont minimes et très génériques. Aucun code spécial n'a besoin d'être ajouté aux classes de script existantes pour permettre l'utilisation de plugins. De plus, la création des plugins de script n'est pas plus difficile que d'ajouter quelques scripts supplémentaires à l'application. Le plugin de script lui-même est un simple Bundle chargeable Cocoa qui contient un ou plusieurs fichiers .sdef décrivant sa fonctionnalité de script.

2voto

Barry Wark Points 73462

Vous devriez lire le Guide de scripting Cocoa sur le DevCenter d'Apple.

1voto

ericgorr Points 3274

Vous voudrez commencer par Introduction à la vue d'ensemble d'AppleScript.

EDIT : Si vous voulez un peu de code d'exemple, vous pouvez vous rendre sur Bibliothèque de référence Mac OS X : Communication inter-applications et filtrer la liste avec 'Code d'exemple'. J'ai essayé l'application d'exemple Cocoa appelée Sketch sous Xcode 3.2 et ça fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X