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 ![][Carthage Logo] 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 ![][Cocoapods Logo] 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. [Carthage on Github]: https://github.com/Carthage/Carthage "Carthage on Github" [Cocoapods on Github]: https://github.com/CocoaPods/CocoaPods "Cocoapods on Github" [Cocoapods Website]: https://cocoapods.org/ "Cocoapods Website" [Carthage Logo]: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1fzf1Ks_ljqGWNgehHwCqHB-MIIY8vA-3p1Bas7Q7V5N2FE0MwG2JTRjHdlZnAw6QdaD2zDDM6_ikqqLLA7oqcmcGH3vJjVYOKIC2D5hXFz12HOEjbO1BDcGhcOQBaVDT-fgKuFd9bs/s1600/carthage-logo-small.png [Cocoapods Logo]: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNApdFLMjX1ajtwTdiTGpgCOqKlzwbIisfyzqgfG8yf8gkqezKXzk_AeWJvZ5TxocBTlSmVzkWrBb5t-PZ9iGs3sxLqKM5InU3D-ddht15k-FuMKmlN5BhE3-TiYfjEM610XgALyiRfbg/s320/cocoapods-logo-small.png
No comments:
Post a Comment