Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Working with git submodules/cocoapods

I am working on a project which includes other repositories from Git.

I would like to keep up to date with these repositories. Know what are the latest features, bug fixes etc. Qu 1) What is the best way to keep up to date with a repository on Git without receiving emails of all issues reported etc?

After this is complete I would like to know the best way to include these into your project. I understand you can copy the source code into the project, but what are cocoapods/sub modules used for? For example, what is the correct way to update your project with the latest changes to that included repository?

Are there any GUIs for either of these methods as opposed to terminal?

like image 663
StuartM Avatar asked Apr 15 '13 16:04

StuartM


2 Answers

Cocoapods is a great way to include other projects in your Xcode project. The Cocoapods project maintains a list of pod spec files for a many open source libraries, which specify where to download the code and how to integrate them into an existing project. As you noted, you'd traditionally have to add a git submodule, manually add the source files to your project, update your build settings, and so forth. Cocoapods takes care of all of this for you.

I'm not sure of a way to track updates for Github projects without also being notified about issues, but Cocoapods can certainly tell you if any of your 'pods' have become outdated. It's then one command to update them to the latest versions. That said, it's generally best practice to 'lock' your external dependencies to a specific version that you know works correctly.

Using Cocoapods

To get started, first install Cocoapods. You then simply need to create a file in your root project directory (the same directory that contains your .xcodeproj file) called Podfile. Inside, you can specify your target OS, and your dependencies:

platform :ios, '5.0'

pod 'AFNetworking', '0.9.1'
pod 'OHAttributedLabel', '0.1.1'

The example above is targeting iOS 5.0, and pulling in the AFNetworking and OHAttributedLabel projects.

Then, in the Terminal, change to your project directory:

> cd path/to/my/project

And run pod install.

> pod install

This will check out the latest version of your dependencies for you. It will also generate you a .xcworkspace file. From now on, when you work on your project, you must open the .xcworkspace, not the .xcodeproj file.

Inside your new workspace, you'll have your existing Xcode project and a new Pods project - this contains all of your third party libraries. Just build and run your app as normal, and the Pods project will also be built and included.

Some other useful Cocoapods commands:

> pod outdated

Will list all dependencies that have an update available.

> pod search query

Will search all known Pod specs for 'query'. Useful for finding new libraries!

Tutorials

  • Looks like Tutsplus have a nice tutorial on getting started with Cocoapods
  • There's a free episode of NSScreencast on Cocoapods

GUIs

I'm afraid I don't know of any GUIs for Cocoapods, but there really aren't many Terminal commands that you need to know. It's worth getting comfortable with the command line, as it's such a useful developer tool.

That said, as far as I know, Appcode (Jetbrains' alternative IDE for Objective-C) is planning on adding Cocoapods support in their next update.

Good luck!

like image 64
James Frost Avatar answered Oct 14 '22 01:10

James Frost


James Frost's answer is an excellent explanation of how to work with Cocoapods and their advantages over submodules.

A few important advantages submodules have over Cocoapods are:

submodules are sub-repos - not only does this mean that git and git GUIs implicitly recognize them and more and more support easily working with them, it also means that your dependencies stay connected the wonderful world their git repos, Cocoapods or not, reside in. This means that you are able to collaborate and test changes from within your project, your project usually being the source of inspiration for elaboration of a dependency.

Unfortunately Cocoapods do not maintain this link, to work on a dependency means to clone it from git, outside of the range of Cocoapods. Edit: It's worth noting that Cocoapods does allow working on a local pod with the path or local fields or even building your own Spec repo but it still isn't as simple a process.

one less tool dependency - as mentioned in the previous bullet, submodules are a function of git and your using git means they are available to you. Any software's adoption of git implies that they will eventually support either all (important) features of git or all features that cover common use cases. Xcode 5 has brought in a basic support for git and GUIs (which are tool dependencies, it's true, but hopefully just dictate how information is surface, git dictates how it works) like Git Tower make working with sub-repos straightforward.

Cocoapods has come a long way and everyday is taking steps to becoming a stable, indispensable tool. However it hasn't yet gotten a nod from Apple and there isn't any reason why Apple won't release a change to Xcode that breaks Cocoapods. Additionally Cocoapods is dependant on Ruby. Aside, considering how much attention and community has been generated around Cocoapods it would be silly for Apple to ignore it.


It's also worth noting that using one does not lock you out of using the other. It might be a headache or it might be what you need, perhaps using Cocoapods for tiny one class libraries or libraries with complex dependancies and submodules for libraries with that you will be interacting with often.

like image 28
yo.ian.g Avatar answered Oct 14 '22 02:10

yo.ian.g