[Résolu] Intégrer le "cocoacontrol" RSColorPicker
Alf1996
Membre
Bonsoir,
La question a peut-être été déjà posée (c'est même plus que probable), mais je ne dois pas utiliser les bons mots pour ma recherche sur le forum, car je n'ai pas trouvé mon bonheur ! (ni ici, ni sur StackOverflow)
En fait, je souhaiterais intégrer un UIColor Picker dans mon application (RSColorPicker sur GitHub), et je cherche comment m'y prendre (je n'ai pas encore intégré d'objets autres que ceux fournis par Apple) /baby.gif' class='bbc_emoticon' alt=' ' />
Dois-je copier bêtement le code qui est téléchargeable sur GitHub, et inclure ces classes (.h et .m) directement dans mon projet ? ou dois je importer un binaire ?
Si j'importe le code, je suppose que je dois laisser le texte de copyright...
Ensuite, je pense qu'il me faudra déclarer un delegate et les méthodes associées ; pour ce point, je crois que je devrais m'en sortir.
Bref, je ne sais pas comment m'y prendre, et comme je souhaiterais faire un truc propre, j'ai besoin de vos conseils...
Merci d'avance /implore.gif' class='bbc_emoticon' alt=' ' />
La question a peut-être été déjà posée (c'est même plus que probable), mais je ne dois pas utiliser les bons mots pour ma recherche sur le forum, car je n'ai pas trouvé mon bonheur ! (ni ici, ni sur StackOverflow)
En fait, je souhaiterais intégrer un UIColor Picker dans mon application (RSColorPicker sur GitHub), et je cherche comment m'y prendre (je n'ai pas encore intégré d'objets autres que ceux fournis par Apple) /baby.gif' class='bbc_emoticon' alt=' ' />
Dois-je copier bêtement le code qui est téléchargeable sur GitHub, et inclure ces classes (.h et .m) directement dans mon projet ? ou dois je importer un binaire ?
Si j'importe le code, je suppose que je dois laisser le texte de copyright...
Ensuite, je pense qu'il me faudra déclarer un delegate et les méthodes associées ; pour ce point, je crois que je devrais m'en sortir.
Bref, je ne sais pas comment m'y prendre, et comme je souhaiterais faire un truc propre, j'ai besoin de vos conseils...
Merci d'avance /implore.gif' class='bbc_emoticon' alt=' ' />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En attendant, je vais essayer de faire comme je pense qu'il faut faire, et je modifierai plus tard si ma méthode n'est pas la bonne...
Après combien de temps les vidéos sont elles publiées ? Je suppose que çà doit dépendre de la disponibilité de Thomas, c'est bien lui qui diffuse ces infos ?
Edit : à quand un Cocoaheads du coté de Marseille, ou mieux Aix ?...
Ensuite, dans ta target, tu ajoutes la compil' de ce projet en dépendance et dans les framework, tu dois trouver la target que tu ajoutes aussi.
Et voilà , plus qu'à importer les .h qui vont bien et roule ma poule /cool.gif' class='bbc_emoticon' alt='8--)' />
1) Utilise un Workspace qui va te permettre de contenir plusieurs projets. Dans ce Workspace, rajoute donc le xcodeproj de ton application bien sûr, et rajoute le xcodeproj de la librairie que tu veux intégrer (RSColorPicker).
Si RSColorPicker ne propose pas sur son GitHub de xcodeproj (ou en propose juste un qui fait une démo et donc build une application, mais pas une librairie), il est très simple de demander à Xcode de créer un nouveau projet de type "Static Library", de supprimer les 2 ou 3 fichiers inutiles qu'il t'a rajouté, et à la place de faire glisser les fichiers source de RSColorPicker dedans, de sorte d'avoir un xcodeproj qui va te générer une librairie libRSColorPicker.a au final
2) A cause d'un petit bug Xcode qui surviendrait si tu faisais l'étape 3 tout de suite après, je te conseille à ce stade de builder la librairie pour iOS Device avant de l'intégrer à ton application. Pour cela, sélectionne le Scheme "RSColorPicker" dans le menu en haut à gauche de la fenêtre Xcode, et la destination "iOS Device", puis de choisir "Build" dans le menu "Product".
3) Ensuite, sélectionne le projet de ton application, va dans l'onglet "Build Phases", et dans la partie "Link Binary With Libraries", clique sur le "+" pour rajouter "libRSColorPicker.a". Cela va faire en sorte que ton application intègre la librairie libRSColorPicker.a générée par l'autre projet.
4) Suite à l'étape 3, tu vas voir que la référence du fichier "libColorPicker.a" a été ajouté dans ton xcodeproj de ton application.
A cause du bug Xcode évoqué à l'étape 2, cette librairie n'est pas référencée correctement. Donc sélectionne libRSColorPicker.a dans ton projet et dans le panneau "File Inspector" à droite que tu changes la "Location" de "Relative to Group" ou "Relative to Project" en "Relative to Build Products", et que tu t'assures alors que le chemin relatif sous lequel la lib est référencé n'est plus que "libRSColorPicker.a" (et non pas un truc bizarre genre "../../../DerivedData/ueizoufd/Release-iOS/libRSColorPicker.a" ou du genre que tu risquerais d'avoir si tu avais sauté l'étape 2).
Une fois que tu as fait cette dernière étape qui corrige le petit bug Xcode et qui va faire que la librairie est correctement référencée "Relative to Build Products", Xcode va alors correctement la détecter tout seul comme une dépendance implicite de ton projet, ce qui fait que même si tu fais un "clean" sur ton workspace, si ensuite tu build ton application, Xcode va détecter que ton application dépend de la librairie et donc va d'abord builder la librairie avant de builder ton appli.
PS : au même titre que les frameworks qui sont ajoutés à ton projet quand tu link avec un framework particulier, tu peux aller ranger la référence du fichier libRSColorPicker.a qui est ajouté au projet de ton app dans le groupe "Frameworks" ou dans un groupe de ton choix, si tu veux pour faire plus propre et pas le laisser en plein milieu de ton projet.
Ton prédateur préféré !
@Ali : Merci d'avoir pris le temps de me détailler la procédure, d'autant plus que tu dois avoir ta présentation CocoaHeads à préparer, qui plus est sur le même sujet. J'étais prête à attendre les slides (j'avais mis çà de côté, sur la liste des "améliorations à faire"), et j'en apprécie d'autant plus ton post fleuve...
Je m'en vais de ce pas suivre ce super tuto...
Merci encore
Dans tous les cas je suis allé voir vite fait le GitHub de RSColorPicker et il semble que le seul xcodeproj qui soit fourni soit un Xcodeproj pour générer son application de démo (et pas un xcodeproj pour générer une librairie indépendante que tu pourras ensuite intégrer dans tes projets), donc de toute façon il te faudra générer un xcodeproj tout neuf de type "Static Library" pour y faire glisser les sources de RSColorPicker dedans (et bien sûr que les sources qui servent à avoir l'objet RSColorPicker, pas besoin des autres sources servant uniquement à l'appli de démo, comme le AppDelegate ou les ViewControllers et XIB de son appli de démo)
Oui, je viens de télécharger le xcodeproj, et je suis en train de virer ce qui ne sert qu'à faire la démo... çà confirme bien ce que j'avais compris, et çà rassure le noob que je suis !
Et pour que ça te génère une lib statique, tu vas avoir pas mal de modifications et bidouilles à faire dans les "Build Settings" de la target pour transformer le produit généré de application à librairie statique (type d'extension, type de préfixe, ne plus générer un bundle (.app) mais un fichier unique, et j'en passe un paquet)
Donc soit tu repars de son xcodeproj, et tu rajoutes un target de type "Static Library" (qui sera donc toute pré-configurée pour générer une librairie et pas une appli), puis tu fais le ménage des fichiers obsolètes pour la lib, supprime le target qui génère l'application, et pense à rajouter les fichiers utiles à la lib dans la target de la lib avec la petite case à cocher adéquate... ce qui finalement revient un peu à tout démonter pour tout remonter autrement...
Soit tu repars d'un xcodeproj tout neuf, directement créé avec le template "Static Library" et tu lui rajoutes les fichiers nécessaires de RSColorPicker. A mon avis ça sera plus simple que de bidouiller l'existant qui génère une appli.
C'est bien ce que j'ai fait, et j'ai un bien un "libRSColorPicker.a" dans les products après compilation...
Première étape réussie ; merci
J'ai réussi à créer mon workspace ; au lieu de créer un workspace vide, j'ai ouvert mon projet, et j'ai fait "save as workspace".
Puis j'ai créé, dans ce workspace, un nouveau projet de type "static library", dans lequel j'ai supprimé les fichiers créés automatiquement (un .h, un .m et le -prefix.pch) pour les remplacer par les fichiers que j'avais téléchargés (sauf le xib et l'appDelegate). Dans les "supporting files", je n'ai mis que le -prefix.pch, je n'ai pas mis de main, ni de info-plist (est-ce OK ?). Puis, comme le nouveau projet ne s'était pas mis au bon endroit (il s'était mis à l'intérieur de mon projet), je l'ai glissé pour qu'il soit bien un second projet. Ensuite, j'ai buildé pour le device, et j'ai inclus le .a à la liste de mes frameworks, ce qui me donne ceci :
1) Le Full Path c'est normal, ça doit normalement pointer vers le même endroit que là où sera aussi compilé ton application. Du moment que tu es "Relative to Build Products" et que le chemin relatif marqué sous le popupmenu est bien juste "libRSColorPicker.a" comme c'est le cas pour toi, c'est bon
2) Ce que tu as oublié, c'est d'indiquer au xcodeproj de ton appli le chemin où trouver les headers de ta libraririe... et c'est vrai que j'ai oublié de mentionner ce point dans mon post au dessus.
Il faut donc cliquer sur le xcodeproj de ton application à gauche, et dans l'onglet "Build Settings" cette fois, renseigner le setting "Header Search Path". Tu dois lui rajouter comme valeur le chemin (relatif, par rapport à ton App.xcodeproj) vers le dossier contenant les ".h" de RSColorPicker. Ca va donc sans doute être un truc comme "../RSColorPicker" ou un truc comme ça selon où tu as placé les sources de RSColorPicker par rapport au projet de ton appli.
Il y a d'autres façons de faire (forcer le projet de la lib à copier ses headers référencés comme "Publics" dans le dossier où tout ça est buildé pour qu'il les retrouve tout seul, en renseignant le "Install Path" de la lib à "include/${TARGET_NAME}" + en passant "Skip Install" à "NO" dans le xcodeproj de la lib et penser à indiquer le "rôle" de chaque header de la lib alors) mais bon à mon avis le plus simple reste de renseigner le "Header Search Path" dans le xcodeproj de l'appli quand même.
Tant que tu es dans les "Build Settings" du xcodeproj de ton appli, je t'incite également à rajouter "-ObjC" dans le setting "Other Linker Flags". Ce setting permet de s'assurer que lorsqu'on link avec une librairie tierce, on importe bien également les catégories, si la librairie en a déclarées.
PS : t'as vu, je suis pas vexé /smile.png' class='bbc_emoticon' alt=':)' />
1) Soit dans le xcodeproj de ton application, tu renseignes le "Header Search Path" pour renseigner le chemin relatif des headers de RSColorPicker. Dans ce cas, un simple #import "RSColorPicker.h" suffit
2) Soit tu as configuré le xcodeproj de la librairie pour qu'il copie les headers publics dans le dossier lors du build de la lib, ce qui permet alors de faire #import <RSColorPicker/RSColorPicker.h> mais encore faut-il avoir tout bien configuré dans le projet de la lib :
Ce qui fait qu'au final, même si la solution 2 serait plus propre et permettrait d'utiliser #import <RSColorPicker/RSColorPicker.h>, elle a ses inconvénients en mode "Archive" pour ceux qui utilisent d'autres noms de configurations que "Debug" et "Release"... Donc au final même si c'est moins propre (car on va chercher dans toutes les sources de la lib et pas que les headers sensés être publics) je préfère souvent indiquer la solution 1.
J'ai vu... T'es un bon petit chat !
Malheureusement, je ne vais pas avoir le temps aujourd'hui. Je vous tiens au courant demain soir... car il y aura surement une paire de questions !
vive les cocoahead de Rennes en vidéo /clap.gif' class='bbc_emoticon' alt=' ' />
Je sens que moi aussi je vais devoir faire du ménage dans mon code source ...
Bref, toutes ces petites choses qui sont logiques et naturelles quand on est habitué au workflow d'une compilation en général (que ce soit sous Xcode, sous Eclipse, en ligne de commande ou autre) car on sait à quoi correspond ces réglages, mais pour les noobs qui n'ont pas forcément de formation en informatique ce n'est pas forcément évident... et je n'aurai pour autant pas le temps de l'expliquer !
C'est trés intéressant la conférence, malheureusement c'est un peu loin.
@AliGator : tu peux nous indiquer STP les références de la documentation sur les workspace ? Merci.
Bon, tu m'as convaincue... Je vais reporter cette étape, et attendre sagement, mais avec impatience la video car c'est sur je ne serais pas à Rennes jeudi...
Pas grave, même si c'est synthétique, çà sera surement mieux que de tâtonner...
Bon, de toute façon, j'ai encore quelques semaines de boulot sur mon application, avant d'être bloquée sur ce problème, et j'aurais surement des questions sur d'autres sujets !!! /tongue.png' class='bbc_emoticon' alt=':P' />
Quoi que à Rennes vous ne devez surement pas être sous la neige /rolleyes.gif' class='bbc_emoticon' alt='::)' />
Vivement la vidéo /thumbsup.gif' class='bbc_emoticon' alt='' />
Pas encore de neige mais un peu de verglas, mais je vais réchauffer l'atmosphère ^^