Question

Je fais du développement iOS depuis quelques mois maintenant et je viens d'apprendre le prometteur Cocoapodes Bibliothèque pour la gestion des dépendances.

Je l'ai essayé sur un projet personnel: ajouté une dépendance à kiwi à mon podfile, couru pod install CocoaPodsTest.xcodeproj, et voila, ça a très bien fonctionné.

La seule chose qui me demande est: que dois-je vérifier, et qu'ignore-t-il pour le contrôle de la version? Il semble évident que je veux vérifier le podfile lui-même, et probablement également le fichier .xcworkspace; Mais est-ce que j'ignore les pods / répertoire? Y a-t-il d'autres fichiers qui seront générés sur la route (lorsque j'ajouterai d'autres dépendances) que je devrais également ajouter à mon .gitignore?

Était-ce utile?

La solution

Personnellement, je ne vérifie pas le répertoire et le contenu des pods. Je ne peux pas dire que j'ai passé de longs âges à considérer les implications, mais mon raisonnement est quelque chose comme:

Le podfile fait référence à une balise ou à une out ou à chaque dépendance spécifique afin que les pods eux-mêmes puissent être générés à partir du podfile, ergo, ils ressemblent plus à un produit de construction intermédiaire qu'une source et, par conséquent, à ne pas avoir besoin de contrôle de version dans mon projet.

Autres conseils

Je commette mon répertoire de pods. Je ne suis pas d'accord que le répertoire PODS est un artefact de construction. En fait, je dirais que ce n'est certainement pas le cas. Cela fait partie de la source de votre application: il ne se construire pas sans lui!

Il est plus facile de considérer les cocoapodes comme un outil de développeur plutôt que comme un outil de construction. Il ne construit pas votre projet, il clones et installe simplement vos dépendances pour vous. Il ne devrait pas être nécessaire d'installer Cocoapods pour pouvoir simplement construire votre projet.

En faisant des cocoapodes une dépendance de votre construction, vous devez maintenant vous assurer qu'elle est disponible partout où vous pourriez avoir besoin pour construire votre projet ... Un administrateur d'équipe en a besoin, votre serveur CI en a besoin. En règle générale, vous devriez toujours être en mesure de cloner votre référentiel source et de construire sans aucun autre effort.

Ne pas commettre votre répertoire PODS crée également un mal de tête massif si vous changez fréquemment de branches. Vous devez maintenant exécuter POD Installer chaque fois que vous changez de branches pour vous assurer que vos dépendances sont correctes. Cela peut être moins compliqué car vos dépendances se stabilisent, mais au début d'un projet, il s'agit d'un puits de temps massif.

Alors, qu'est-ce que j'ignore? Rien. PodFile, le fichier de verrouillage et le répertoire PODS sont tous engagés. Croyez-moi, cela vous fera économiser beaucoup de tracas. Quels sont les inconvénients? Un repo légèrement plus grand? Pas la fin du monde.

Je recommande d'utiliser le Objectif-C Gitignore de Github. En détail, les meilleures pratiques sont:

  • La Podfile devoir Soyez toujours sous le contrôle de la source.
  • La Podfile.lock devoir Soyez toujours sous le contrôle de la source.
  • L'espace de travail généré par les cocoapodes devrait être maintenu sous le contrôle de la source.
  • Tout pod référencé avec le :path option devrait être maintenu sous le contrôle de la source.
  • La ./Pods dossier boîte être maintenu sous le contrôle de la source.

Pour plus d'informations, vous pouvez vous référer à guide officiel.

Source: Je suis membre de l'équipe de base Cocoapods, comme @Alloy


Bien que le dossier PODS soit un artefact de construction, il y a des raisons que vous pourriez considérer tout en décidant de la garder sous contrôle source:

  • Cocoapods n'est pas un gestionnaire de packages, donc la source d'origine de la bibliothèque pourrait être supprimée à l'avenir par l'auteur.
  • Si le dossier PODS est inclus dans le contrôle de la source, il n'est pas nécessaire d'installer des cocoapodes pour exécuter le projet car le paiement suffirait.
  • Cocoapods est toujours en cours et il existe des options qui ne conduisent pas toujours au même résultat (par exemple le :head et le :git Les options n'utilisent actuellement pas les validations stockées dans le Podfile.lock).
  • Il y a moins de points de défaillance si vous pouvez reprendre des travaux sur un projet après une durée moyenne / longue.

Fichier .gitignore

Pas de réponse réellement offre un .gitignore, voici deux saveurs.


Vérifier le répertoire des pods (Avantages)

Xcode / iOS Friendly Git ignore, sautant les fichiers système Mac OS, Xcode, Builds, autres référentiels et sauvegardes.

.Gitignore:

# Mac OS X Finder
.DS_Store

# Private Keys
*.pem

# Xcode legacy
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser

# Xcode
xcuserdata/
project.xcworkspace/
DerivedData/

# build products
build/
*.[oa]

# repositories
.hg
.svn
CVS

# automatic backup files
*~.nib
*.swp
*~
*(Autosaved).rtfd/
Backup[ ]of[ ]*.pages/
Backup[ ]of[ ]*.key/
Backup[ ]of[ ]*.numbers/

Ignorer le répertoire des pods (Avantages)

.Gitignore: (Ajouter à la liste précédente)

# Cocoapods
Pods/

Que vous vérifiiez ou non le répertoire PODS, le podfile et le podfile.lock doivent toujours être conservés sous le contrôle de la version.

Si Pods ne sont pas enregistrés, votre Podfile devrait probablement demander des numéros de version explicites pour chaque cocoapod. Discussion cocoapods.org ici.

Je travaille généralement sur les applications des clients. Dans ce cas, j'ajoute également le répertoire PODS au dépôt, pour m'assurer qu'à tout moment, tout développeur pourrait effectuer un paiement et construire et exécuter.

S'il s'agissait de notre propre application, j'exclurais probablement le répertoire PODS jusqu'à ce que je n'y travaillerai pas pendant un certain temps.

En fait, je dois conclure https://twitter.com/cocoapodsorg.

La réponse à ce sujet est donnée directement dans les documents cocoapod. Vous pouvez regarder "http://guides.cocoapods.org/using/using-cocoapods.html#sould-i-ingnet-the-pods-directory-in-source-control"

Que vous vérifiiez ou non votre dossier PODS dépend de vous, car les workflows varient d'un projet à l'autre. Nous vous recommandons de garder le répertoire PODS sous le contrôle source et de ne pas l'ajouter à votre .gitignore. Mais finalement, cette décision dépend de vous:

Avantages de la vérification dans le répertoire PODS

  • Après le clonage du dépôt, le projet peut immédiatement construire et fonctionner, même sans installer de cocoapodes sur la machine. Il n'est pas nécessaire d'exécuter l'installation de POD et aucune connexion Internet n'est nécessaire.
  • Les artefacts POD (code / bibliothèques) sont toujours disponibles, même si la source d'un pod (par exemple Github) devait baisser.
  • Les artefacts POD sont garantis pour être identiques à ceux de l'installation originale après le clonage du repo.

Avantages d'ignorer le répertoire des pods

  • Le dépôt de contrôle source sera plus petit et prendra moins de place.

  • Tant que les sources (par exemple GitHub) pour toutes les pods sont disponibles, CocoAPods est généralement capable de recréer la même installation. (Techniquement, il n'y a aucune garantie que l'installation de pod en cours d'exécution va récupérer et recréer des artefacts identiques lorsqu'il n'utilise pas de SHA de validation dans le podfile. Cela est particulièrement vrai lors de l'utilisation de fichiers zip dans le podfile.)

  • Il n'y aura pas de conflits à gérer lors de l'exécution des opérations de contrôle des sources, tels que la fusion des succursales avec différentes versions POD.

Que vous vérifiiez ou non le répertoire PODS, le podfile et le podfile.lock doivent toujours être conservés sous le contrôle de la version.

Je vérifie tout. (Pods/ et Podfile.lock.)

Je veux pouvoir cloner le référentiel et savoir que tout fonctionnera comme il l'a fait la dernière fois que j'ai utilisé l'application.

Je préfère fournir des choses dans que le risque d'avoir des résultats différents qui pourraient être causés par une version différente du gemme, ou quelqu'un réécrivant l'historique dans le référentiel du pod, etc.

Je suis dans le camp de développeurs qui ne vérifient pas les bibliothèques, en supposant que nous avons une bonne copie disponible dans un autre endroit. Donc, dans mon .gitignore, j'inclus les lignes suivantes spécifiques aux cocoapodes:

Pods/
#Podfile.lock  # changed my mind on Podfile.lock

Ensuite, je m'assure que nous avons une copie des bibliothèques dans un emplacement sûr. Plutôt que de (mal) utiliser le référentiel de code d'un projet pour stocker les dépendances (compilées ou non), je pense que la meilleure façon de le faire est d'archiver les constructions. Si vous utilisez un serveur CI pour vos versions (comme Jenkins), vous pouvez archiver en permanence toutes les versions importantes pour vous. Si vous faites toutes vos constructions de production dans votre Xcode local, prenez l'habitude de prendre une archive de votre projet pour toutes les versions que vous devez conserver. Quelque chose comme: 1. Produit -> Archive

  1. Distribuez ... Soumettez-vous à l'App Store iOS / Save for

  2. Révenez votre dossier de projet dans Finder

  3. Cliquez avec le bouton droit et compressez "WhyProject"

Cela fournit une image telle que construite de l'ensemble du projet, y compris le projet complet et les paramètres de l'espace de travail utilisés pour créer l'application ainsi que des distributions binaires (telles que Sparkle, des SDK propriétaires tels que TestFlight, etc.), qu'ils utilisent ou non des cocoapodes.

Mise à jour: J'ai changé d'avis à ce sujet et maintenant commet le Podfile.lock au contrôle de la source. Cependant, je crois toujours que les pods eux-mêmes sont des artefacts de construction et doivent être gérés en tant que tels en dehors du contrôle source, à travers une autre méthode telle que votre serveur CI ou un processus d'archive comme je le décris ci-dessus.

Je préfère commander Pods répertoire avec Podfile et Podfile.lock Pour vous assurer que quiconque dans mon équipe peut vérifier la source à tout moment et qu'il n'a pas à s'inquiéter de quoi que ce soit ou de faire des choses supplémentaires pour le faire fonctionner.

Cela aide également dans un scénario où vous avez corrigé un bug à l'intérieur de l'une des pods ou modifié un comportement selon vos besoins, mais ces modifications ne seront pas disponibles sur d'autres machines si elles ne sont pas engagées.

Et pour ignorer les répertoires inutiles:

xcuserdata/

Je dois dire que je suis fan de commettre des pods dans le référentiel. Suivre un lien déjà mentionné vous donnera un bon fichier .gitignore pour obtenir vos projets Xcode pour que iOS autorise les pods mais aussi pour que vous les excluez facilement si vous le souhaitez: https://github.com/github/gitignore/blob/master/objective-c.gitignore

Mon raisonnement pour être fan de l'ajout de pods au référentiel est pour une raison fondamentale que personne ne semble reprendre, que se passe-t-il si une bibliothèque dont notre projet dépend est soudainement supprimé du Web?

  • Peut-être que l'hôte décide qu'ils ne veulent plus garder leur compte GitHub ouvert ce qui se passe si la bibliothèque a dit plusieurs années (comme plus de 5 ans par exemple) Il existe un risque élevé que le projet ne soit plus disponible à la source
  • Aussi un autre point, que se passe-t-il si l'URL du référentiel change? Disons que la personne servant la gousse de son compte GitHub décide de se représenter sous une poignée différente - vos URL de pods vont se casser.
  • Enfin un autre point. Dites si vous êtes un développeur comme moi qui fait beaucoup de codage en vol entre les pays. Je fais une traction rapide sur la succursale «maître», je fais une installation de pod sur cette succursale, tout en étant assis à l'aéroport et me préparez pour le vol de 8 heures à venir. Je reçois 3 heures dans mon vol et je me rends compte que je dois passer à une autre branche .... 'DOH' - Informations de pod manquantes qui ne sont disponibles que sur la succursale 'Master'.

NB ... Veuillez noter que la succursale «maître» pour le développement est juste pour des exemples, évidemment les succursales «maître» dans les systèmes de contrôle de version, doivent être maintenus propres et déployables / construits à tout moment

Je pense qu'après ces instantanés dans vos référentiels de code, est certainement meilleur que d'être strict sur la taille du référentiel. Et comme déjà mentionné, le fichier podfile.lock - tandis que la version contrôlée vous donnera un bon historique de vos versions de pod.

En fin de compte, si vous avez une date limite urgente, un budget serré, le temps est de l'essence - nous devons être aussi ingénieux que possible et ne pas perdre de temps sur des idéologies strictes, et exploiter un ensemble d'outils pour travailler ensemble - pour rendre nos vies plus efficaces plus efficaces.

À la fin, c'est à vous l'approche que vous adoptez.

C'est ce que l'équipe Cocoapods y pense:

Que vous vérifiiez ou non votre dossier PODS dépend de vous, car les workflows varient d'un projet à l'autre. Nous vous recommandons de garder le répertoire PODS sous le contrôle source et de ne pas l'ajouter à votre .gitignore. Mais finalement, cette décision dépend de vous.

Personnellement j'aimerais garder Gousses out, comme node_modules Si j'utilisais Nœud ou bower_components Si j'utilisais Tonnelle. Cela demande presque tous les gestionnaires de dépendances, et est la philosophie derrière sous-modules Git aussi bien.

Cependant, il y a parfois que vous voudrez peut-être être vraiment sûr du à la pointe de la technologie D'une certaine dépendance, de cette façon, vous comportez la dépendance dans votre projet. En cours, il existe plusieurs inconvénients qui s'appliquent si vous faites cela, mais les préoccupations ne s'appliquent pas seulement aux cocoapodes, ceux-ci s'appliquent à tout gestionnaire de dépendances.

Ci-dessous, il y a un bon POUR / CONSERS Liste faite par l'équipe Cocoapods et le texte intégral de la citation mentionnée précédemment.

Équipe Cocoapods: Dois-je vérifier le répertoire PODS dans le contrôle de la source?

Cela dépend, personnellement:

Pourquoi les pods devraient faire partie du repo (sous le contrôle source) et ne doit pas être ignoré

  • La source est identique
  • Vous pouvez le construire tout de suite comme c'est (même sans les cocoapodes)
  • Même si un pod est supprimé, nous avons toujours sa copie (Oui, cela peut arriver et c'est le cas. Dans un ancien projet où vous voulez juste un petit changement, vous auriez besoin d'implémenter une nouvelle bibliothèque pour pouvoir même construire).
  • pods.xcodeproj Les paramètres font également partie du contrôle source. Cela signifie par exemple si vous avez le projet dans swift 4, mais certaines gousses doivent être swift 3.2 Parce qu'ils ne sont pas encore mis à jour, ces paramètres seront enregistrés. Sinon, celui qui a cloné le repo se retrouverait avec des erreurs.
  • Vous pouvez toujours supprimer les gousses du projet et exécuter pod install, l'inverse ne peut pas être fait.
  • Même le auteurs des cocoapodes le recommandent.

Quelques inconvénients: référentiel plus grand, difficulté des diffractions (principalement pour les membres de l'équipe), potentiellement plus de conflits.

Pour moi, la plus grande préoccupation est la prestation future de votre source. Si vous prévoyez que votre projet dure un certain temps et que les cocoapodes disparaissent ou que la source de l'un des gousses tombe en panne, vous n'avez pas de chance si vous essayez de construire frais à partir d'une archive.

Cela pourrait être atténué avec des archives périodiques à source complète.

Vérifiez les gousses.

Je pense que cela devrait être un principe de développement logiciel

  • Toutes les constructions doivent être reproductibles
  • La seule façon de s'assurer que les constructions sont reproductibles est de contrôler toutes les dépendances; La vérification de toutes les dépendances est donc un must.
  • Un nouveau développeur à partir de zéro doit être en mesure de consulter votre projet et de commencer à fonctionner.

Pourquoi?

Les cocoapodes ou toute autre bibliothèque externe peuvent changer qui pourraient casser les choses. Ou ils peuvent se déplacer, ou être renommés, ou être retirés. Vous ne pouvez pas compter sur Internet pour stocker des choses pour vous. Votre ordinateur portable peut être mort et il y a un bug critique dans la production qui doit être corrigé. Le développeur principal pourrait être frappé par un bus et son remplacement doit démarrer à la hâte. Et je souhaite que le dernier soit un exemple théorique, mais cela s'est produit dans une startup avec laquelle j'étais. SE DÉCHIRER.

Maintenant, de manière réaliste, vous ne pouvez pas vraiment vérifier toutes les dépendances. Vous ne pouvez pas vérifier une image de la machine que vous avez utilisée pour créer des constructions; Vous ne pouvez pas vérifier la version exacte du compilateur. Etc. Il y a des limites réalistes. Mais vérifiez tout ce que vous pouvez - ne pas le faire rend votre vie plus difficile. Et nous ne voulons pas ça.

Mot final: les pods ne sont pas des artefacts. Les artefacts de construction sont ce qui est généré à partir de vos versions. Votre version utilise des pods, pas de les générer. Je ne sais même pas pourquoi cela doit être débattu.

En théorie, vous devez vérifier dans le répertoire des pods. Dans la pratique, cela ne fonctionnera pas toujours. De nombreux pods dépassent bien la limite de taille des fichiers GitHub, donc si vous utilisez GitHub, vous aurez des problèmes de vérification dans le répertoire PODS.

Des pros de ne pas enregistrement Pods/ au contrôle des versions (par ordre subjectif d'importance):

  1. Beaucoup Plus facile à fusionner les commits et examiner les difficultés de code. La fusion est une source commune de problèmes dans une base de code, ce qui vous permet de vous concentrer uniquement sur des choses pertinentes.
  2. Il est impossible pour un contributeur aléatoire de modifier eux-mêmes les dépendances et de vérifier les changements, ce qu'ils ne devraient jamais faire (et à nouveau seraient difficiles à identifier si le diff est massif). Modifier les dépendances est une très mauvaise pratique car un avenir pod install pourrait occlure les changements.
  3. Écarts entre le Podfile et le Pods/ Le répertoire se trouve plus rapidement parmi les coéquipiers. Si vous vous enregistrez Pods/ et, par exemple, mettez à jour une version dans le Podfile, mais oublie de courir pod install ou enregistrer les modifications à Pods/, vous aurez beaucoup plus de mal à remarquer la source de l'écart. Si Pods/ n'est pas enregistré, vous devez toujours courir pod install De toute façon.
  4. Taille de repo plus petite. Avoir une empreinte d'octets plus petite est agréable, mais cela n'a pas beaucoup d'importance dans le grand schéma. Plus important encore: avoir plus de choses dans le repo augmente également votre charge cognitive. Il n'y a aucune raison d'avoir des choses dans le repo que vous ne devriez pas regarder. Reportez-vous à la documentation (l'abstraction) pour savoir comment quelque chose fonctionne, pas au code (l'implémentation).
  5. Plus facile de discerner combien quelqu'un contribue (puisque leurs lignes de code contribuées n'incluent pas les dépendances qu'ils n'ont pas écrites)
  6. JAR des dossiers, .venv/ (environnements virtuels), et node_modules/ ne sont jamais inclus dans le contrôle de version. Si nous étions complètement agnostiques sur la question, ne pas enregistrement Pods serait la valeur par défaut basée sur le précédent.

Inconvénient ne pas vérifier le Pods/

  1. Vous devez courir pod install lors de la commutation des branches ou du retour des validations.
  2. Vous ne pouvez pas exécuter un projet simplement en clonage le référentiel. Vous devez installer l'outil Pod, puis exécuter pod install.
  3. Vous devez avoir une connexion Internet pour exécuter pod install, et la source des gousses doit être disponible.
  4. Si le propriétaire d'une dépendance supprime son colis, vous avez des ennuis.

En résumé, non compris la Pods Le répertoire est un garde-corps contre plus de mauvaises pratiques. Y compris la Pods Le répertoire facilite l'exécution du projet. Je préfère le premier sur le second. Vous n'aurez pas besoin de débriefter chaque nouvelle personne sur un projet sur "quoi ne pas faire "s'il n'y a pas de possibilité de faire certaines erreurs en premier lieu. J'aime aussi l'idée d'avoir un contrôle de version séparé pour le Pods ce qui atténue les inconvénients.

Cela semble être un bon moyen de structurer cela serait vraiment d'avoir le répertoire "Pods" en tant que sous-module GIT / projet séparé, voici pourquoi.

  • Le fait d'avoir des pods dans votre repo de projet, lorsque vous travaillez avec plusieurs développeurs, peut provoquer de très grandes difficultés dans les demandes de traction où il est presque impossible de voir le travail réel qui a été modifié par les personnes (pensez à plusieurs centaines à des milliers de fichiers changés pour les bibliothèques, et seulement un peu ont changé dans le projet réel).

  • Je vois le problème de ne rien combler à Git, car la personne qui possède la bibliothèque pourrait le supprimer à tout moment et que vous êtes essentiellement Sol, cela résout aussi cela.

Que vous vérifiiez ou non votre dossier PODS dépend de vous, car les workflows varient d'un projet à l'autre. Nous vous recommandons de garder le répertoire PODS sous le contrôle source et de ne pas l'ajouter à votre .gitignore. Mais finalement, cette décision dépend de vous:

Avantages de la vérification dans le répertoire PODS

  1. Après le clonage du dépôt, le projet peut immédiatement construire et fonctionner, même sans installer de cocoapodes sur la machine. Il n'est pas nécessaire d'exécuter l'installation de POD et aucune connexion Internet n'est nécessaire.
  2. Les artefacts POD (code / bibliothèques) sont toujours disponibles, même si la source d'un pod (par exemple Github) devait baisser.
  3. Les artefacts POD sont garantis pour être identiques à ceux de l'installation originale après le clonage du repo.

Avantages d'ignorer le répertoire des pods

  1. Le dépôt de contrôle source sera plus petit et prendra moins de place. Tant que les sources (par exemple GitHub) pour toutes les pods sont disponibles, Cocoapods est généralement capable de recréer la même installation. (Techniquement, il n'y a aucune garantie que l'installation de pod à la course va récupérer et recréer des artefacts identiques lorsqu'il n'utilise pas de SHA comme comig dans le fossé . Cela est particulièrement vrai lors de l'utilisation de fichiers zip dans le podfile.)
  2. Il n'y aura pas de conflits à gérer lors de l'exécution des opérations de contrôle des sources, tels que la fusion des succursales avec différentes versions POD. Que vous vérifiiez ou non le répertoire PODS, le podfile et le podfile.lock doivent toujours être conservés sous le contrôle de la version.

Tl; dr: lorsque vous suivez le Pods/ dossier, le projet est plus facile à prendre. Lorsque vous ne le suivez pas, il est plus facile de s'améliorer lorsque vous travaillez en équipe.

Bien que l'organisation cocoapods nous encourage à suivre le Pods/ Répertoire, ils disent qu'il appartient aux développeurs de décider de le faire ou non en fonction de ces avantages et des inconvénients:http://guides.cocoapods.org/using/using-cocoapods.html#sould-i-check-the-pods-directory-into-source-control

Personnellement, je suive habituellement le Pods/ Dossier juste pour les projets sur lesquels je ne travaillerai plus pendant un certain temps. De cette façon, tout développeur peut rapidement le reprendre et continuer le travail en utilisant la version appropriée des cocoapodes.

D'un autre côté, je pense que l'historique des engagements devient plus propre et il est plus facile de fusionner le code et de revoir le code d'une autre personne lorsque vous ne suivez pas le Pods/ dossier. Je définis généralement la version de la bibliothèque Cocoapod lorsque je l'installe pour m'assurer que n'importe qui peut installer le projet en utilisant les mêmes versions que moi.

Aussi, lorsque le Pods/ Le répertoire est suivi, tous les développeurs doivent utiliser la même version de Cocoapods pour l'empêcher de changer des dizaines de fichiers à chaque fois que nous exécutons pod install Pour ajouter / supprimer un pod.

Fin de compte: Lorsque vous suivez le Pods/ dossier, le projet est plus facile à prendre. Lorsque vous ne le suivez pas, il est plus facile de s'améliorer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top