Friday, February 19, 2016

Using Carthage for iOS Project Dependency Management

Pertama kali saya mulai mengembangkan aplikasi iOS, saya belum mengenal dependency management yang baik. Ketika saya membutuhkan library pihak ketiga dalam project saya, saya menggunakan cara tradisional yaitu download dan include library yang diinginkan ke dalam project utama saya. Cara ini cukup efektif dan segera mudah dimengerti, namun akan mempersulit pengembangan selanjutnya. Setiap ada update dari library yang kita include, kita harus men-download kembali library tersebut. Apabila ada update yang membuat project kita tidak berjalan kita harus rollback kembali dan memilih versi yang tepat.

Menggunakan dependency management untuk iOS project development memiliki beberapa keuntungan dibanding cara tradisional (download dan copy project dari Github). Dependency management dapat mempermudah proses download library yang sesuai dengan yang kita inginkan tanpa harus satu per satu ke halaman Github dari setiap library yang diperlukan, klik download, dan include masing-masing libraray ke dalam project utama. Selain itu kita dapat mengunci versi yang kita perlukan, untuk mencegah kemungkinan code tidak berjalan ketika ada update pada salah satu library-nya.

Ada 2 dependency manager yang biasa digunakan di iOS development, yaitu CocoaPods dan Carthage. Pada kesempatan kali ini saya akan mencoba membahas bagaimana cara menggunakan Carthage, karena saya menggunakan bahasa Swift untuk pengembangan aplikasi. Untuk library yang akan digunakan saya akan menggunakan library untuk mempermudah pemanggilan Web service yaitu Alamofire.

Instalasi Carthage


Ada 2 cara menginstalasi Carthage, yaitu menggunakan Homebrew atau menggunakan package installer. Saya akan menggunakan Homebrew, karena sudah terinstall di MacBook Pro saya. Jalankan 2 perintah berikut di Terminal.
$ brew update
$ brew install carthage

Persiapan Project


Buat project baru pada Xcode, pilih template apa saja. Untuk keperluan artikel ini, saya akan menggunakan template Single View Application.
Xcode New Project Wizard Page 1

Masukkan nama project, dan buat project tersebut.
Xcode New Project Wizard Page 2

Buat sebuah file Cartfile di folder yang sama dengan file .xcodeproj, isi dengan konfigurasi dependency ke library Alamofire seperti berikut ini:
# Depends on Alamofire 3.0
github "Alamofire/Alamofire" ~> 3.0

Simpan file Cartfile, dan lakukan dependency update dengan menjalankan perintah berikut pada folder tersebut dan perhatikan Carthage akan mendownload semua dependency yang diperlukan untuk platform iOS ke dalam direktori Carthage/Checkouts. Selain itu perintah tersebut akan melakukan kompilasi library Alamofire ke dalam direktori Carthage/Build.
$ carthage update --platform iOS
*** Fetching Alamofire
*** Checking out Alamofire at "3.2.0"
*** xcodebuild output can be found in /var/folders/qy/lcpj5ypn1_7_gbfyv5c9dlq40000gn/T/carthage-xcodebuild.119QZ8.log
*** Building scheme "Alamofire iOS" in Alamofire.xcworkspace

Buka kembali project pada Xcode, pilih project root SimpleRestCallDemoApp dan pilih target SimpleRestCallDemoApp. Tambahkan file Alamofire.framework yang telah dikompilasi ke dalam Linked Frameworks and Binaries. Pilih Add Other untuk mengakses langsung dari Finder. Setelah selesai tampilannya akan menjadi seperti ini.
Xcode Linked Frameworks

Untuk memudahkan dalam proses submit aplikasi ke Apple App Store, saran dari [3] adalah dengan menambahkan Run Script pada Build Phases seperti berikut ini.
Xcode Build Phases Run Script

Selesai, kita sekarang siap untuk menggunakan framework Alamofire di dalam project kita.

Referensi

[1] https://github.com/Carthage/Carthage
[2] https://github.com/Alamofire/Alamofire
[3] http://www.raywenderlich.com/109330/carthage-tutorial-getting-started