[Résolu] Intégrer le "cocoacontrol" RSColorPicker

2»

Réponses

  • Alors, c'était comment ?

    Pas pu venir, j'étais entre Rome et Lyon... donc trop loin de Rennes !!!

    La vidéo à  bien fonctionné surtout ? image/wink.png' class='bbc_emoticon' alt=';)' />
  • AliGatorAliGator Membre, Modérateur
    Bon alors petit topo :
    • La présentation s'est bien passée, je suis plutôt content du résultat
    • Petit couac au début, j'ai oublié de lancer la capture vidéo de l'écran pendant les quelques premières slides, je ne l'ai lancé que quand j'ai switché sur Xcode pour faire la démo (donc bon vous aurez les slides Keynote pour le début et vous aurez bien la vidéo pour la démo, ça va quand même !)


    Par contre, pour expliquer comment inclure les headers :
    • J'ai présenté la solution que j'utilise actuellement (= renseigner le "Header Search Path" des headers de vos libs dans le projet de l'app), solution que je sais ne pas être idéale, mais la seule que je connaisse qui fonctionne partout dans tous les cas (même quand on fait un "Archive").
    • Je suis aussi passé rapidement sur l'autre solution (= configurer la librairie pour qu'elle copie les headers publics toute seule dans les Build Products), solution qui serait bien mieux car générerait un truc bien plus propre... mais qui ne marche pas quand on fait un "Archive", du coup je suis passé vite fait dessus




    Or j'ai découvert seulement après ma présentation qu'il y avait une solution pour que la 2e solution (configurer la lib pour copier les headers) fonctionne, même en Archive ! Du coup :
    • cette solution est bien plus propre,
    • vous avez moins de trucs à  configurer dans votre application pour intégrer la librairie,
    • vous pouvez faire des #import bien plus propres (façon #import <Lib/Header.h> et pas juste #import Header.h),
    • vous pouvez indiquer dans la libs quels headers sont à  copier (typiquement les headers publics) et lesquels ne pas copier (si vous avez des headers privés utilisés par votre lib mais que l'application qui utilise la lib ne doit pas connaà®tre, façon API privée)




    Bref tous les avantages de la solution idéale, sauf qu'elle posait des soucis et ne marchait pas en "Archive"... mais maintenant je sais comment ne plus avoir ces soucis... mais bien sûr j'ai découvert ça seulement après la présentation !



    Un peu dégoûté du coup de pas avoir eu cette info et solution avant, du coup j'ai perdu l'occasion de la partager en plus puisque mes slides avec la solution moins propre resteront gravées dans la vidéo image/wink.png' class='bbc_emoticon' alt=';)' />
  • AliGatorAliGator Membre, Modérateur
    janvier 2013 modifié #34
    Du coup pour référence la bonne procédure à  suivre... bah elle est finalement décrite dans ce doc Apple bien caché au fin fond du portail de devs que je n'avais jamais trouvé avant :



    http://developer.app...icLibraries.pdf



    Les étapes en résumé :



    1) Configurer un projet pour construire la librairie
    • Dans votre workspace, à  côté du projet de votre lib, créer un projet de type "Static Library" (disons MaLib.xcodeproj)
    • Mettez dedans tous vos fichiers .h et .m nécessaires que vous voulez externaliser (par exemple les sources d'un composant récupéré sur GitHub comme RSColorPicker), et configurez si besoin votre projet avec les réglages spécifiques utiles à  la lib (par exemple activation ou non d'ARC, etc).
    • Dans l'onglet "Build Phases" du target de MaLib.xcodeproj (qui génère votre lib statique), Xcode doit vous avoir déjà  préparé une phase "Copy Files" (avec comme destination "Build Products", subpath "include/${PRODUCT_NAME}").
      • Rajoutez dans cette phase les headers de votre lib que vous voulez rendre publics (par contre ne rajoutez pas les headers qui sont sensés être privés si vous en avez, que l'application utilisant la lib n'est pas sensé importer)
      • A chaque fois que vous rajouterez un .h dans le projet de la librairie, il faudra penser (si ce ".h" est sensé être public bien sûr) le rajouter dans cette phase "Copy Files"
    • Compilez votre librairie (et juste votre librairie) en "iOS Device" (et pas en simulator) afin de vérifier que votre projet de lib compile et de générer un premier "libMaLib.a". (Son nom va passer de rouge à  noir dans le dossier "Products" de MaLib.xcodeproj, dans votre Project Navigator à  gauche de Xcode)


    2) Intégrer la librairie dans votre application
    • Allez dans l'onglet "Build Phases" de votre projet MonApp.xcodeproj
    • Déroulez "Link Binary With Libraries", cliquez sur le "+", et rajoutez votre librarie "libMaLib.a" (qu'il doit vous proposer dans la liste)
    • Dans votre Project Navigator à  gauche dans Xcode, sélectionnez la référence au fichier "libMaLib.a" qu'il vient d'ajouter et dans le "File Inspector" à  droite, changez le popup-menu "Location" en "Relative to Build Products". Le texte en dessous du popup-menu (au dessus du "Full Path" doit alors juste consister en "libMaLib.a" sans chemin intermédiaire. Cela va permettre à  Xcode de correctement détecter les dépendances implicites entre l'app et la lib
    • Dans les "Build Settings de l'application, rajoutez le flag "-ObjC" à  la ligne "Other Linker Flags".


    Et maintenant, pour utiliser les fichiers de votre librairie dans le code de votre appli, vous avez juste à  faire:
    #import &lt;MaLib/Header.h&gt;
    
    et utiliser son code normalement ! (Notez qu'un #import "MaLib/header.h" fonctionne aussi)









    Pour info je maintiens tout ça à  jour (les étapes pour créer une lib, pour l'intégrer, le workspace de démo, etc) sur mon GitHub a cette adresse (voir le README).
  • Tu sais dans combien de temps la vidéo et les slides seront disponible ?

    Merci pour les explications supplémentaire image/implore.gif' class='bbc_emoticon' alt=' o:) ' />
  • AliGatorAliGator Membre, Modérateur
    C'est Julien Quéré (resp. des CocoaHeads Rennes) qui a récupéré les captures vidéos et les slides et va faire le montage vidéo, donc à  priori c'est lui qui va mettre tout ça à  disposition, je peux pas trop te dire quand, quand il aura le temps sûrement image/tongue.png' class='bbc_emoticon' alt=':P' />
  • AliGatorAliGator Membre, Modérateur
    Je viens d'apprendre que la vidéo est en ligne image/smile.png' class='bbc_emoticon' alt=':)' />
  • Merci... Je regardais tous les jours pour voir si çà  venait... et je n'avais pas encore regardé aujourd'hui !

    Je vais visualiser çà  dès que possible !
  • ça fait un bon moment qu'elle est publiée, mais je pense pas sur le site Cocoaheads.
  • Alf1996Alf1996 Membre
    février 2013 modifié #40
    'samir2303' a écrit:


    ça fait un bon moment qu'elle est publiée, mais je pense pas sur le site Cocoaheads.




    Ah oui ?

    Et où çà  donc ??

    Il y a eu des fuites ?



    Edit : Bon je ne devais pas regarder au bon endroit... car en faisant ma recherche habituelle, je ne le trouve toujours pas ! Je vais utiliser le lien de ce post. Merci encore
  • chatonSauvagechatonSauvage Membre
    février 2013 modifié #41
    Youpi elle est sortie image/cliccool.gif' class='bbc_emoticon' alt=' :p ' /> image/clap.gif' class='bbc_emoticon' alt=' :D ' /> image/clap.gif' class='bbc_emoticon' alt=' :D ' />



    Les Workspaces je crois que j'ai compris image/thumbsup.gif' class='bbc_emoticon' alt='' /> Merci Ali
  • @Chaton Sauvage : j'avais cru voir une question hier en lisant ton post depuis mon iPhone, mais tu as du l'éditer (problème résolu ?)



    @Ali : Super ta présentation, merci encore. Je me la suis passée 2 fois, et je reviens dessus de temps à  autre en particulier sur les démos... lorsque je n'arrive pas à  faire un truc !

    En particulier, la création du workspace ne fonctionnait pas chez moi au début... çà  me créait un projet à  l'intérieur du premier projet... En fait, je ne tirais pas la souris assez vers la gauche ! Comme quoi, rien de mieux qu'une petite démo !

    Maintenant j'ai un problème pour compiler ma lib, mais je vais chercher encore un peu... je posterai si nécessaire une autre sujet, car çà  n'a rien à  voir.



    Merci encore pour tout
  • Hello,



    C'est bien utile les workspaces et les library static.

    Est-ce que une boite peux développer ces propres library static et ne pas divulguer l'implémentation de cette library ? Je veux dire par la juste les .h comme le FrameWork CocoaTouch, si c'est pas possible avec les librarry, peux-on construire un Framework facilement avec des library static ?
  • @Alf : La question à  été résolu sans qu'il n'y ait de réponse postée (et en plus il n'y avait pas vraiment de rapport avec le sujet du post) mais merci de t'en soucier image/thumbsup.gif' class='bbc_emoticon' alt='' />
  • AliGatorAliGator Membre, Modérateur
    'samir2303' a écrit:


    Est-ce que une boite peux développer ces propres library static et ne pas divulguer l'implémentation de cette library ? Je veux dire par la juste les .h comme le FrameWork CocoaTouch, si c'est pas possible avec les librarry, peux-on construire un Framework facilement avec des library static ?
    oui c'est possible aussi (même s'il faut passer par une petite astuce pour faire une seule lib qui combine la version iOS (armv6/armv7) et simulateur (i386). Faudra que je fasse un tuto un jour (là  je suis pas chez moi je suis son mon iPhone)
  • Salut,



    Merci pour ta réponse.

    @Aligator : J'aimerais bien si tu peux m'orienter a faire ça, une library static en exposant juste les .m.
  • AliGatorAliGator Membre, Modérateur
    Pas de soucis, mais n'hésite pas à  me le rappeler dans une semaine, car là  je suis chez ma copine donc ça sera pas pour tout de suite (et de toute façon j'ai pas mon Mac sous la main pour faire un petit tuto aux petits oignons image/wink.png' class='bbc_emoticon' alt=';)' />) et après je risque d'oublier ^^
  • Bonsoir,

    Quelques nouvelles du front... çà  y est, j'ai enfin réussi à  intégrer mon contrôle dans mon projet, avec la création d'un workspace, et grâce à  la super présentation d'Ali...

    J'ai eu quelques difficultés évidemment mais çà  y est ! image/cheer.gif' class='bbc_emoticon' alt=' <3 ' /> image/cheer.gif' class='bbc_emoticon' alt=' <3 ' />

    Les problèmes rencontrés :

    - problème de création du Workspace car je ne déplaçais pas la souris suffisamment sur la gauche...

    - impossible de compiler la librairie... j'avais dû supprimer le framework "foundation", car même une lib toute simple sans rien dedans ne fonctionnait pas. çà  plantait sur le ligne de l'import du framework : une réinstallation de Xcode a résolu le problème

    - ensuite, tout fonctionnait sur le simulateur, mais çà  plantait sur le device... J'ai résolu le problème en mettant l'option "Build Active Architecture Only" à  "NO" (vu sur StackOverflow)

    - enfin, quelques petits bugs de la librairie à  résoudre (défaut d'initialisation, entre autres)



    Voilà , tout çà  pour dire que çà  ne se fait pas tout seul... Mais un peu de recherche sur le net est parfois utile. (petit message pour les nouveaux !)



    Juste une petite question en passant. Lorsque ma librairie est compilée, le fichier .a n'apparait pas comme dans la présentation d'Ali. J'ai le dessin d'une feuille blanche... Voir les deux captures d'écran suivantes (1. ce que j'ai, 2. ce qui apparait sur la démo d'Ali)

  • AliGatorAliGator Membre, Modérateur
    'Alf1996' a écrit:


    Quelques nouvelles du front... çà  y est, j'ai enfin réussi à  intégrer mon contrôle dans mon projet, avec la création d'un workspace, et grâce à  la super présentation d'Ali...

    J'ai eu quelques difficultés évidemment mais çà  y est ! image/cheer.gif' class='bbc_emoticon' alt=' <3 ' /> image/cheer.gif' class='bbc_emoticon' alt=' <3 ' />
    Merci Alf pour ce retour d'expérience !


    'Alf1996' a écrit:
    Les problèmes rencontrés :

    - problème de création du Workspace car je ne déplaçais pas la souris suffisamment sur la gauche...
    En effet, j'aurais peut-être dû présenter dans ma vidéo l'autre méthode possible de création, à  savoir plutôt que de "transformer un projet xcodeproj existant en workspace, aborder le problème de l'autre côté : créer un nouveau workspace (vide, du coup), puis y ajouter les différents xcodeproj ensuite (soit par glisser-déposer mais faut faire attention à  la même chose, à  savoir glisser le projet assez à  gauche, soit par le menu pour ajouter un élément au workspace)
    'Alf1996' a écrit:
    - ensuite, tout fonctionnait sur le simulateur, mais çà  plantait sur le device... J'ai résolu le problème en mettant l'option "Build Active Architecture Only" à  "NO" (vu sur StackOverflow)
    Oui j'ai eu le souci sur un projet peu de temps après la présentation, en effet. En fait ça peut se comprendre : si tu as "Build Active Architecture Only" (on va dire BAAO pour la suite) à  YES, ça dit à  Xcode "bon, puisque tu compiles pour le simulateur, ne compiles que pour l'architecture i386". Mais si tu fais ça, faut rester logique et le faire sur tous les projets. Imagine sinon :

    - tu as un projet qui n'a pour ordre de se builder que quand on compile en i386 (BAAO=YES), et donc que comme tu lui as demandé, il ne compilera pas la version armv7 par exemple quand tu build sur simulateur,

    - mais qu'à  côté de ça y'a un autre projet (qui utilise cette lib) qui lui compile en armv7 (BAAO=NO donc il build pour toutes les archi supportées)

    - quand ce projet qui build en armv7 va essayer de linker avec la version armv7 de ta lib, il ne va pas la trouver, et donc sortir en erreur au moment de l'édition des liens (linker error)

    Bon je te l'accorde, c'est pas trivial, mais bon, tout ça pour dire que même si faut le savoir, ça s'explique bien quand même image/wink.png' class='bbc_emoticon' alt=';)' />


    'Alf1996' a écrit:
    Juste une petite question en passant. Lorsque ma librairie est compilée, le fichier .a n'apparait pas comme dans la présentation d'Ali. J'ai le dessin d'une feuille blanche... Voir les deux captures d'écran suivantes (1. ce que j'ai, 2. ce qui apparait sur la démo d'Ali)

    Ca c'est normal.

    C'est parce que j'ai installé sur mon Mac perso une application (UnArchiver.app pour tout te dire) qui permet de décompresser plein de formats de fichiers d'archive... dont le format d'archive ".a" (*). Du coup, mon Mac sait leur associer l'icône de document fourni par cette application (tout comme quand tu installes Excel les fichiers ".xls" sont alors reconnus et ont l'icône d'un document Excel plutôt que la feuille blanche, par exemple)



    (*) Car au cas où tu ne le saurai pas, en vrai une librairie statique (un fichier ".a", donc), c'est une archive (au même sens qu'une archive ZIP ou RAR ou TAR.GZ etc) qui contient des fichiers ".o" (fichiers binaires compilés, aussi appelés fichiers objets, chaque fichier ".o" correspondant à  la compilation d'un fichier ".m" (ou ".c" ou ".cpp" etc, bref un fichier source) de même nom)


    'Alf1996' a écrit:
    'il en soit, je tiens à  remercier AliGator pour sa super présentation, et pour les divers "trucs et astuces" de ce post... qui est maintenant résolu...
    Merci à  toi pour tes retours image/smile.png' class='bbc_emoticon' alt=':)' />
  • 'AliGator' a écrit:


    là  je suis chez ma copine donc ça sera pas pour tout de suite


    T'as pris quel modèle ? Une pommée, une androfane ou une référence plus originale ?
  • AliGatorAliGator Membre, Modérateur
    'Draken' a écrit:


    T'as pris quel modèle ? Une pommée, une androfane ou une référence plus originale ?
    Lol plus originale ^^
  • Quel post fleuve... qui plus est, sur iPhone ! image/thumbsup.gif' class='bbc_emoticon' alt='' />


    En effet, j'aurais peut-être dû présenter dans ma vidéo l'autre méthode possible de création, à  savoir plutôt que de "transformer un projet xcodeproj existant en workspace, aborder le problème de l'autre côté : créer un nouveau workspace (vide, du coup), puis y ajouter les différents xcodeproj ensuite (soit par glisser-déposer mais faut faire attention à  la même chose, à  savoir glisser le projet assez à  gauche, soit par le menu pour ajouter un élément au workspace)


    Oui, au début, j'avais fait çà  (avant ta présentation) et j'avais le même problème. C'est après avoir fait des "arrêts sur image" avec ta présentation que j'ai fini par comprendre !!!


    Ca c'est normal.

    C'est parce que j'ai installé sur mon Mac perso une application (UnArchiver.app pour tout te dire) qui permet de décompresser plein de formats de fichiers d'archive... dont le format d'archive ".a" (*). Du coup, mon Mac sait leur associer l'icône de document fourni par cette application (tout comme quand tu installes Excel les fichiers ".xls" sont alors reconnus et ont l'icône d'un document Excel plutôt que la feuille blanche, par exemple)


    Ah, je suis rassurée... même si çà  ne m'inquiétait pas des masses vu que çà  fonctionnait quand même !
    'AliGator' a écrit:


    Lol plus originale ^^


    Un modèle spécial qui n'a pas peur des grand reptiles !!



    Bonnes vacances... image/rolleyes.gif' class='bbc_emoticon' alt='::)' />
Connectez-vous ou Inscrivez-vous pour répondre.