CocoaPods is a reflection on the Cocoa community, a mirror that reflects the effort of thousands on individual contributions to a greater idea of sharing and helping each other to improve. As the community grows, so does the tooling around it, growing on both complexity and size.
A year ago we unveiled the new CocoaPods branding. It was the culmination of 6 months of design and development work for a few volunteers in their spare time. Let's take a look at what else has changed in the last year.
We had two people paid to work full time for a period on CocoaPods this year. The first, Fabio Pelosin, used his time sponsored by SoundCloud on refactoring internals, helping to bring in support for CocoaPods plugins and per-config Pods, then finally improving the command line interface. The second, Samuel Giddins, has been mostly working on a iterative dependency resolver for both CocoaPods and Bundler ( CocoaPods for Ruby. )
The team in general has shifted too. A lot of the current major commiters were not working on CocoaPods last year. We've increased the number of active developers from roughly 4 to roughly 8. This is hard to judge because CocoaPods is a side project for most. But there's a lot of new and very welcome faces in the contributors chat room.
A year ago, documentation existed in four places; the CocoaPods homepage, a developer reference based on the ruby source code, a docs subsite and the GitHub wiki. This was consolidated into a single guides site which everything important goes into, with the expectation that StackOverflow would fill in gaps.
The traffic for the website went from a 60,000 impressions/month to a combined 180,000. This splits out from cocoapods.org: 120,000, blog.cocoapods.org: 8,000, guides.cocoapods.org: 55,000.
We changed the focus of the homepage to reflect what we were seeing in analytics; people were spending a lot of time using our search. The new design moved search front and center on the website and it shows in our analytics, we went from 70,000 searches per month, to a massive 825,000. It increased its complexity, and was re-written to deal with the scale. It also now uses our metrics to derive a sorting algorithm for popularity. It's not perfect, but it's a great step in where we want to go.
We introduced a few new web services, there's a metrics engine that constantly grabs metrics from GitHub (and soon CocoaDocs for quality) for all Pods. This will make up the bulk of a true CocoaPods API.
There's an authentication server, trunk, which provides library authors with the ability to control who can push releases of their library. Previously we were using Pull Requests, of which the community make 12,000+, making us one of GitHub's most active repos. Now it's bigger, and automated. Because of this we saw an increase of contributors to the specs repo go from 1,800 to 4,200. On the other side, we're now seeing roughly 1,500 downloads of the Specs repo a day.
As a nice metric of interest, the @CocoaPods twitter account has gone from 4k to over 10k. We split out the new pod announcements to a separate twitter account @CocoaPodsFeed in order to deal with the number of new pods.
On the subject of new Pods, this vastly increased 2,400 to 7,000. I expect this is in-part due to the network effect, and reducing the barrier to entry. We devoted a considerable amount of time towards making a OSS library very easy with the command
pod lib create offering best practices as defaults.
We ran a some CocoaPods events, a few meetups which went swimmingly. A hackathon based around a CocoaPods plugin. The most interesting was a CocoaPods bug bash. The idea was that we try deal with as many small issues as possible, we planned it for a weekend but had completed by the first day. The second day was spent improving CocoaPods. The bash gave us some great experience in onboarding and bootstrapping people to work on CocoaPods which resulted in a meta-repo, Rainforest, that holds all the repos. It also introduced new contributors who are invaluable now.
We hit 1,000,000 total downloads of the CocoaPods Gem this month.
The last release in October 2013 was CocoaPods 0.26. Since then CocoaPods has added:
- Config based Pods
- Plugin support
- Updating a specific pod
- Vastly reduces networking around local caching
- Moved to support JSON podspecs
- Switched to pre-built libraries
- Added a command to try any Pod instantly
- Handles Xcodeproj merge conflicts elegantly
- Added the ability to deprecate a Pod
- Release Candidates for CocoaPods
The future is very bright with the imminent next release bringing in the work on the resolver.
Then Swift CocoaPods. This has a singular Pull Request you can follow. I've personally migrated the Artsy iOS Swift App to remove all submodules and use just CocoaPods. Making a Swift or Dynamic Framework pod will be no different from an Objective-C one.
We've been working towards a stable 1.0 release which means long term support. As an issue can only be in one milestone our official 1.0 milestone is a little empty. Swift support pushed us back a bit on this, but not considerably.
On a personal note. It's been super gratifying to work on such a high profile tool used by so many people. I think that CocoaPods considerably lowers the barrier to entry for new programmers, and makes it easy for the experienced to improve their codebases by covering the entire ground from library discovery to Xcode integration. This is the fourth year since the first CocoaPods commit and it has been the best so far.