web-dev-qa-db-fra.com

Comment construire une bibliothèque statique Objective-C?

J'ai quelques classes Objective-C, que j'utilise actuellement à la fois dans une application Cocoa (Mac OS X) et une application Cocoa-Touch (iOS). Actuellement, lorsque je mets à jour ces classes, je dois copier celles mises à jour .h et .m fichiers vers les deux projets. Pas si grave, mais je vais les utiliser dans de nombreux autres projets.

Donc, je veux construire ces classes dans une bibliothèque statique Objective-C. Et puis liez contre cette bibliothèque dans tous les autres projets.

Existe-t-il un moyen de créer une bibliothèque statique telle qu'elle fonctionne avec les applications Cocoa et cocoa-touch?

J'ai essayé de créer une bibliothèque statique Cocoa avec ces classes, mais j'obtiens diverses erreurs lorsque j'essaie de créer un lien avec cette bibliothèque dans mon application Cocoa, et je suis sûr qu'elles proviennent du fait que je ne le fais pas droite.

Alors, comment puis-je construire une bibliothèque statique Objective-C de la manière droite? Dois-je créer à la fois une bibliothèque statique Cocoa-Touch et Cocoa? Ou puis-je simplement en faire un? Comment cela se fait-il?

Existe-t-il des tutoriels bien faits sur ce sujet?

J'ai cherché sur le Web et je n'arrive pas à trouver un tutoriel complet sur ce sujet, j'ai donc posé la question ici, dans l'espoir qu'une excellente réponse sera publiée et que cette question puisse servir de ressource pour moi et pour les futurs intervenants.

42
Alex

Pour XCode 5. Ces réponses semblent un peu dépassées. Vous pouvez voir les principales étapes ici http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial . Mais Xcode 5 fait beaucoup plus de travail pour vous et fonctionne maintenant presque comme vous le souhaitez.

1.Créez une nouvelle application de bibliothèque statique dans Xcode New Static Library in Xcode

2.Vous pouvez supprimer tous les fichiers qu'il crée et ajouter le vôtre. Ajoutez vos méthodes, etc. Code Code Code

3.Peu de problème avec les bibliothèques statiques, vous ne pouvez créer que pour le périphérique ou l'exécuter dans le simulateur. Nous devons donc créer une bibliothèque qui prend en charge ARM et architectures i386, pour ce faire, nous devons créer un binaire universel (il prendra donc en charge le simulateur et les versions de périphérique).

Créez une nouvelle cible (Fichier> Nouveau> Cible). New Target

4.Sélectionnez Nouvelle cible puis ajoutez une nouvelle phase de construction (Éditeur> Ajouter une phase de construction> Ajouter une phase de construction de script d'exécution New Build Phase

5.Sélectionnez la phase de construction et entrez le script à partir de ce lien dans la fenêtre d'exécution du script. https://Gist.github.com/sponno/7228256

Run Script Code

6.Maintenant, vous devez créer chaque architecture (simulateur et appareil iOS)

6.2.Sélectionnez notre bibliothèque, puis le périphérique iOS, cliquez sur construire ou exécuter (Commande + B)

6.3 Ensuite, pour le simulateur (sélectionnez l'icône de la bibliothèque tout en haut à gauche de Xcode puis le simulateur iOS) enter image description here

7.Maintenant, vous voulez créer l'icône BullsEye> Appareil iOS. Ce sera la cible globale et combinera nos deux bibliothèques dans un nouveau fichier universel.

8. Voyons si tout cela a fonctionné. Développement du dossier "Produits" dans l'arborescence de gauche, clic droit sur le fichier se terminant par ".a" et "Afficher dans le Finder"

9.Si tout fonctionne, vous devriez voir les fichiers suivants dans le Finder. Vous verrez le Library .a file and include files

10.La dernière étape est simple, faites simplement glisser le fichier "library.a et le dossier includes dans votre nouveau projet Xcode. enter image description here

enter image description here

Dans votre nouveau projet, vous n'aurez rien d'autre à faire que d'importer les fichiers d'en-tête que vous souhaitez utiliser, mais vous n'avez pas à modifier les indicateurs de liaison ou les chemins de recherche d'en-tête. Ça va juste marcher.

(tout commentaire apprécié) ou veuillez modifier mon message pour améliorer la clarté.

** POINTS BONUS *** Installez VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode et utilisez-le pour documenter tous les fichiers header.h que vous partagerez avec la bibliothèque.

Désormais, toute personne qui utilise votre bibliothèque peut choisir + cliquer pour afficher une aide contextuelle pour vos classes.

Context Aware Help based on header file

25
John Ballinger

J'ai fini par trouver ce tutoriel et cela a vraiment très bien fonctionné. Si quelqu'un souhaite toujours offrir de l'aide, veuillez le faire et je vais probablement le voter et le marquer comme la réponse acceptée.

12
Alex

(en utilisant le tutoriel comme point de départ)

créez maintenant une deuxième cible dans la bibliothèque xcodeproj pour l'autre OS.

configurer les paramètres sdk de chaque cible à l'aide d'un fichier xcconfig (un pour chaque système d'exploitation). réutilisez ces fichiers xcconfig dans vos autres bibliothèques. cela permet également un contrôle global facile des paramètres de construction.

configurez les références de lien et de dépendance dans vos cibles (applications) comme d'habitude, mais sélectionnez la bibliothèque cible appropriée.

ajouter une cible agrégée au projet de bibliothèque pour une méta-compilation simple/maintenance facile.

-- ou --

faites tout cela en introduisant une couche de script ou en créant un outil de construction personnalisé.

11
justin

J'ai également trouvé ceci "Construire une bibliothèque statique avec Jenkins" qui est vraiment bon. Explique comment configurer correctement une bibliothèque statique, comment faire en sorte que Jenkins la construise automatiquement, puis placez les fichiers .a et .h résultants dans un endroit où vous pouvez les récupérer.

Combinez cela avec CocoaPods ou Maven (je ne l'ai pas encore fait) et vous pourriez avoir un joli petit écosystème sympa.

2
wildcat12