Elaboration d'une librairie/framework
Kixxx
Membre
Bonjour,
Quelle est la meilleure façon de créer des librairies réutilisables en Objective-C ?
Connaissez-vous des bon tutoriels sur ce sujet ?
Par avance, merci.
Cordialement,
Kevin.
Quelle est la meilleure façon de créer des librairies réutilisables en Objective-C ?
Connaissez-vous des bon tutoriels sur ce sujet ?
Par avance, merci.
Cordialement,
Kevin.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai aussi trouvé ça à l'isntant avec Google mais jamais testé encore : https://github.com/kstenerud/iOS-Universal-Framework
Sinon, j'ai une autre question :
- Comment pourrais-je savoir quel est le meilleur type de Framework à utiliser dans mon cas ? Statique ou Dynamique ?
D'après les explications de ton premier lien, j'opterai plus pour une librairie dynamique.
J'aurais alors seulement les fichiers .h ? et les méthodes ne pourront pas être modifiées ?
Cordialement,
Kévin.
Une framework est essentiellement utile lorsqu'on veut associer des ressources (fichiers .plist, images, etc.) au code; une simple bibliothèque statique est plus facile à créer, le modèle est déjà prêt dans Xcode.
Ok, merci pour ta réponse ! As-tu par hasard un lien expliquant par étape l'élaboration de cette fameuse bibliothèque statique et comment l'intégrer ensuite dans un projet quelconque ?
Cordialement,
Kévin.
Créer une bibliothèque statique
Xcode > File > New > Project > iOS > Framework & Library.
Tu n'as plus qu'à y placer des .h et .m.
Inclure une bibliothèque statique
Il suffit de glisser la bibliothèque (fichier .a) dans le projet cible, elle est automatiquement ajoutée au dépendances du projet. N'oublie pas d'ajouter les .h de la bibliothèque pour que le linker connaisse les fonctions et méthodes.
Un grand merci à vous deux. Vous êtes très réactifs
Cordialement,
Kévin.
- Le Simulateur tourne sur OSX et comme son nom l'indique n'est qu'un simulateur et pas un émulateur, du coup quand on compile pour le simu on compile en i386 (architecture Intel)
- Alors que sur Device, l'architecture est du ARM (armv7, ou armv6 pour les modèles un peu moins récents)
Du coup si tu crées une librairie (ce qui est en effet aussi simple que tu le décris Céroce), il faut faire gaffe à créer une lib statique compilée pour Intel (i386) pour quand tu testes sur le simu, et une lib compilée pour ARM (armv6, armv7) pour compiler ton appli pour Device. Et ensuite, soit utiliser l'une ou l'autre selon si tu compiles ensuite et teste ton appli qui utilise cette lib pour Simu ou Device, soit faire une librairie "Universelle" en regroupant les deux libs dans un "Universal Binary" aussi appelé "FAT Library", à l'aide de l'outil en ligne de commande lipo, pour fusionner les 2 architectures dans un seul fichier et utiliser ainsi une seule lib dans ton appli ensuite.
C'est justement ce petit détail qui rend la chose un peu "tricky" pour iOS. Car sans ça sinon c'est tout ce qu'il y a de plus simple et rien de sorcier comme l'a dit Céroce. Et c'est à ça que servent les scripts que tu peux voir trainer dans les tutos en général expliquant comment créer un "Static Framework" pour iOS : ces scripts s'assurent que ta lib sera compilée en Intel ET en ARM puis fusionnent les 2 architectures dans un seul fichier final.
Pour l'import, il me semble que Xcode n'est pas trop bête et prend la version de la bibliothèque qui convient selon la cible et l'architecture.
Je reviens vers vous parce que j'ai un petit problème pour l'intégration d'une librairie !
En effet, j'ai donc créer une simple StaticLibrary. Ma librairie n'a rien de fonctionnelle, elle permet seulement d'afficher un message bref...
J'ai également ajouter les points .h de mes deux classes dans la partie CompileSource dans Builds Phases !
Ensuite, j'ai glissé le fichier .a dans un autre projet !
La dépendance est bien présente !
Mais quand j'essaye d'importer un fichier .h de ma librairie dans une classe de mon autre projet, il ne trouve pas de référence. ???
Ai-je oublié une étape ?
C'est-à -dire à côté ? Désolé je n'ai pas très bien compris
Comment puis-je connaà®tre le bon chemin vers ce .h ?
Mais à quoi sert l'intégration de librairies statiques, si nous sommes obliger de configurer les liens vers leur header !? Je ne vois pas trop l'utilité .. autant créer "des classes" réutilisable simplement en les copiant-collant
Que ton code soit compilé dans une lib statique ou pas, ça change rien au fait qu'il faut bien qu'il sache où trouver le .h ! Ca change pas d'avant !
Sauf que là ta lib tu l'as créée dans un projet séparé donc le projet qui utilise ta lib il sait pas où trouver le .h qui vient de l'autre projet !
C'est un réglage assez classique, présent dans tous les IDE (pas propre à Xcode) et un flag qui existe pour tous les compilateurs. C'est juste que le répertoire du projet est inclus par défaut dans les dossiers cherchés pour importer les .h donc forcément si ton .h est déjà dans le projet y'a rien de plus à faire, ce qui est le cas dans 98% des cas quand tu ne travailles qu'avec un seul et unique projet et tout dedans.
Si tu veux pas te soucier de ces problématiques, tu encapsules la lib et tout ce qui est nécessaire pour qu'elle fonctionne, en particulier ses .h justement, dans un framework. C'est fait pour ça, c'est juste un bundle avec donc (comme tout bundle) une structure/arborescence bien définie qui fait que tous les frameworks sont organisés pareil et si tu importes le framework Xcode sait alors où trouver tout ce qu'il lui faut.
Ca facilite les choses. Mais ça par contre c'est propre à Xcode : dans les autres IDE genre VisualStudio ou Eclipse, ce concept de framework n'existe pas et tu es obligé soit de copier le .h à côté de la lib ou, ce qu'on préfère faire en général, modifier le Header Search Path. Bref, ce que je t'ai conseillé de faire vu que tu n'es pas parti pour faire un framework mais juste une lib (ce qui serait déjà bien pour commencer)
Pour plus d'infos, Comme d'hab tout est dans la doc Apple.
Je viens de m'apercevoir que pour utiliser la librairie Google Analytics (que j'ai déjà utilisé) il faut aussi importer un .h !
Ok je vais m'informer sur les autres façon d'intégrer une librairie.
Quand le projet devient important il est préférable de faire comme indiqué un pseudo framework pour des parties bien au point, ce framework évite les soucis de savoir ou sont les .h, évite surtout la duplication de code au fil des années car de toute façon on va re-utiliser le code, il faut donc l'organiser.