CocoaPods and GitHub forks
This is my first time forking a GitHub project, and I'm not too competent with CocoaPods either, so please bear with me.
Basically, I forked a project on GitHub using the following in my Podfile
:
pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'
I then made some changes to the fork, and of course when I did a pod install
to install another pod it reinstalled the original REActivityViewController
and erased my changes.
I'm realizing I need to push my changes to my fork before another pod install
, but how do I know it is the fork being installed, considering that this is a repo installed by CocoaPods? I looked in the REActivityViewController
folder installed under the Pods
folder and there aren't any git files.
Do I need to work on my fork outside of my project and then use CocoaPods to install the changes? That's too cumbersome of a workflow.
Or do I need to do something with submodules?
Solution 1:
I will answer this question using an example. I have a fork of TTTAttributedLabel with some extra functionality I added here:
https://github.com/getaaron/TTTAttributedLabel
In order to use this in a Cocoapods project, I:
- Push my changes to my fork
- Configure my Podfile to get the changes & update
Once you've pushed your changes to your fork, get the SHA of your last commit. You can do this using git rev-parse origin/master | pbcopy
or on the GitHub commits page for your project:
Then, you can specify the specific commit on your fork in your Podfile like this:
pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'
After that, pod update
will update this particular commit from your fork. If you want, you can also make a podspec
for your fork, but I find this approach simpler and I don't make changes frequently enough to justify a new workflow.
Do I need to work on my fork outside of my project and then use Cocoapods to install the changes? That's way to cumbersome of a workflow.
You can do it this way, but I usually:
- Edit the code inside my project and make sure it works
- Copy the changes over to my fork, by
- exporting a patch, or
- copying over the entire source code file
- Commit & push to GitHub
- Update the Podfile with the new SHA
- Run
pod update
.
Or do I need to do something with submodules?
No, you don't need to.
Solution 2:
Another option is to have your project reference the pod directly and not via github. This way you don't have to keep committing your fork or copying/pasting code just to test your changes. You can work with two different Xcode projects simultaneously and commit separately into their respective projects.
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
CocoaPods Documentation: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine