Comment gerez-vous vos lib perso ?
yoann
Membre
Salut tout le monde,
Je suis en train de mettre au propre tous les bouts de code que j'utilise souvent pour en faire une lib modulaire.
Je suis parti sur l'utilisation de static lib pour avoir le même fonctionnement sur Mac et sur iPhone.
Je pense créer un projet Xcode par fonctionnalité puis faire appel à ces projets en fonction dans mes différentes applications. Xcode supporte l'inclusion de projet dans des projets cependant j'ai du mal à comprendre comment il gère la compilation des targets etc.
Pour le moment je suis parti pour avoir un dossier /XcodeLib avec un sous dossier MacOSX, iPhone et iPhoneSim avec dedans les différentes versions de mes lib selon la target. Ensuite je règle mes projets pour aller chercher header et lib à cet endroit, cependant j'ai du oublier un truc puisque les symboles ne sont pas trouvés durant la compilation...
Donc avant de continuer dans l'une ou l'autre des solutions (projet inclus ou dossier de lib) je voudrais savoir si vous avez des retours d'expérience sur ce sujet.
Je suis en train de mettre au propre tous les bouts de code que j'utilise souvent pour en faire une lib modulaire.
Je suis parti sur l'utilisation de static lib pour avoir le même fonctionnement sur Mac et sur iPhone.
Je pense créer un projet Xcode par fonctionnalité puis faire appel à ces projets en fonction dans mes différentes applications. Xcode supporte l'inclusion de projet dans des projets cependant j'ai du mal à comprendre comment il gère la compilation des targets etc.
Pour le moment je suis parti pour avoir un dossier /XcodeLib avec un sous dossier MacOSX, iPhone et iPhoneSim avec dedans les différentes versions de mes lib selon la target. Ensuite je règle mes projets pour aller chercher header et lib à cet endroit, cependant j'ai du oublier un truc puisque les symboles ne sont pas trouvés durant la compilation...
Donc avant de continuer dans l'une ou l'autre des solutions (projet inclus ou dossier de lib) je voudrais savoir si vous avez des retours d'expérience sur ce sujet.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Prend exemple sur la lib Three20, qui a été remaniée justement pour être modulaire (séparée en sous-libs Network, UI, ... du coup tu peux intégrer toute la lib ou n'intégrer que ce que tu veux) et qui utilise ce principe de projets inclus.
Ils ont utilisé quelques scripts post-build pour copier les headers et les libs dans des dossiers propres (hors du dossier "build/", dans des endroits fixes réutilisables) et pour protéger les headers en écriture pour éviter les modifications involontaires.
Tu peux aussi (j'avais commencé à faire ça pour une de mes libs, mais je n'ai plus la procédure pas à pas en tête) utiliser lipo pour fusionner en une seule lib (multi-architectures) ta lib compilée iPhoneOS (ARM) et celle compilée iPhoneSimulator (i386), des choses comme ça.
En tout cas intéressante question à soulever que de savoir comment organiser le tout, selon les targets simu/iphoneos/osx, de pouvoir facilement inclure les headers dans tes projets (là où c'est simple avec un framework car tout est encapsulé, c'est plus chiant avec une lib statique car en plus faut compléter le "Header Search Path").
Ce qui serait idéal ce serait de pouvoir avec des sortes de "frameworks statiques", aussi faciles à intégrer/inclure dans tes projets que les frameworks (contenant directement les headers et les libs dans un seul bundle) mais avec libs statiques pour rester compatible iPhoneOS.
D'ailleurs j'avais vu quelques exemples de libs iPhone (FaceBook, TT) où ils rassemblent les ressources (genre toutes les images) dans des ".bundle" comme ça tu n'as qu'un truc à glisser dans ton projet Xcode et ça reste propre... A se demander si on peut pas faire la même chose pour les headers, ça serait pratique, j'ai pas testé (gaffe au chemin relatif à utiliser pour le #import dans ce cas)
Je ne savais pas que l'on pouvait inclure un projet xcode dans son projet.
Pour ma part, je ne fait pas de dev iphone. Sur Mac je me contente de Frameworks. Dans le cas ou il sont privé, j'ajoute un script pour supprimer les headers après la compilation
Il faut dire que je développe plus trop en ce moment même sur Mac. A mon grand regret !
En fonction de ça, et selon le réglage des Build Settings "Private Headers Install Path" et "Headers Install Path" (de mémoire, si c'est pas ça ça doit ressembler), il va dispatcher les headers privés dans un dossier et les publics dans un autre. Théoriquement c'est comme ça qu'il faut procéder quand tu fais un framework d'ailleurs.
Pour une lib statique ça peut peut-être servir aussi, faut creuser, tiens.
C'est pratique lorsque tu souhaite utiliser une même base pour plusieurs projets !
Comme ça au final dans ton dossier qui contient tout ce que tu vas distribuer, tu n'as que la lib et les headers publics, tout le reste qui te sert en interne et que l'utilisateur de ta lib n'a pas à voir (headers privés, code d'implémentation des méthodes, ...) est totalement masqué.
10.5 je l'ai, -iphoneos aussi mais je n'ai pas le reste...
Si en plus ça peut être les même variable pour le mac et l'iPhone c'est le pied !
Je m'en sers des fois pour qu'il liste toutes les variables disponible et pour ainsi voir s'il y en a une qui correspond à ce que je rechercher (genre SOURCE_ROOT, PLATEFORM_NAME, etc)
Merci pour l'info, j'ai coché cette case mais j'ai rien dans mon log... Je vois bien le echo que j'ai placé dans le script mais rien de plus... C'est censé s'afficher où ?
Vérifie que tu affiches dans cet onglet tous les messages et pas que les "Issues Only" du coup, et il faut dérouler la ligne correspondant à l'étape d'exécution du script pour en voir le détail :
CONFIGURATION_BUILD_DIR = /XcodeLib/products/$(SDK_NAME)$(EFFECTIVE_PLATFORM_NAME)/$(PRODUCT_NAME)
INSTALL_PATH = $(CONFIGURATION_BUILD_DIR)
PRIVATE_HEADERS_FOLDER_PATH = ../../headers/private-include/$(PRODUCT_NAME)
PUBLIC_HEADERS_FOLDER_PATH = ../../headers/include/$(PRODUCT_NAME)
Et pour l'utilisation :
HEADER_SEARCH_PATHS = /XcodeLib/headers/include/**
LIBRARY_SEARCH_PATHS = /XcodeLib/products/**
J'arrive a build correctement une première lib, puis une lib qui dépend de la première. Ensuite viens le tour d'une application qui elle n'arrive pas à trouver les headers de la seconde lib qui sont pourtant au bon endroit
Le pire c'est quand je regarde le détail de la compilation :
J'ai bien YGCommon qui est inclus pour les headers, qui est la première lib, mais je n'y vois pas PlistPRC qui est la seconde, celle qui pose problème, qui est pourtant au même endroit !
Si quelqu'un à une idée...
Il va falloir maintenant que je regarde de plus près l'inclusion de projet pour voir comment gérer la compilation automatique des dépendances !
Sinon je ne t'explique pas le boxon si dans un même répertoire tu as plusieurs versions d'une même lib, qui exporte quasiment les mêmes symboles chacunes (aux quelques différences près apportées par l'évolution de la version)... :P
http://www.snippetsapp.com/
C'est pratique pour certain truc vite fait mais pas pour faire une lib...
Pour info je vais tacher de passer aux labs à la WWDC pour demander conseils sur la gestion d'une lib multi target + dépendance
Yoann decidement j'aime tes reponses en ce moment