Bibliothèque? Statique? Dynamique? Ou cadre? Projet dans un autre projet

J'ai une application iOS existante et je veux append un gros morceau de code que j'ai développé comme un autre projet juste pour faciliter les tests. Le nouveau morceau traite essentiellement de sauver une image à divers services de partage, etc. Parce que ce code de partage a besoin de beaucoup de tests et de mises à jour futures, je me demandais quelle est la meilleure façon d'incorporer ce morceau de code dans mon application existante.

Je ne sais pas si cela devrait être une bibliothèque statique, une bibliothèque dynamic ou un framework, et honnêtement, je ne suis pas vraiment sûr de la différence, ou de la façon dont je devrais y aller et le configurer dans Xcode.

Tout ce que je sais, c'est que j'ai besoin / je veux garder une application de test et de mise à jour séparée pour le code de partage et que l'application principale l'utilise.

Si vous ne pouvez pas déjà le dire, je ne suis pas un git wiz. Je suis juste un simple développeur.

Toute aide ou orientation serait appréciée. Merci!

D'abord, quelques définitions générales (spécifiques à iOS):

Bibliothèque statique – une unité de code liée à la compilation, qui ne change pas.

Cependant, les bibliothèques statiques iOS ne sont pas autorisées à contenir des images / éléments (code uniquement). Vous pouvez contourner ce défi en utilisant un set de médias si.

Une meilleure définition plus formelle peut être trouvée sur Wikipedia ici .

Bibliothèque dynamic – une unité de code et / ou des actifs liés à l'exécution qui peuvent changer.

Cependant, seul Apple est autorisé à créer des bibliothèques dynamics pour iOS. Vous n'êtes pas autorisé à les créer, car cela entraînera le rejet de votre application. (Voir cet autre post pour confirmation et raisonnement sur tel).

Software Framework – un set compilé de code qui accomplit une tâche … par conséquent, vous pouvez réellement avoir un cadre statique ou un cadre dynamic , qui sont généralement juste les versions compilées de ce qui précède.

Voir le wiki sur le framework logiciel pour plus de détails.

Ainsi, sur iOS, votre seule option consiste essentiellement à utiliser une bibliothèque statique ou un framework statique (la différence principale étant qu'un framework statique est dissortingbué sous .a file .a compilé le plus souvent, alors qu'une bibliothèque statique peut simplement être incluse comme sous-projet – peut voir tout le code – qui est compilé en premier et son file .a résultant utilisé comme une dépendance par le projet).

Maintenant que nous sums clair (e) sur ces termes, la mise en place d'une bibliothèque statique et la prise en charge d'un set de médias pour iOS n'est pas trop difficile, et il existe de nombreux didacticiels sur la façon de procéder. Personnellement, je reorderais celui-ci:

https://github.com/jverkoey/iOS-Framework

C'est un guide assez simple et n'a pas l'inconvénient de traiter avec de "fausses bibliothèques statiques" … consultez-le pour plus d'informations …

Une fois que vous avez créé votre bibliothèque statique, il est aussi simple que de l'inclure en tant que sousmodule dans Git pour une utilisation sur différents projets.

Bonne chance.

MODIFIER

En ce qui concerne un sousprojet dans un projet, autant que je sache, pour que cela fonctionne correctement, vous devez configurer une string de compilation où le sous-projet est compilé en premier, ce qui crée un framework statique. une dépendance par le projet.

Voici un autre tutoriel utile qui en parle:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

Depuis iOS 8, Apple permet désormais aux développeurs de créer des frameworks dynamics! (Remarque: votre application doit avoir une cible minimale d'iOS 8 pour inclure un cadre dynamic … le portage return n'est pas autorisé.)

Cela a été ajouté en tant que nouveau model de projet. Dans Xcode 6.1, ceci peut être trouvé à:

 New Project -> iOS -> Framework & Library -> Cocoa Touch Framework 

Vous pouvez également créer un file .podspec pour CocoaPods ( http://guides.cocoapods.org/making/private-cocoapods.html#1.-create-a-private-spec-repo ) et l'utiliser comme tout autre pod avec le seulement la différence que c'est votre pod privée et n'est pas visible pour le monde extérieur (je ne suis pas sûr de ce qui se passera si votre pod doit créer un model CoreData, mais ce n'est pas le cas, si je comprends bien).