Gestion de développement

GGGG Membre
16:41 modifié dans API AppKit #1
Bonjour à  tous,

je cherche le moyen de faire des développements un peu plus factorisés, mais je ne connais pas encore le moyen de le faire.
Je cherche par exemple à  faire une petite librairie contenant une fenêtre graphique et un objet cocoa utilisant cette fenêtre graphique. (Son rôle est de chercher un type de fichier et de les stocker dans un NSArray, la fenêtre n'a pour unique rôle que d'arréter la recherche et de visualiser l'état de la recherche).
Dans quoi puis je stocker ce fichier nib et ma ou mes classes cocoa, que je pourrai ensuite utilisé dans un projet plus important ?


Bonne journée à  tous.
«1

Réponses

  • schlumschlum Membre
    16:41 modifié #2
    Un Framework ?
  • GGGG Membre
    16:41 modifié #3
    merci Schlum, mais le framework peut être compilé en statique dans un nouveau projet ?
    En gros je ne voudrais pas que le nouveau projet nécessite l'installation de ce framework :p.
  • Philippe49Philippe49 Membre
    16:41 modifié #4

    Une classe qui crée et fait le design du panel ou de la window ....

    Une sous-classe de NSWindow/NSWindowController , et à  l'utilisation, on attribue dans IB cette classe?

    Le package ( nib pour le panel + classe associée ) je ne connais pas si ce n'est à  importer/copier les deux.
  • Philippe49Philippe49 Membre
    16:41 modifié #5
    si ce n'est les IBPlugin, mais il faut importer un framework
  • schlumschlum Membre
    16:41 modifié #6
    dans 1210937024:

    merci Schlum, mais le framework peut être compilé en statique dans un nouveau projet ?
    En gros je ne voudrais pas que le nouveau projet nécessite l'installation de ce framework :p.


    Oui, un Framework peut être intégré à  une application dans les ressources (encore que j'ai pas retrouvé comment faire avec Xcode 2.5 et Leopard).
  • GGGG Membre
    16:41 modifié #7
    ok merci à  vous deux, je vais faire des tests pour voir si je m'en sors avec un framework et Xcode 3.1 :p
  • NoNo Membre
    16:41 modifié #8
    Fabrique un plugin cocoa pour contenir ton nib et tes quelques classes.
    Un plugin est complètement indépendant du bundle application qui le contient.
    Il se stocke dans le bundle de l'appli dans un sous répertoire Plugins.

    Dans l'appli principale, le plugin se charge par programmation ([[NSBundle mainbundle] builtInPlugInsPath]+nom_du_plugin pour récupérer le chemin du plugin à  charger, puis [[NSBundle bundleWithPath:] load] pour le charger).
    A tout moment on peut savoir si le plugin s'est réellement chargé ou non.
    Si c'est non, ça n'empêche pas l'appli de fonctionner.
  • schlumschlum Membre
    16:41 modifié #9
    Un plug-in c'est plutôt fait pour ajouter des fonctionnalités à  une application déjà  existante ; c'est pas vraiment de la modularité.
    Quand au lien, on peut faire du weak-linking avec les Frameworks mais peu d'intérêt dans ce qu'il veut faire je pense.
  • NoNo Membre
    16:41 modifié #10
    dans 1210948401:

    Un plug-in c'est plutôt fait pour ajouter des fonctionnalités à  une application déjà  existante ; c'est pas vraiment de la modularité.
    Quand au lien, on peut faire du weak-linking avec les Frameworks mais peu d'intérêt dans ce qu'il veut faire je pense.


    Le plugin est complètement indépendant de l'appli qui l'utilise.
    Il peut être utilisé par une ou plusieurs appli s'il est bien conçu (soit en l'incluant dans le bundle de chaque appli, soit en passant par les répertoires plugin communs du user ou du système).

    Avec le weak link, c'est possible (sous certaines conditions, dont le version OSX et GCC) d'avoir une lib absente au lancement de l'appli.
    Mais ce n'est plus vrai pour la compil de l'appli où le framework est indispensable.

    Le plugin est par nature indépendant, donc aucun souci : il peut être développé dans un projet à  part, par un autre programmeur, sur une autre machine.

    L'inconvénient du plugin est d'être "statique", c'est à  dire d'avoir son code dupliqué par chaque process qui le charge (alors que le framework peut être dynamique, donc en mémoire partagée).
  • schlumschlum Membre
    16:41 modifié #11
    D'après la description, il ne me semble pas que c'est un plug-in dont il a besoin ; un plug-in est par définition un module dont une application peut se passer... Là  à  priori sa fenêtre il en a besoin dans tous les cas.
  • 16:41 modifié #12
    C'est clair que quand on fouille /System/Library/Frameworks et toutes les applications cocoa en général on voit bien qu'il n'y a que des plugins !

    Plugin on nous tous !
  • Philippe49Philippe49 Membre
    mai 2008 modifié #13
    Il y a une confusion dans les termes. Un IBPlugin c'est ce qui auparavant était une IBPalette.

    Cela contient donc un ou des objets d'interface graphique que l'on rajoute à  la librairie de IB, et le framework qui va avec.


  • NoNo Membre
    16:41 modifié #14
    dans 1210954281:

    D'après la description, il ne me semble pas que c'est un plug-in dont il a besoin ; un plug-in est par définition un module dont une application peut se passer... Là  à  priori sa fenêtre il en a besoin dans tous les cas.

    Ta définition du plugin est un peu stricte...
    C'est surtout la phrase "En gros je ne voudrais pas que le nouveau projet nécessite l'installation de ce framework" de GG qui me faisait pencher vers le plugin.
    De toute façon, plugin ou framework ont la même structure (même si des différences existent dans le binaire), donc c'est à  GG de trancher.

    dans 1210956976:

    C'est clair que quand on fouille /System/Library/Frameworks et toutes les applications cocoa en général on voit bien qu'il n'y a que des plugins !
    Plugin on nous tous !


    Soit pas morveux, respire et explique sans te moquer... C'est un forum, non ?
  • Philippe49Philippe49 Membre
    16:41 modifié #15
    dans 1210958807:

    Il y a une confusion dans les termes. Un IBPlugin c'est ce qui auparavant était une IBPalette.

    Cela contient donc un ou des objets d'interface graphique que l'on rajoute à  la librairie de IB, et le framework qui va avec.


    Cela s'utilise très simplement :
    Dans un nouveau projet, vous importez le framework (il contient les "objets IB" nécessaires via le plug-in).
    IB complète automatiquement alors sa librairie avec le plug-in, c'est à  dire le ou les objets que vous avez définis, que l'on peut alors utiliser dans son interface. 8--)

    Ceci dit, par rapport à  la spécification du problème, une simple classe semble pouvoir suffire à  circonscrire le problème, avec une interface dynamique.
  • schlumschlum Membre
    mai 2008 modifié #16
    Je disais " par définition ", car c'est l'étymologie du mot  ;)
    plug-in -> qui se branche

    Si une application a "besoin" de son plugin pour fonctionner, pour moi c'est pas un plug-in  :P
    On peut faire l'analogie avec le hardware et les accessoires.


    Et justement, au niveau du binaire avec un Framework c'est quasiment comme si c'était une classe et un nib interne.
    Par exemple, WebKit.framework intègre ses classes, et son panneau d'authentification dans un .nib

    Pour ne pas avoir à  l'installer, on peut l'inclure dans les ressources et faire le lien relatif.
  • Philippe49Philippe49 Membre
    16:41 modifié #17
    dans 1210963764:

    Je disais " par définition ", car c'est l'étymologie du mot  ;)
    plug-in -> qui se branche

    Si une application a "besoin" de son plugin pour fonctionner, pour moi c'est pas un plug-in  :P
    On peut faire l'analogie avec le hardware et les accessoires.


    Et justement, au niveau du binaire avec un Framework c'est quasiment comme si c'était une classe et un nib interne.
    Par exemple, WebKit.framework intègre ses classes, et son panneau d'authentification dans un .nib

    Pour ne pas avoir à  l'installer, on peut l'inclure dans les ressources et faire le lien relatif.


    Il me semble bien à  ce que tu dis que Webkit.framework est un IBPlugin "standard", et on se retrouve d'accord.

  • schlumschlum Membre
    16:41 modifié #18
    Ah non, WebKit n'est pas pas un IBPlugin...
    C'est un vrai Framework avec de nombreuses classes et quelques .nib
    Par contre, y a un IBPlugin lié pour les WebView je crois effectivement.
  • Philippe49Philippe49 Membre
    16:41 modifié #19
    dans 1210964854:

    C'est un vrai Framework avec de nombreuses classes et quelques .nib


    Je n'ai jamais fait ce genre de projet :
    On ouvre un projet "Framework" et les fichiers .nib s'archivent avec ?

    Ci-joint une utilisation d'un ibplugin : dans la librairie, on ne voit pas vraiment la différence entre la webframe et le custom ibplugin ClosingBox.
  • schlumschlum Membre
    16:41 modifié #20
    Je ne comprends pas ce que tu veux dire exactement...

    Framework
    Plugin
    IBPlugin

    Ce sont trois choses très différentes  ???
  • Philippe49Philippe49 Membre
    mai 2008 modifié #21
    plugin, je n'en ai pas parlé, si ce n'est qu'un IBPlugin est un plug-in pour l'application Interface Builder.

    La construction d'un IBPlugin (anciennement IBPalette), c'est-à -dire l'ajout à  IB d'objets d'interface personnalisés, se fait avec le code des classes corrrespondantes à  ces objets.
    Désormais, le packaging se fait par un framework contenant en ressources un fichier .ibplugin qui est utilisé par IB pour faire sa sauce. (dans l'ancienne technologie, il y avait séparation du framework et des "palettes" pour IB)
       
    Pour l'utilisation, voir plus haut
  • schlumschlum Membre
    16:41 modifié #22
    Ah OK

    Dans mon /System/Library/Frameworks, j'ai trouvé ceux-ci (et pas de trace de WebView)
  • Philippe49Philippe49 Membre
    16:41 modifié #23
    WebKitPlugin.ibplugin se trouve dans les ressources d'Interface Builder, et il est intéressant de visiter le Contents de ce plugin.
    Dans IBPlugin Guide, Apple autorise tout aussi bien le mode package décrit ci-dessus que le mode framework/plugin séparé, la manip est un peu moins automatique dans ce dernier cas.
    voir documentation  
  • GGGG Membre
    16:41 modifié #24
    Pardonnez moi, j'en reviens à  mon test  ;).  :fouf):

    En fait, le framework nécessite qu'il soit installé sur le système.
    Je pensais que l'on pouvait compiler de manière statique un framework, et donc ne pas être obligé de l'installer.
    En gros je voulais factoriser mes développements, et faire une bibliothèque à  la manière d'une archive .a en C (compilation statique possible, pas besoin d'installation de cette dite bibliothèque).

    Comment faire pour créer une bibliothèque possédant un fichier nib (ou xib avec Xcode 3.1) et du code, et l'incorporer d'un nouveau projet en le compilant et l'incorporant de manière statique.

    Vous avez une idée ?
    Si vous voulez tester ce que j'ai fait je peux mettre une archive ici avec les deux projets.

    Bonne soirée à  tous.
  • MalaMala Membre, Modérateur
    16:41 modifié #25
    dans 1211217044:

    Pardonnez moi, j'en reviens à  mon test  ;).  :fouf):

    En fait, le framework nécessite qu'il soit installé sur le système.
    Je pensais que l'on pouvait compiler de manière statique un framework, et donc ne pas être obligé de l'installer.

    Et un framework privé ne ferais pas l'affaire? L'utilisateur n'en voit rien. Il est installé à  l'intérieur de l'application.

    Jettes un oeil par ici
  • schlumschlum Membre
    16:41 modifié #26
    dans 1211217044:

    Pardonnez moi, j'en reviens à  mon test  ;).  :fouf):

    En fait, le framework nécessite qu'il soit installé sur le système.
    Je pensais que l'on pouvait compiler de manière statique un framework, et donc ne pas être obligé de l'installer.
    En gros je voulais factoriser mes développements, et faire une bibliothèque à  la manière d'une archive .a en C (compilation statique possible, pas besoin d'installation de cette dite bibliothèque).

    Comment faire pour créer une bibliothèque possédant un fichier nib (ou xib avec Xcode 3.1) et du code, et l'incorporer d'un nouveau projet en le compilant et l'incorporant de manière statique.

    Vous avez une idée ?
    Si vous voulez tester ce que j'ai fait je peux mettre une archive ici avec les deux projets.

    Bonne soirée à  tous.


    Ben ça a déjà  été dit un peu tout le long du sujet ; le framework tu le mets dans les ressources de l'appli et tu fais le lien (dynamique) avec celui à  l'intérieur de l'appli.
    -> rien à  installer  ???
  • GGGG Membre
    16:41 modifié #27
    merci à  tous, j'ai bien suivi vos conseils, mais je n'arrive toujours pas à  copier le framework dans l'application.
    Ca fonctionne par contre lorsque je mets le framework dans ~/Library/Framework (mais déconseillé par la documentation d'Apple).

    Xcode refuse de copier le framework lorsque je suis sur Target ( de l'application ), et que je fais New Build Target -> New copy file build et que je choisis l'onglet Framework et le chemin du framework qui se situe dans le projet.

    Est ce un problème de version de Xcode ?
  • laurrislaurris Membre
    16:41 modifié #28
    <br />Xcode refuse de copier le framework lorsque je suis sur Target ( de l&#39;application ), et que je fais New Build Target -&gt; New copy file build et que je choisis l&#39;onglet Framework et le chemin du framework qui se situe dans le projet.<br />
    

    Le chemin du framework dans la 'New copy file build phase' veut dire "sous-chemin de destination du fichier à  partir d'un répertoire relatif au bundle de l'application tel qu'indiqué dans l'onglet".
    Donc dans ton cas, il faut faire: onglet: "Framework" - subpath: rien.
    Et il faut surtout ajouter le framework à  la build phase par glissage/déposage.

    Après, plus qu'à  modifier le build setting 'install path' dans la target du framework en suivant les indications données dans la documentation accessible dans xcode à  la suite d'une recherche 'embedded framework' par exemple ... et le tour est joué.

  • GGGG Membre
    16:41 modifié #29
    Merci encore Lauris, maintenant le framework est bien importé à  la bonne place.
    Il me reste un truc à  faire, c'est de donner le bon path à  l'execution de l'application car elle cherche toujours en ~/Library/Framework/.....


    Je regarde dans la configuration de l'application (pour le framework j'ai suivi les instructions de la doc à  savoir @executable_path:../Frameworks).

  • Philippe49Philippe49 Membre
    16:41 modifié #30
    dans 1211285936:

    Ca fonctionne par contre lorsque je mets le framework dans ~/Library/Framework (mais déconseillé par la documentation d'Apple).

    Tu es sur qu'Apple déconseille cela ? Il s'agit du chemin d'accès au répertoire standard pour les Frameworks d'un utilisateur donné ~ . 
  • laurrislaurris Membre
    16:41 modifié #31
    dans 1211296760:

    (pour le framework j'ai suivi les instructions de la doc à  savoir @executable_path:../Frameworks).


    Bingo. Je voulais pas le dire par timidité ...
    (juste une petite typo que tu as sans doute déjà  corrigée: il faut remplacer ':' par '/'.

    Normalement, l'appli devrait chercher toute seule le framework dans son dossier Framework, donc pas besoin de le lui dire.
    C'est peut-être à  la compilation que ça coince mais dans ce cas il faudrait plus de précisions ...
Connectez-vous ou Inscrivez-vous pour répondre.