Package-Management-Study

Study and comparing different package management systems (mainly on iOS platform)

View project on GitHub

🏡 Home > Main > 📍

Setup Carthage and CocoaPods

CocoaPods and Carthage are two of the most prominent package-management and dependency management software. They are very popular in Swift and Objective-C communities. I have been using Carthage heavily with my last client for the past 2 years and sort of “touch-and-go” with the Cocoapods. It’s time to dissect and look at them closely.

Getting to Know Them

The first step - getting to know them. Here are the best places to get information about them.

Carthage

  1. Carthage on Github

    This is the best place to start learning about Carthage.

CocoaPods

  1. Cocoapods on Github

    CocoaPods also has Github page. This was the how they started and this was how I found and trust them.

  2. Cocoapods Website

    This is a hint of who is winning. CocoaPods is getting ahead and now has their own website.

Github Pages is a good starting point. That was how I found them and many of the trust-able pieces of software. I feel more comfortable with them when they bare all their source codes open for inspection. Plus, there are many sets of eyes helping with the inspection - thus the Check & Bound Due Process at work.

Installation

All these happened on must trusty MacBook with the following spec:

  • Macbook 2016 with 8GM RAM
  • Mac OS Mojave 10.14.4

Installing & Fixing Carthage

Most of my Carthage work is on my mac at work. I haven’t used it on my personal MacBook in a while. When I attempted to use it again, it complained that I had a version that was too old. So, now was a good time to upgraded it.

$ carthage version
Please update to the latest Carthage version: 0.33.0. You currently are on 0.28.0
0.28.0

$ brew upgrade carthage

Output:

Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
allureofthestars    cfn-lint            cubelib             itk                 leela-zero          scws
boringtun           cpp-gsl             cypher-shell        ktlint              otf2
==> Updated Formulae
ammonite-repl            erlang                   gtranslator              meson                    restic
ansifilter               erlang@20                hebcal                   mingw-w64                rke
apache-geode             ethereum                 hugo                     minio                    ruby-build
.
.
.

Error: carthage not installed

Doh! Nothing is going to be easy, ever! Now, I remembered, the last time I installed Carthage was with using the .pkg file that I downloaded. This way was quick but wasn’t cool. The better way is:

$ brew install carthage

Toward the end of installation, I got this error!

...
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/carthage
Target /usr/local/bin/carthage
already exists. You may want to remove it:
  rm '/usr/local/bin/carthage'

To force the link and overwrite all conflicting files:
  brew link --overwrite carthage

To list all files that would be deleted:
  brew link --overwrite --dry-run carthage

Possible conflicting files are:
/usr/local/bin/carthage
==> Caveats

Ok, let’s fix this. I deleted /usr/local/bin/carthage and re-link carthage again.

$ brew link carthage
Linking /usr/local/Cellar/carthage/0.33.0... 4 symlinks created

$ carthage version
0.33.0

Yeh!

Phew! Next is the pods.

Installing Cocoapods

First, Check my Pods.

$ pod
-bash: pod: command not found

Again, I could quickly install a package for Mac - but this wasn’t cool. A better way, is via a command-line. Cocoapods uses RubyGem gem, a package management in Ruby. Let’s check it.

$ gem --version
2.5.2.3

That’s cool. Let’s start the installation.

$ gem install cocoapods
Fetching: cocoapods-1.6.1.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

Oh! Cocoapods installation actually modifies files outside the log-in user’s home directory. You will need root access to install it.

$ sudo gem install cocoapods

Password:
Fetching: ruby-macho-1.4.0.gem (100%)
Successfully installed ruby-macho-1.4.0
Fetching: nap-1.1.0.gem (100%)
Successfully installed nap-1.1.0
Fetching: gh_inspector-1.1.3.gem (100%)
Successfully installed gh_inspector-1.1.3
...
Done installing documentation for ruby-macho, nap, gh_inspector, fourflusher, escape, colored2, concurrent-ruby, i18n, thread_safe, tzinfo, activesupport, atomos, CFPropertyList, claide, nanaimo, xcodeproj, molinillo, cocoapods-try, netrc, cocoapods-trunk, cocoapods-stats, cocoapods-search, cocoapods-plugins, cocoapods-downloader, cocoapods-deintegrate, fuzzy_match, cocoapods-core, cocoapods after 44 seconds
28 gems installed

That was smooth! Depends on your internet speed, It took mine about 3-4 minutes. Checking the installation.

$ pod --version
1.6.1

Yes! Yes! Now we are ready to play with them.