Utilitaire pour Mac

Bonjour,


J'ai développé en Applescript des bouts de programmes qui doivent s'insérer dans une interface graphique faite avec Xcode.


Problème si j'ai fait de la POO et ai appris un certain nombre de langages, je suis totalement débutant en Xcode. Je cherche comment réaliser une maquette de mon projet et voici ma question qui porte sur le lien entre Applescript et Xcode. J'ai récupéré un bout de programme en Objective_C mais je ne sais ni où ni comment l'insérer pour implémenter une action sur un push d'un bouton de mon interface.


 


- (IBAction)MonBouton:(id)sender


{

NSAppleScript *tonAppleScript = [[NSAppleScript alloc] initWithSource:


@open location \http://www.apple.com/safari/\"];


}


 


J'ai tout de suite des questions de néophyte que vous trouverez sans doute naà¯ves mais il faut bien commencer quelque part non ? Totalement débutant en Xcode mais pas en POO, je cherche à  comprendre les tenants et aboutissants du linkage de façon rudimentaire avant de me plonger dans Objective-C pour pouvoir présenter puis développer mon projet.


1° Dans le menu "Fichier" de Xcode, il y a un sous-menu "Add files to Playlist", playlist étant le nom de mon projet. Est-ce par là  que je dois rajouter mon script du bouton, celui qui est appelé tonAppleScript ? Si je fais cela, il va le trouver forcément au moment du run, mon script ?
2° La partie code: dans le view Controller c-a-d le dispositif qui permet la présentation graphique de l'interface et des boutons, comment j'associe le code donné ci-dessus avec ce bouton ? Comment linker les 2 dans la partie "code " de "View Controller.m "? Je crois qu'il faut appuyer sur Ctrl et tirer une ligne depuis le bouton vers le View Contrôler pour pouvoir le programmer et lui associer du code non ?


Question annexe sur ces qq lignes:


3° À quoi sert cette partie de code qui fait référence à  Safari, à  savoir  @open location \http://www.apple.com/safari/\"] ?


Réponses

  • Le programme doit être initié sous Xcode. Ensuite tu vas consulter dans la doc l'objet NSAppleScript (de mémoire!) qui permet soit de compiler le texte du script soit d'utiliser un script déjà  compilé, puis de lancer l'exécution en récupérant (éventuellement) un résultat.


    Si tu ne connais pas Xcode, cocoa ... etc la première chose à  faire serait d'en apprendre un minimum en suivant un ou deux tutoriels.


  • DrakenDraken Membre
    novembre 2014 modifié #3

    Le corps de marines de l'armée américaine a une devise : "Il y a la bonne manière de faire les choses. Il y a la mauvaise manière de faire les choses. Il y a la manière des marines de faire les choses". C'est la même chose chez Apple. Tablier a raison, tu devrais consulter des tutoriels pour apprendre la philosophie d'utilisation de Xcode.


     


    Voici la section tutoriels du forum : http://forum.cocoacafe.fr/forum/26-liens-vers-des-articles-pour-ios-sdk-et-mac-sdk/

  • shubshub Membre
    décembre 2014 modifié #4

    Merci beaucoup pour ces liens très intéressant. En attendant de me taper toute la doc et de comprendre les tenants et aboutissants de tout Xcode avec des bouquins ou des cours particuliers (j'en cherche), vous ne pourriez pas me répondre à  ma ou mes questions ?


    Apparemment ça ne doit pas être trop compliqué comme manip' de mettre un bouton dans un frame et ensuite dans main.m, je crois bien, de mettre une référence à  mon script que j'aurais inséré dieu sait comment pour qu'il le trouve au moment du run.


    Si je savais faire juste ça (ça doit pas être trop compliqué, c'est vous les experts !) je pourrais éventuellement proposer mon projet et peut-être trouver un financement ou une boite qui avec l'aide de développeurs expérimentés tels que vous qui pourraient le développer.


    Merci d'avance de faire simple, efficace et pragmatique. Faut voir la situation:  aborder une montagne comme Xcode d'un seul coup (tout Xcode, TOUT Objective_C), alors que le but initial est simple, c'est pas facile.


     


    Sinon je cherche comment et où télécharger Xcode version 5.1.1 pour une bonne et simple raison: la doc, les livres et tutoriels datent de cette version 5 et il n'y a pas encore de doc et tutoriel pour la version 6. Or semble-t-il que beaucoup de choses aient changé notamment dans l'interface et le langage Swift.


     


    On pourrait le télécharger semble-t-il depuis Torrent avec le logiciel Torch mais le débit est très mou et le téléchargement s'arrête au bout de qq minutes seulement. Vers 3% de chargement, il s'arrête net.


  • Pour télécharger les anciennes version d'Xcode il faut passer par le dev-center  (member-center  / iOS(ou Mac) ) et sous les url d'Xcode 6 sélectionner  Looking for an older version of Xcode?


     


    Concernant le fait que tu début et dans la mesure ou tu te débrouille en anglais ces quelques liens peuvent t'intéresser :


    Start Developing iOS By Apple


    Your First Mac App


    Tu aura déjà  une meilleur approche du fonctionnement de Xcode (même si le premier lien concerne plutôt le développement mobile)


  • shubshub Membre
    décembre 2014 modifié #6

    Merci c'est très aimable à  vous. En fait c'est pour Mac pas pour iOs: déjà  un gros souci car les bibliothèques et les symboles sont pas les mêmes.


     


    Malheureusement pour le lien que vous me donnez, Apple me refuse l'accès à  la section "developper" disant que soit mon login soit mon MDP est faux. Pourtant ça marche bien partout ailleurs ces MDP-login comme sur iTunes Store ou AppStore. Pas de bol vraiment!!


     


    J'essaie un truc simple comme de programmer un bouton via playground et il me refuse aussi.  Je croyais que NSbutton était un type qu'on pouvait écrire "à  la volée" mais ça a pas l'air de marcher. 


     


    var StartButton: NSbutton = NSbutton(frame: CGRect(x:0,y:0,width:250,height:50))


     


    Pourtant, il semble que sous iOs on puisse écrire:


    var StartButton: UIbutton = UIbutton(frame: CGRect(x:0,y:0,width:250,height:50))


     


    Comprends pas... On dirait d'après les tutoriels que Xcode c'est fait surtout pour programmer les iPhone6 et iPad pas pour Mac. Ce qu'il y a de archi casse-pieds dans l'informatique, c'est que même si on veut se servir d'un de leurs logiciels Apple pour programmer un truc apparemment simple (faire exécuter un script Applescript quand on clique sur un bouton de l'interface) faut essuyer des tas de plâtres, se taper une doc de 3 tonnes et 1400 pages, comprendre la philosophie profonde du logiciel avant d'effectuer le moindre truc... Y'a pas de bouquins non plus sur Xcode 6 (trop récent) et ils essaient de promouvoir leur langage Swift.  Quel bazar quand même !


    ​ça donne l'impression que si on les suit pas depuis 10 ans avec leur Xcode, pas la peine de se jeter là -dedans: on n'arrivera à  rien.




  • Malheureusement pour le lien que vous me donnez, Apple me refuse l'accès à  la section "developper" disant que soit mon login soit mon MDP est faux. Pourtant ça marche bien partout ailleurs ces MDP-login comme sur iTunes Store ou AppStore. Pas de bol vraiment!!




     


    Il faut s'inscrire comme Apple Developer sur le site des développeurs pour avoir accès aux ressources de développement ; c'est gratuit.



  • Comprends pas... On dirait d'après les tutoriels que Xcode c'est fait surtout pour programmer les iPhone6 et iPad pas pour Mac. Ce qu'il y a de archi casse-pieds dans l'informatique, c'est que même si on veut se servir d'un de leurs logiciels Apple pour programmer un truc apparemment simple (faire exécuter un script Applescript quand on clique sur un bouton de l'interface) faut essuyer des tas de plâtres, se taper une doc de 3 tonnes et 1400 pages, comprendre la philosophie profonde du logiciel avant d'effectuer le moindre truc... Y'a pas de bouquins non plus sur Xcode 6 (trop récent) et ils essaient de promouvoir leur langage Swift.  Quel bazar quand même !


    ​ça donne l'impression que si on les suit pas depuis 10 ans avec leur Xcode, pas la peine de se jeter là -dedans: on n'arrivera à  rien.




     


    C'est beaucoup plus simple que ça. La doc Apple est de très bonne qualité (complète, facile à  exploiter, bien structurée, contient à  la fois des tutoriels et de la documentation de référence) et forcément plus à  jour que les tutoriels que tu vas trouver sur Internet.


    Il n'est pas nécessaire de tout lire pour commencer à  développer, les liens donnés par chatonSauvage sont ceux par lesquels il faut commencer.


     


    Si tu cherches sur OSX au lieu de iOS, c'est simple, il faut prendre "Start developping Mac Apps today" au lieu de "Start developping iOS ...". Après avoir lu ces 130 pages (avec beaucoup d'images) tu auras une vision générale sur le développement Mac et comment trouver de la doc pour aller plus loin.


     


    Si tu consultes la documentation de NSAppleScript tu verras qu'il ne suffit pas d'initialiser une instance, il faut ensuite l'exécuter en lui envoyant un message executeAndReturnError.

  • tabliertablier Membre
    décembre 2014 modifié #9

    Je ne sais pas si Apple le propose toujours, pour ma part j'ai une inscription gratuite en tant que développeur. Cela permet d'accéder au site développeur, ne permet pas d'avoir une signature donc ne permet pas de publier ses applications chez Apple et ne donne pas droit à  un soutien de leurs équipes.


    Mais en tant qu'amateur c'est suffisant pour apprendre la programmation des Mac et publier sur un site personnel.


  • shubshub Membre
    décembre 2014 modifié #10


    Il faut s'inscrire comme Apple Developer sur le site des développeurs pour avoir accès aux ressources de développement ; c'est gratuit.




    Impossible , j'y arrive pas: encore un bug mystère!


    Normalement on a un seul ID chez Apple qui permet de tout faire: aller sur iTunes Store, Appstore et aussi dans la partie développement.


    Lorsque je clique sur "Sign in " sur la page Developper Apple, il m'affiche une page avec mon nom et prénom dans le login ce qui doit correspondre à  mon iD ou un des ID, et le MDP est masqué. Lorsque je réécris le MDB pour être sûr que c'est le bon, il me dit que je suis inconnu au bataillon.


     


    Ouf! ça y est j'y suis arrivé!! Par contre ils demandent 99$ par an (enrollment) pour avoir accès à  la doc et au forums. Pas du tout gratuit ce truc!!!


    Juste une question: la plupart de tutoriels sont pour Xcode 4 et ça a beaucoup changé depuis avec la version 6.


    Dans un de ces tutoriels, j'ai vu que lorsqu'on crée un bouton sur un frame, apparaissent et sont créés normalement 2 fichiers, soit PushButton.h et PushButton.m. Donc à  partir de là  on peut programmer en Objective-C dans ces fichiers pour faire exécuter une action. Oui mais ça c'est en version 4 et en version 6, impossible de trouver ces fameux fichiers.


     


    Comment vous faites pour programmer une action sur un bouton et surtout où et dans quel fichier ??


  • Joanna CarterJoanna Carter Membre, Modérateur
    décembre 2014 modifié #11
    On ne programme pas "sur" un bouton. Au moins, il faut créer une window avec une view avec IB, Puis il faudrait créer un viewController qui serait responsable pour réagir aux actions des contrôles comme les boutons qui sont posés sur la view.


    Un tuto sur Xcode se trouve à  https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/RM_YourFirstApp_Mac/Articles/GettingStarted.html qui est disponible sans inscription.
  • tabliertablier Membre
    décembre 2014 modifié #12

    Plutôt que de continuer sur des petits bouts d'informations, je mets ci-dessous un tutoriel écrit en 2006 et corrigé partiellement pour tenir compte des changement de Xcode et des Frameworks. Je te mets également le projet correspondant au tutoriel, qui compile et marche sous Xcode 5.1.1 et OSx 10.9.5.


    Le tutoriel décrit la manière d'arriver à  une application terminée qui utilise des fenêtres, un script, fait des calculs simples et lance une musique. Le moins à  jour des deux est le tutoriel !!!!


     


  • Voici l'adresse d'un site contenant des vidéos sur l'utilisation de Xcode 6, réalisées par un professeur de l'université Pierre et Marie Curie, dans le cadre de ces cours sur la programmation iPhone et iOS. C'est à  la pointe de la modernité. L'Objective-C et Swift sont traités à  parts égales.


     


    http://pagesperso-systeme.lip6.fr/Fabrice.Kordon/5I452-2014/


  • C'est à  la pointe de la modernité



      >:D   Non, c'est à  la pointe aujourd'hui ! et obsolète demain matin !


  • shubshub Membre
    décembre 2014 modifié #15


    On ne programme pas "sur" un bouton. Au moins, il faut créer une window avec une view avec IB, Puis il faudrait créer un viewController qui serait responsable pour réagir aux actions des contrôles comme les boutons qui sont posés sur la view.


    Un tuto sur Xcode se trouve à  https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/RM_YourFirstApp_Mac/Articles/GettingStarted.html qui est disponible sans inscription.




    Merci beaucoup pour ces tutoriels.


    Effectivement on ne programme pas un bouton. On clique droit dessus depuis l'IB et on tire une ligne jusqu'à  l'éditeur de ViewController. Normalement d'après une doc, en faisant un clic droit sur le bouton doivent apparaà®tre des pré-méthodes (une dizaine semble-t-il) dont 2 s'appellent respectivement TouchDown et TouchUp, ce qui correspond à  souris-enfoncée et relâchée. ça marche pas chez moi, elles n'apparaissent pas et je ne comprends pas pourquoi car c'était dans la doc mais j'ai créé ainsi  2 méthodes que j'ai appelées doButtondown et doButtonup. Bon il ne reste plus qu'à  les programmer pour que ViewController comprenne qu'il doit les appeler lors de l'event souris-enfoncée puis relâchée. Il semble que ces deux instances TouchDown et TouchUp, aient été remplacé dans la version 6 par PerformClick, ce qui ressort bien dans la fenêtre Output. Quand je clique , il sort bien le message "J'ai appuyé".


     


     


    @implementation ViewController


     


    - (IBAction)doButtonDown:(id)sender {


        NSLog(@ J'ai appuyé);


    }


    - (IBAction)doButtonUp:(id)sender {


    }


     


    Lorsqu'on a UIxxxx comme nom en tête d'une méthode, cela veut dire qu'on programme pour iOs et non Os non ?


    Pas facile quand on débute mais on arrive quand même à  progresser.


     


    Sinon re-merci pour les infos..


  • Joanna CarterJoanna Carter Membre, Modérateur


    Effectivement on ne programme pas un bouton. On clique droit dessus depuis l'IB et on tire une ligne jusqu'à  l'éditeur de ViewController. Normalement d'après une doc, en faisant un clic droit sur le bouton doivent apparaà®tre des pré-méthodes (une dizaine semble-t-il) dont 2 s'appellent respectivement TouchDown et TouchUp, ce qui correspond à  souris-enfoncée et relâchée.




     


    Et là , tu as tort. Dans quelle doc ?


     


    Tu devais faire un Ctrl-drag du bouton jusqu'à  l'éditeur et là  s'apparaà®tra une bulle où tu peux saisir le nom de la méthode et le type du paramètre. 

  • @Joanna


    Dans les anciennes méthodes on tirait une ligne depuis la définition de l'IBAction du viewcontroller vers le bouton qu'on liait à  cette action.  C'était un peu plus long mais par certains cotés je trouve que c'était plus compréhensible.


    Enfin, chacun son avis la dessus. Par ailleurs, je ne vois pas ou shub a récupéré la méthode qu'il décrit !!


  • shubshub Membre
    décembre 2014 modifié #18

    Un gros mais alors un très gros merci à  Tablier. Votre projet est suffisamment abouti et plutôt pédagogique. Je ne vois pas ce que vous reprochez à  votre tutoriel.


    ​J'ai enfin les quelques instructions qui me permettent d'appeler un fichier Applescript en cliquant sur un bouton. 


    Pas gagné encore: faut les faire fonctionner avec les init et le executeAndError, et toutes les instances qui doivent être en place et aux bons endroits.


     


    Je ne résiste pas à  une petite blague. Un jour un président (dans l'Afrique francophone je crois, pardon pour nos amis africains!) a dit:


    "Nous étions au bord du gouffre mais depuis nous avons fait un grand pas en avant."


     


    ​Sinon d'où vient une telle fascination pour le chocolat sur ce site ?


     


    P.S. La méthode de click and drag vient d'ici:


    ​http://rshankar.com/different-ways-to-connect-ibaction-to-uibutton/


     


    ça marche: qui s'en plaindrait surtout un débutant comme moi ?


  • Félix Houphouët-Boigny


     


    Cocoa-Cacao


  • shubshub Membre
    décembre 2014 modifié #20

    Désolé de vous re-solliciter: suis assez débutant comme vous voyez !


     


    Comment peut-on faire exécuter une méthode d'instance  ?


    J'ai un bouton auquel est associé une action et qui figure dans ViewController ainsi:


     


    - (IBAction)doButtonSystemVoice:(NSButton *)sender {


           NSLog(@" J'ai appuyé : with sender : %@", sender);


    }


     


    Le NSlog est provisoire et me permet de vérifier que l'utilisateur a bien appuyé sur le bouton.


    D'autre part, j'ai une méthode d'instance qui exécute un script et qui s'appelle executeScript : elle exécute un script comme son nom l'indique.


     


    ​Je voudrais que lorsque l'utilisateur clique le bouton , l'Applescript soit lancé. D'après la doc, il suffirait de faire:


     


     (IBAction)doButtonSystemVoice:(NSButton *)sender {


           NSLog(@" J'ai appuyé System's voice: with sender : %@", sender);


           [executescript];


    }


     


    Or j'obtiens le message "use of undeclared of identifier". Pourtant la méthode executeScript existe bien  et est déclarée en-tête après l'instruction @implementation ViewController sous forme d'une série d'instructions.


     


    - (void)executeScript      //Applescript__


    {


    .................


    }

     

    Une idée ?

  • Joanna CarterJoanna Carter Membre, Modérateur
    Tu as déclaré les variables mais tu n'as rien mis les dedans et tu n'as pas appelé aucune méthode.
  • tabliertablier Membre
    décembre 2014 modifié #22

    NSLog(@" J'ai appuyé System's voice: with sender : %@", sender);



    je crois que "sender" n'est pas un NSString mais un chiffre, enfin une référence à  un objet. Donc le NSLog ne doit pas être content! Remplaces par un texte direct pour voir la différence dans la console:


    NSLog(@" J'ai appuyé System's voice: with sender : %@", @celui-la);


    Les variables locales sont permises dans les IBAction. Il faut quand même les utiliser pour que cela serve à  quelque chose.



     



    Un gros mais alors un très gros merci à  Tablier. Votre projet est suffisamment abouti et plutôt pédagogique. Je ne vois pas ce que vous reprochez à  votre tutoriel.



    J'y reproche de n'être plus à  jour! et il faut évitez de dire ce genre de chose sur le forum, sinon Aligator va y jeter un oe“il, puis me taper sur la tête!  J'ai bien peur que Ceroce fasse la même chose!


    Noooon pas sur la tête!!!!




  • je crois que "sender" n'est pas un NSString mais un chiffre, enfin une référence à  un objet. Donc le NSLog ne doit pas être content! Remplaces par un texte direct pour voir la différence dans la console:


    NSLog(@" J'ai appuyé System's voice: with sender : %@", @celui-la);


    Les variables locales sont permises dans les IBAction. Il faut quand même les utiliser pour que cela serve à  quelque chose.




     


    Le format %@ marche pour tous les objets. Il utilise le résultat de l'appel de la méthode description sur l'objet (ce résultat est un string). Par défaut description renvoie l'adresse de l'objet.

  • ah, Ok, je n'ai jamais utilisé comme ça!


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