Bibliothèque? Statique? Dynamique? Ou Cadre? Projet dans un autre projet
J'ai déjà une application iOS et souhaitez ajouter un grand morceau de code que j'ai mis au point comme un autre projet juste pour la facilité du test. Le nouveau bloc traite fondamentalement de l'enregistrement d'une image à divers services de partage, etc.. Parce que le partage de code a besoin d'un grand nombre de tests et de mises à jour futures, je me demandais quelle est la meilleure façon de les intégrer morceau de code dans mon application existante.
Je ne sais pas si il faut une bibliothèque statique, dynamique de la bibliothèque ou d'un cadre, et honnêtement, je ne suis pas vraiment sûr de ce que la différence est, ou comment je devrais aller à ce sujet et de le configurer dans Xcode.
Tout ce que je sais, c'est que j'ai besoin/envie de garder un test séparé et la mise à jour de l'app pour le partage de code et de l'application principale de l'utiliser.
Si vous ne pouvez pas dire déjà, je ne suis pas un git wiz. Je ne suis qu'un simple homme développeur de.
Toute aide ou une orientation serait appréciée. Merci!
- Vous pouvez créer parapluie cadre qui est quelque chose comme "cadre de référence à l'intérieur du cadre' stackoverflow.com/a/27638841/1582217
- double possible de Comment faire pour créer un cadre général dans iOS sdk?
Vous devez vous connecter pour publier un commentaire.
D'abord, quelques définitions générales (spécifique à iOS):
Bibliothèque statique - une unité de code lié au moment de la compilation, ce qui ne change pas.
Toutefois, iOS bibliothèques statiques sont pas peut contenir des images ou des actifs (seul le code). Vous pouvez contourner ce problème en utilisant un médias bundle bien.
Une meilleure définition plus formelle peut être trouvé sur Wikipédia ici.
Bibliothèque dynamique - une unité de code et/ou des actifs liés à l'exécution qui peut changement.
Toutefois, seul Apple est autorisé à créer des bibliothèques dynamiques pour iOS . Vous n'êtes pas autorisé à créer ces, ce qui permettra d'obtenir votre application rejeté. (Voir cette autres DONC, après la confirmation et le raisonnement sur ces).
Cadre de logiciel - la compilation d'un ensemble de code qui accomplit une tâche... par conséquent, vous pouvez en fait avoir un cadre statique ou un cadre dynamique, qui sont généralement seulement les versions compilées de la ci-dessus.
Voir le Wiki sur le Logiciel de Cadre pour plus de détails.
Donc sur iOS, votre seule option est d'utiliser une bibliothèque statique ou statique cadre (la différence principale étant qu'un cadre statique est distribué comme un compilé
.a
fichier le plus souvent, alors qu'une bibliothèque statique peut simplement être compris comme un sous-projet - vous pouvez voir tout le code qui est compilé et son.a
fichier utilisé comme une dépendance par le projet).Maintenant que nous sommes clairs(er) dans ces conditions, l'établissement d'une bibliothèque statique et des supports de bundle pour iOS n'est pas trop difficile, et il existe de nombreux tutoriels sur la façon de faire de telles. Personnellement, je vous le recommande:
https://github.com/jverkoey/iOS-Framework
C'est une question assez simple guide et n'a pas l'inconvénient de traiter avec des "faux bibliothèques statiques"... check it out pour plus d'info...
Une fois que vous avez créé votre bibliothèque statique, c'est aussi facile que de l'inclure comme un sous-module dans Git pour une utilisation sur différents projets.
Bonne Chance.
MODIFIER
Concernant un sous-projet au sein d'un projet, pour autant que je sais, pour arriver au travail/compile correctement, vous devez configurer une chaîne de compilation où le sous-projet est compilé, ce qui crée un cadre statique
.a
fichier qui est utilisé comme une dépendance par le projet.Voici un bon tutoriel qui en parle:
http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/
EDIT 2
Comme d'iOS 8, Apple permet désormais aux développeurs de créer des dynamiques de cadres! (Remarque: votre application doit avoir un objectif minimum d'iOS 8 pour inclure un cadre dynamique... de retour le portage n'est pas autorisé.)
Ce qui a été ajouté comme un nouveau modèle de projet. Dans Xcode 6.1, ce qui peut être trouvé à:
Des bibliothèques et Frameworks
Martin Fowler sur InversionOfControl
Un
library
est essentiellement un ensemble de fonctions que vous pouvez appeler, ces jours généralement organisés en classes. Chaque appel fait un peu de travail et retourne le contrôle au client.Un
framework
incarne une certaine conception abstraite, avec plus de comportement intégrée. Pour l'utiliser, vous devez insérer votre comportement dans différents lieux dans le cadre, soit en dérivation ou en branchant vos propres classes. Le cadre du code appelle ensuite votre code au niveau de ces points. Le contrôle principal du programme est inversé, déplacé loin de vous pour le cadre. (Inversion de Contrôle)Des bibliothèques et des structures sur iOS
Un
library
est une collection de ressources et le code lui-même, compilé pour une ou plusieurs architectures. Il se compose de*.o
fichiers (Mach-O fichiers objets).Dans le cas de
static libraries (*.a)
, le code de l'application utilise est copié dans le fichier exécutable généré par unstatic linker
pendantcompilation time
.De Xcode 9.0, statique Swift bibliothèques sont désormais pris en charge
✓ Pour:
✕ Contre:
Dynamic libraries (*.dylib)
sont différents destatic libraries
dans le sens qu'ils sont liés de façon dynamique avec l'application exécutable àload
ouruntime
, mais pas copiées. En conséquence, l'exécutable est plus petit et, parce que le code est chargé uniquement lorsque cela est nécessaire, le temps de démarrage est généralement plus rapide.Tous les iOS et macOS système de bibliothèques dynamiques. Donc nos apps vous permettra de bénéficier de l'avenir des améliorations qu'Apple rend à la bibliothèque standard de cadres sans la création et la livraison de nouvelles versions.
✓ Pour:
✕ Contre:
Un
bundle
est un répertoire de fichiers avec des sous-répertoires à l'intérieur. Sur iOS,bundles
servir idéalement à expédier des fichiers ensemble dans un seul paquet – par exemple, des images, des plumes, ou le code compilé. Le système traite comme un fichier et que vous pouvez accéder à des ressources de module sans la connaissance de sa structure interne.La
library
pouvez également disposer d'autres ressources: en-têtes, la localisation des fichiers, des images, de la documentation et des exemples d'utilisation. Nous pouvons bundle tout cela ensemble dans unbundle
– et le nom de ce estframework
.Un
framework (*.framework)
est un type spécifique d'unebundle
. Avec de petits changements à sa structure, il peut même contenir d'autres cadres. Globale telle est connu commeumbrella framework
.Static frameworks
contenir unstatic library
emballés avec ses ressources.Dynamic frameworks
contenir lesdynamic library
avec ses ressources. En plus de cela,dynamic frameworks
peut idéalement inclure des versions différentes de la mêmedynamic library
dans le même cadre!Si votre cible de Déploiement est iOS8+ aussi, vous êtes en mesure de créer
embedded framework
.Embedded framework
est unDynamic framework
et est placé à l'intérieur d'une application sandbox et sont disponibles uniquement pour cette application. Ce type a été créé tout d'abord pour extension communs du code et des ressources.La source et un de plus. Aussi lire plus ici, ici, ici, ici, ici
Vous pouvez également créer .podspec fichier pour CocoaPods( http://guides.cocoapods.org/making/private-cocoapods.html#1.-create-a-private-spec-repo ) et de l'utiliser comme n'importe quel autre pod avec la seule différence qu'il est privé de la gousse et n'est pas visible à l'extérieur de monde(je ne suis pas sûr de ce qui va se passer si votre module doit créer CoreData modèle, mais ce n'est pas le cas, comme je le comprends).