web-dev-qa-db-fra.com

Différence entre framework et bibliothèque statique dans xcode4, et comment les appeler

Je suis assez nouveau pour xcode et objective-c. Je veux poser une question très basique.

J'ai constaté que lorsque vous "liez des fichiers binaires à des bibliothèques" dans les paramètres de projet, il existe des différences entre le framework et les bibliothèques, importées depuis d'autres projets dans l'espace de travail.

Première question, pourquoi existe-t-il un cadre? Et pourquoi y a-t-il une bibliothèque? Ma bibliothèque ne peut-elle pas être un framework?

Et puis, depuis un fichier . H, comment puis-je appeler des classes à partir de ma bibliothèque statique importée?

Je suppose qu'il doit y avoir un préfixe, mais je ne l'ai pas trouvé. Ni ni "ProjName/Myclass.h" ne fonctionnent.

S'il vous plaît, soyez aussi précis que possible.

Merci

130
Leonardo

Le principal avantage d'un framework par rapport aux bibliothèques statiques est qu'elles agissent comme un moyen judicieux d'empaqueter le binaire de la bibliothèque compilée et les en-têtes associés. Ils peuvent être insérés dans votre projet (tout comme les frameworks intégrés du SDK tels que Foundation et UIKit) et ils devraient simplement fonctionner (la plupart du temps).

La plupart des frameworks contiennent des bibliothèques dynamiques; Les frameworks créés dans Xcode à l'aide du modèle Framework Mac créeront une bibliothèque dynamique. L'iPhone ne supporte pas les frameworks dynamiques, raison pour laquelle il est devenu courant que les bibliothèques de code iOS réutilisables soient distribuées sous forme de bibliothèques statiques.

Les bibliothèques statiques sont correctes, mais elles nécessitent un peu de travail supplémentaire de la part de l'utilisateur. Vous devez lier votre projet à la bibliothèque et copier les fichiers d'en-tête dans votre projet ou les référencer quelque part en définissant les chemins de recherche d'en-tête appropriés dans vos paramètres de construction.

Donc: en résumé, mon avis est que le meilleur moyen de distribuer votre bibliothèque est un cadre. Pour créer un framework "statique" pour iOS, vous pouvez essentiellement prendre un framework normal et remplacer le binaire par votre bibliothèque statique compilée. C’est ainsi que je distribue l’une de mes bibliothèques, Resty , et j’ai l’intention de le faire à l’avenir.

Vous voudrez peut-être consulter le fichier Rake fourni dans ce projet (au cas où vous ne le sauriez pas, Rake est l'équivalent de Make de Ruby). J'ai une poignée de tâches pour compiler mon projet (en utilisant xcodebuild) et pour les empaqueter en tant que framework statique pour iOS. Vous devriez trouver cela utile.

Vous pouvez également utiliser ces modèles Xcode 4 pour créer un cadre iOS.

Mise à jour du 9 décembre 2013 : c'est une réponse populaire, j'ai donc pensé modifier pour dire que mon premier choix en matière de distribution de bibliothèque a changé. CocoaPods est mon premier choix pour une bibliothèque tierce en tant que consommateur ou producteur. Je distribue mes bibliothèques à l'aide de CocoaPods et offre une bibliothèque statique précompilée avec des en-têtes comme option de secours.

140
Luke Redpath

en gros, les frameworks sont des bibliothèques et constituent un mécanisme pratique pour les utiliser. Si vous regardez "à l'intérieur" d'un framework, il ne s'agit que d'un répertoire contenant une bibliothèque statique et des fichiers d'en-tête (dans une structure de dossiers avec des métadonnées).

Si vous voulez créer votre propre framework, vous devez créer une "bibliothèque statique" et l’empaqueter de manière spécifique. voir cette question

En général, les plateformes framworks sont utilisées pour un comportement réutilisable où vous ajoutez votre propre code "dans un framework existant". si vous souhaitez disposer de fonctionnalités spécifiques, vous pouvez utiliser une bibliothèque (par exemple, trois20) et l'intégrer dans votre application distribuable

19
Martin Ullrich