web-dev-qa-db-fra.com

CocoaPods et fourches GitHub

C'est la première fois que je bifurque sur un projet GitHub, et je ne suis pas trop compétent avec CocoaPods non plus, alors soyez patient avec moi.

Fondamentalement, j'ai bifurqué un projet sur GitHub en utilisant ce qui suit dans mon Podfile:

pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'

J'ai ensuite apporté quelques modifications à la fourche, et bien sûr, quand j'ai fait un pod install pour installer un autre module, il a réinstallé le REActivityViewController d'origine et a effacé mes modifications.

Je me rends compte que je dois pousser mes modifications sur ma fourche avant un autre pod install, mais comment dois-je faire étant donné qu'il s'agit d'un dépôt installé par CocoaPods? J'ai regardé dans le dossier REActivityViewController installé sous le dossier Pods et il n'y a pas de fichiers git.

Dois-je travailler sur ma fourchette en dehors de mon projet, puis utiliser CocoaPods pour installer les modifications? C'est trop lourd d'un workflow.

Ou dois-je faire quelque chose avec des sous-modules?

104
Ramsel

Je vais répondre à cette question en utilisant un exemple. J'ai un fork de TTTAttributedLabel avec quelques fonctionnalités supplémentaires que j'ai ajoutées ici:

https://github.com/getaaron/TTTAttributedLabel

Afin de l'utiliser dans un projet Cocoapods, je:

  1. Poussez mes modifications sur ma fourchette
  2. Configurer mon Podfile pour obtenir les modifications et la mise à jour

Une fois que vous avez poussé vos modifications dans votre fork, récupérez le SHA de votre dernier commit. Vous pouvez le faire en utilisant git rev-parse Origin/master | pbcopy ou sur la page de validation de GitHub pour votre projet: Screenshot of copying a commit's SHA on GitHub

Ensuite, vous pouvez spécifier le commit spécifique sur votre fork dans votre Podfile comme ceci:

pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'

Après ça, pod update mettra à jour ce commit particulier depuis votre fork. Si vous le souhaitez, vous pouvez également créer un podspec pour votre fork, mais je trouve cette approche plus simple et je n'apporte pas de modifications assez fréquemment pour justifier un nouveau workflow.

Dois-je travailler sur ma fourchette en dehors de mon projet, puis utiliser Cocoapods pour installer les modifications? C'est trop lourd pour un workflow.

Vous pouvez le faire de cette façon, mais j'ai l'habitude:

  1. Modifiez le code à l'intérieur de mon projet et assurez-vous qu'il fonctionne
  2. Copiez les modifications sur mon fork, par
    • exporter un patch, ou
    • copie sur tout le fichier de code source
  3. Commit & Push to GitHub
  4. Mettre à jour le Podfile avec le nouveau SHA
  5. Courir pod update.

Ou dois-je faire quelque chose avec des sous-modules?

Non, tu n'en as pas besoin.

173
Aaron Brager

Une autre option est d'avoir votre projet référencé directement le pod et non via github. De cette façon, vous n'avez pas à continuer à valider votre fork ou à copier/coller du code juste pour tester vos modifications. Vous pouvez travailler avec deux projets Xcode différents simultanément et vous engager séparément dans leurs projets respectifs.

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

Documentation CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

enter image description here

33
Oren