Carthage dimaksudkan sebagai cara paling sederhana untuk menambahkan kerangka kerja ke aplikasi Kakao Anda.
Carthage membangun dependensi Anda dan memberi Anda kerangka kerja biner, namun Anda tetap memegang kendali penuh atas struktur dan penyiapan proyek Anda. Carthage tidak secara otomatis mengubah file proyek atau pengaturan build Anda.
Dapatkan Carthage dengan menjalankan brew install carthage
atau pilih metode instalasi lain
Buat Cartfile di direktori yang sama dengan .xcodeproj
atau .xcworkspace
Anda
Cantumkan dependensi yang diinginkan di Cartfile, misalnya:
github "Alamofire/Alamofire" ~> 5.5
Jalankan carthage update --use-xcframeworks
File Cartfile.resolved
dan direktori Carthage
akan muncul di direktori yang sama tempat .xcodeproj
atau .xcworkspace
Anda berada
Seret bundel .xcframework
yang dibuat dari Carthage/Build
ke bagian "Frameworks and Libraries" pada proyek Xcode aplikasi Anda.
Jika Anda menggunakan Carthage untuk suatu aplikasi, pilih "Sematkan & Tanda Tangan", jika tidak, "Jangan Sematkan".
Untuk panduan mendalam, baca terus dari Menambahkan kerangka kerja ke aplikasi
Ada beberapa opsi untuk menginstal Carthage:
Pemasang: Unduh dan jalankan file Carthage.pkg
untuk rilis terbaru, lalu ikuti petunjuk di layar. Jika Anda menginstal pkg melalui CLI, Anda mungkin perlu menjalankan sudo chown -R $(whoami) /usr/local
terlebih dahulu.
Homebrew: Anda dapat menggunakan Homebrew dan menginstal alat carthage
di sistem Anda hanya dengan menjalankan brew update
dan brew install carthage
. (catatan: jika sebelumnya Anda menginstal Carthage versi biner, Anda harus menghapus /Library/Frameworks/CarthageKit.framework
).
MacPorts: Anda dapat menggunakan MacPorts dan menginstal alat carthage
di sistem Anda hanya dengan menjalankan sudo port selfupdate
dan sudo port install carthage
. (catatan: jika sebelumnya Anda menginstal Carthage versi biner, Anda harus menghapus /Library/Frameworks/CarthageKit.framework
).
Dari sumber: Jika Anda ingin menjalankan versi pengembangan terbaru (yang mungkin sangat tidak stabil atau tidak kompatibel), cukup kloning cabang master
repositori, lalu jalankan make install
. Membutuhkan Xcode 10.0 (Swift 4.2).
Setelah Anda menginstal Carthage, Anda dapat mulai menambahkan kerangka kerja ke proyek Anda. Perhatikan bahwa Carthage hanya mendukung kerangka kerja dinamis, yang hanya tersedia di iOS 8 atau lebih baru (atau versi OS X apa pun).
carthage update --use-xcframeworks
. Ini akan mengambil dependensi ke dalam folder Carthage/Checkouts dan membangun masing-masing dependensi atau mengunduh XCFramework yang telah dikompilasi sebelumnya.Kami menganjurkan penggunaan XCFrameworks mulai versi 0.37.0 (Januari 2021), dan mewajibkan XCFrameworks saat membuat di Apple Silicon Mac. Beralih dari bundel kerangka kerja terpisah ke XCFrameworks memerlukan beberapa perubahan pada proyek Anda:
Carthage/Build
Anda untuk menghapus bundel kerangka kerja yang ada.carthage build --use-xcframeworks
. Argumen lain yang Anda buat dapat diberikan seperti biasa.carthage copy-frameworks
target, jika ada.Ketidakcocokan Xcode 12+ : Platform multi-arsitektur tidak didukung saat membuat bundel kerangka kerja di Xcode 12 dan yang lebih baru. Lebih suka membangun dengan XCFrameworks. Jika Anda perlu membuat bundel kerangka kerja terpisah, gunakan file solusi xcconfig.
carthage update --platform macOS
. Ini akan mengambil dependensi ke dalam folder Carthage/Checkouts dan membangun masing-masing dependensi atau mengunduh kerangka kerja yang telah dikompilasi sebelumnya.Selain itu, Anda harus menyalin simbol debug untuk debugging dan pelaporan kerusakan pada OS X.
Buat Cartfile yang mencantumkan kerangka kerja yang ingin Anda gunakan dalam proyek Anda.
Jalankan carthage update
. Ini akan mengambil dependensi ke folder Carthage/Checkouts, lalu membangun masing-masing dependensi atau mengunduh kerangka kerja yang telah dikompilasi sebelumnya.
Buka tab Pengaturan umum target aplikasi Anda. Untuk Xcode 11.0 dan lebih tinggi, di bagian "Frameworks, Libraries, and Embedded Content", seret dan lepas setiap framework yang ingin Anda gunakan dari folder Carthage/Build di disk. Kemudian, di bagian "Sematkan", pilih "Jangan Sematkan" dari menu tarik-turun untuk setiap item yang ditambahkan. Untuk Xcode 10.x dan lebih rendah, di bagian "Linked Frameworks and Libraries", seret dan lepas setiap kerangka yang ingin Anda gunakan dari folder Carthage/Build di disk.
Pada tab pengaturan Build Phases target aplikasi Anda, klik ikon + dan pilih New Run Script Phase . Buat Run Script di mana Anda menentukan shell Anda (misal: /bin/sh
), tambahkan konten berikut ke area skrip di bawah shell:
/usr/local/bin/carthage copy-frameworks
Buat file bernama input.xcfilelist
dan file bernama output.xcfilelist
Tambahkan jalur ke kerangka kerja yang ingin Anda gunakan ke input.xcfilelist
Anda. Misalnya:
$(SRCROOT)/Carthage/Build/iOS/Result.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
Tambahkan jalur ke kerangka kerja yang disalin ke output.xcfilelist
. Misalnya:
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework
Dengan file keluaran ditentukan di samping file masukan, Xcode hanya perlu menjalankan skrip ketika file masukan telah berubah atau file keluaran hilang. Ini berarti pembangunan kotor akan lebih cepat bila Anda belum membangun kembali kerangka kerja dengan Carthage.
Tambahkan input.xcfilelist
ke bagian "Daftar File Input" pada fase skrip menjalankan Carthage
Tambahkan output.xcfilelist
ke bagian "Daftar File Output" pada fase skrip menjalankan Carthage
Skrip ini mengatasi bug pengiriman App Store yang dipicu oleh biner universal dan memastikan bahwa file terkait bitcode dan dSYM yang diperlukan disalin saat pengarsipan.
Dengan informasi debug disalin ke direktori produk yang dibangun, Xcode akan dapat menyimbolkan jejak tumpukan setiap kali Anda berhenti di breakpoint. Ini juga akan memungkinkan Anda menelusuri kode pihak ketiga di debugger.
Saat mengarsipkan aplikasi Anda untuk dikirimkan ke App Store atau TestFlight, Xcode juga akan menyalin file-file ini ke subdirektori dSYMs dari bundel .xcarchive
aplikasi Anda.
Dalam prosesnya, Carthage akan membuat beberapa artefak bangunan. Yang paling penting adalah file Cartfile.resolved, yang mencantumkan versi yang sebenarnya dibuat untuk setiap kerangka kerja. Pastikan untuk mengkomit Cartfile.resolved Anda , karena siapa pun yang menggunakan proyek ini akan memerlukan file tersebut untuk membangun versi kerangka kerja yang sama.
Anda dapat menambahkan fase Jalankan Skrip untuk memperingatkan Anda secara otomatis ketika salah satu dependensi Anda kedaluwarsa.
Build Phases
target aplikasi Anda, klik ikon +
dan pilih New Run Script Phase
. Buat Run Script di mana Anda menentukan shell Anda (misal: /bin/sh
), tambahkan konten berikut ke area skrip di bawah shell: /usr/local/bin/carthage outdated --xcode-warnings 2> /dev/null
Carthage akan memeriksa untuk memastikan bahwa kerangka kerja Swift (dan campuran Objective-C/Swift) yang diunduh dibuat dengan versi Swift yang sama yang digunakan secara lokal. Jika ada ketidakcocokan versi, Carthage akan melanjutkan pembuatan kerangka kerja dari sumber. Jika kerangka kerja tidak dapat dibangun dari sumbernya, Carthage akan gagal.
Karena Carthage menggunakan keluaran xcrun swift --version
untuk menentukan versi Swift lokal, pastikan untuk menjalankan perintah Carthage dengan rantai alat Swift yang ingin Anda gunakan. Untuk banyak kasus penggunaan, tidak diperlukan tambahan apa pun. Namun, misalnya, jika Anda sedang membangun proyek Swift 2.3 menggunakan Xcode 8.x, salah satu pendekatan untuk menentukan swift
default untuk carthage bootstrap
adalah dengan menggunakan perintah berikut:
TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage bootstrap
Setelah Anda menyelesaikan langkah-langkah di atas dan menerapkan perubahan, pengguna proyek lainnya hanya perlu mengambil repositori dan menjalankan carthage bootstrap
untuk memulai dengan kerangka kerja yang telah Anda tambahkan.
Menggunakan Carthage untuk dependensi target arbitrer apa pun cukup mirip dengan menggunakan Carthage untuk suatu aplikasi. Perbedaan utamanya terletak pada bagaimana kerangka kerja sebenarnya diatur dan ditautkan di Xcode.
Karena target pengujian unit tidak memiliki bagian Kerangka dan Pustaka Tertaut di tab Pengaturan umum , Anda harus menyeret kerangka kerja yang dibangun ke tahap pembuatan Tautan Biner Dengan Perpustakaan .
Di Target pengujian di bawah tab Pengaturan Pembuatan , tambahkan @loader_path/Frameworks
ke Jalur Pencarian Runpath jika belum ada.
Dalam kasus yang jarang terjadi, Anda mungkin juga ingin menyalin setiap dependensi ke dalam produk build (misalnya, untuk menyematkan dependensi dalam kerangka luar, atau memastikan dependensi ada dalam paket pengujian). Untuk melakukannya, buat fase pembuatan Salin File baru dengan tujuan Frameworks , lalu tambahkan juga referensi kerangka kerja di sana. Anda tidak boleh menggunakan perintah carthage copy-frameworks
karena paket pengujian tidak perlu menghapus kerangka kerja, dan menjalankan instance copy-frameworks
secara bersamaan (dengan build paralel diaktifkan) tidak didukung.
Jika Anda telah memodifikasi Cartfile Anda, atau Anda ingin memperbarui ke versi terbaru dari setiap kerangka kerja (sesuai dengan persyaratan yang Anda tentukan), cukup jalankan kembali perintah carthage update
.
Jika Anda hanya ingin memperbarui satu, atau dependensi tertentu, teruskan dependensi tersebut sebagai daftar yang dipisahkan spasi ke perintah update
. misalnya
carthage update Box
atau
carthage update Box Result
Penulisan ulang logika untuk meningkatkan kerangka kerja dilakukan dengan tujuan meningkatkan kecepatan dan mengurangi penggunaan memori. Saat ini merupakan fitur keikutsertaan. Ini dapat digunakan dengan meneruskan --new-resolver
ke perintah update, misalnya,
carthage update --new-resolver Box
Jika Anda mengalami masalah kinerja selama pembaruan, cobalah penyelesai baru
Jika kerangka kerja yang ingin Anda tambahkan ke proyek Anda memiliki dependensi yang tercantum secara eksplisit dalam Cartfile, Carthage akan secara otomatis mengambilnya untuk Anda. Anda kemudian harus menyeretnya sendiri ke dalam proyek Anda dari folder Carthage/Build.
Jika kerangka kerja yang tertanam dalam proyek Anda memiliki ketergantungan pada kerangka kerja lain, Anda harus menautkannya ke target aplikasi (meskipun target aplikasi tidak memiliki ketergantungan pada kerangka kerja tersebut dan tidak pernah menggunakannya).
Secara default, Carthage akan langsung memeriksa file sumber dependensi ke dalam folder proyek Anda, membiarkan Anda mengkomit atau mengabaikannya sesuai pilihan Anda. Jika Anda ingin dependensi tersedia sebagai submodul Git (mungkin agar Anda dapat melakukan dan mendorong perubahan di dalamnya), Anda dapat menjalankan carthage update
atau carthage checkout
dengan flag --use-submodules
.
Ketika dijalankan dengan cara ini, Carthage akan menulis ke file .gitmodules
dan .git/config
repositori Anda, dan secara otomatis memperbarui submodul ketika versi dependensi berubah.
Jika Anda ingin mengerjakan dependensi selama pengembangan, dan ingin dependensi tersebut dibangun kembali secara otomatis saat Anda membangun proyek induk, Anda dapat menambahkan fase build Run Script yang memanggil Carthage seperti ini:
/usr/local/bin/carthage build --platform " $PLATFORM_NAME " --project-directory " $SRCROOT "
Perhatikan bahwa Anda harus menggunakan submodul sebelum melakukan ini, karena checkout biasa tidak boleh diubah secara langsung.
Secara default, Carthage akan membangun kembali ketergantungan terlepas dari apakah versi penyelesaiannya sama seperti sebelumnya. Melewati --cache-builds
akan menyebabkan carthage menghindari pembangunan kembali ketergantungan jika bisa. Lihat informasi pada file versi untuk detail tentang bagaimana Carthage melakukan caching ini.
Catatan: Saat ini --cache-builds
tidak kompatibel dengan --use-submodules
. Menggunakan keduanya akan mengakibatkan copy pekerjaan dan perubahan yang dilakukan pada ketergantungan submodul Anda tidak dibangun kembali dengan benar. Lihat #1785 untuk detailnya.
Penyelesaian otomatis perintah dan opsi Carthage tersedia seperti yang didokumentasikan dalam Penyelesaian Bash/Zsh/Fish.
Carthage hanya secara resmi mendukung kerangka kerja dinamis . Kerangka kerja dinamis dapat digunakan pada versi OS X apa pun, namun hanya pada iOS 8 atau lebih baru . Selain itu, sejak versi 0.30.0 Carthage mendukung kerangka kerja statis .
Karena Carthage tidak memiliki daftar paket terpusat, dan tidak ada format spesifikasi proyek, sebagian besar kerangka kerja harus dibuat secara otomatis .
Persyaratan spesifik dari setiap proyek kerangka kerja tercantum di bawah ini.
Carthage hanya akan membuat skema Xcode yang dibagikan dari .xcodeproj
Anda. Anda dapat melihat apakah semua skema yang Anda inginkan berhasil dibangun dengan menjalankan carthage build --no-skip-current
, lalu memeriksa folder Carthage/Build.
Jika skema penting tidak dibuat saat Anda menjalankan perintah itu, buka Xcode dan pastikan skema tersebut ditandai sebagai Shared , sehingga Carthage dapat menemukannya.
Jika Anda mengalami kegagalan build di carthage build --no-skip-current
, coba jalankan xcodebuild -scheme SCHEME -workspace WORKSPACE build
atau xcodebuild -scheme SCHEME -project PROJECT build
(dengan nilai sebenarnya) dan lihat apakah kegagalan yang sama terjadi di sana. Hal ini diharapkan dapat menghasilkan informasi yang cukup untuk menyelesaikan masalah.
Jika Anda menginstal beberapa versi alat pengembang Apple (misalnya Xcode beta), gunakan xcode-select
untuk mengubah versi mana yang digunakan Carthage.
Jika Anda masih tidak dapat membangun kerangka kerja Anda dengan Carthage, silakan buka terbitan dan kami akan dengan senang hati membantu!
Carthage menentukan versi kerangka kerja Anda yang tersedia dengan menelusuri tag yang dipublikasikan di repositori, dan mencoba menafsirkan setiap nama tag sebagai versi semantik. Misalnya, dalam tag v1.2
, versi semantiknya adalah 1.2.0.
Tag tanpa nomor versi apa pun, atau dengan karakter apa pun yang mengikuti nomor versi (misalnya, 1.2-alpha-1
) saat ini tidak didukung, dan akan diabaikan.
Carthage dapat secara otomatis menggunakan kerangka kerja bawaan, alih-alih membangun dari awal, jika kerangka tersebut dilampirkan ke Rilis GitHub di repositori proyek Anda atau melalui file definisi proyek biner.
Untuk menawarkan kerangka kerja bawaan untuk tag tertentu, biner untuk semua platform yang didukung harus di-zip menjadi satu arsip, dan arsip tersebut harus dilampirkan ke Rilis yang diterbitkan sesuai dengan tag tersebut. Lampiran harus menyertakan .framework
dalam namanya (misalnya, ReactiveCocoa.framework.zip
), untuk menunjukkan kepada Carthage bahwa lampiran tersebut berisi binari. Struktur direktori arsip adalah bentuk bebas tetapi kerangka kerja hanya akan muncul satu kali dalam arsip karena kerangka tersebut akan disalin ke Carthage/Build/<platform>
berdasarkan namanya (misalnya ReactiveCocoa.framework
).
Untuk menawarkan XCFrameworks bawaan, buatlah dengan --use-xcframeworks
dan ikuti proses yang sama untuk meng-zip semua XCFrameworks ke dalam satu arsip. Sertakan .xcframework
dalam nama lampiran. Mulai versi 0.38.0, Carthage lebih memilih mengunduh lampiran .xcframework
ketika --use-xcframeworks
diteruskan.
Anda dapat melakukan operasi pengarsipan dengan carthage itu sendiri menggunakan:
-carthage build --no-skip-current
-carthage archive YourFrameworkName
atau sebagai alternatif
carthage build --archive
Draf Rilis akan otomatis diabaikan, meskipun sesuai dengan tag yang diinginkan.
Travis-ci dapat digunakan untuk membuat dan mengunggah rilis yang diberi tag.
Instal travis CLI dengan gem install travis
Siapkan travis-ci untuk repositori Anda (Langkah 1 dan 2)
Buat file .travis.yml
di root repositori Anda berdasarkan template tersebut. Tetapkan FRAMEWORK_NAME
ke nilai yang benar.
Ganti PROJECT_PLACEHOLDER dan SCHEME_PLACEHOLDER
Jika Anda menggunakan ruang kerja alih-alih proyek, hapus baris xcode_project dan batalkan komentar pada baris xcode_workspace.
Proyek harus dalam format: MyProject.xcodeproj
Ruang kerja harus dalam format: MyWorkspace.xcworkspace
Jangan ragu untuk memperbarui nilai xcode_sdk
ke SDK lain, perhatikan bahwa pengujian pada iPhoneos SDK mengharuskan Anda mengunggah identitas penandatanganan kode
Untuk informasi lebih lanjut, Anda dapat mengunjungi travis docs untuk proyek objektif-c
language : objective-c
osx_image : xcode7.3
xcode_project : <PROJECT_PLACEHOLDER>
# xcode_workspace: <WORKSPACE_PLACEHOLDER>
xcode_scheme : <SCHEME_PLACEHOLDER>
xcode_sdk : iphonesimulator9.3
env :
global :
- FRAMEWORK_NAME=<THIS_IS_A_PLACEHOLDER_REPLACE_ME>
before_install :
- brew update
- brew outdated carthage || brew upgrade carthage
before_script :
# bootstrap the dependencies for the project
# you can remove if you don't have dependencies
- carthage bootstrap
before_deploy :
- carthage build --no-skip-current
- carthage archive $FRAMEWORK_NAME
Jalankan travis setup releases
, ikuti dokumentasi di sini
Perintah ini akan mengkodekan kredensial GitHub Anda ke dalam file .travis.yml
agar travis dapat mengunggah rilis ke GitHub.com. Saat diminta untuk mengunggah file, masukkan $FRAMEWORK_NAME.framework.zip
Perbarui bagian penerapan agar berjalan pada tag:
Di .travis.yml
temukan:
on :
repo : repo/repo
Dan tambahkan tags: true
dan skip_cleanup: true
:
skip_cleanup : true
on :
repo : repo/repo
tags : true
Hal ini akan memberi tahu travis untuk membuat penerapan ketika tag baru dimasukkan dan mencegah travis membersihkan file zip yang dihasilkan
Jika Anda menyematkan banyak kerangka kerja dinamis ke dalam aplikasi Anda, waktu peluncuran pra-utama mungkin akan cukup lambat. Carthage dapat membantu mengurangi hal ini dengan membangun kerangka dinamis Anda sebagai kerangka statis. Kerangka kerja statis dapat dihubungkan langsung ke aplikasi Anda atau digabungkan menjadi kerangka kerja dinamis yang lebih besar dengan beberapa modifikasi sederhana pada alur kerja Anda, yang dapat menghasilkan pengurangan drastis pada waktu peluncuran pra-utama.
Sejak versi 0.30.0 Proyek Carthage meluncurkan dukungan untuk kerangka kerja tertaut secara statis yang ditulis dalam Swift atau Objective-C, dukungan untuk itu telah diperkenalkan di Xcode 9.4. Namun perlu diingat bahwa secara spesifik dikatakan frameworks , oleh karena itu Darwin menggabungkan dengan ekstensi .framework dan arsip objek yang terhubung secara statis di dalamnya. Carthage saat ini tidak mendukung skema perpustakaan statis, juga tidak ada rencana untuk memperkenalkan dukungan mereka di masa depan.
Alur kerjanya hampir tidak berbeda:
Namun:
Lihat dokumen StaticFrameworks untuk detailnya.
Harap dicatat bahwa beberapa peringatan berlaku untuk pendekatan ini:
Ingin mengiklankan bahwa proyek Anda dapat digunakan dengan Carthage? Anda dapat menambahkan lencana kompatibilitas:
… ke README
Anda, cukup dengan memasukkan Markdown berikut:
[ ![ Carthage compatible ] ( https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat )] ( https://github.com/Carthage/Carthage )
Kerangka kerja yang dibuat sebelumnya tidak dapat di-debug menggunakan eksekusi langkah pada mesin lain selain kerangka kerja yang dibuat. carthage bootstrap/build/update --no-use-binaries
dapat memperbaiki masalah ini, namun untuk solusi yang lebih otomatis, lihat #924. Dupe rdar://23551273 jika Anda ingin Apple memperbaiki akar penyebab masalah ini.
Sebagian besar fungsi alat baris perintah carthage
sebenarnya dikemas dalam kerangka kerja bernama CarthageKit.
Jika Anda tertarik menggunakan Carthage sebagai bagian dari alat lain, atau mungkin memperluas fungsionalitas Carthage, lihat kode sumber CarthageKit untuk melihat apakah API tersebut sesuai dengan kebutuhan Anda.
CocoaPods adalah pengelola ketergantungan yang sudah lama ada untuk Kakao. Jadi mengapa Kartago diciptakan?
Pertama, CocoaPods (secara default) secara otomatis membuat dan memperbarui ruang kerja Xcode untuk aplikasi Anda dan semua dependensi. Carthage membangun biner kerangka kerja menggunakan xcodebuild
, tetapi menyerahkan tanggung jawab untuk mengintegrasikannya kepada pengguna. Pendekatan CocoaPods lebih mudah digunakan, sedangkan pendekatan Carthage fleksibel dan tidak mengganggu.
Tujuan CocoaPods tercantum dalam README-nya sebagai berikut:
… untuk meningkatkan kemampuan untuk ditemukan, dan keterlibatan dalam, perpustakaan sumber terbuka pihak ketiga, dengan menciptakan ekosistem yang lebih terpusat.
Sebaliknya, Carthage diciptakan sebagai pengelola ketergantungan yang terdesentralisasi . Tidak ada daftar utama proyek, sehingga mengurangi pekerjaan pemeliharaan dan menghindari titik utama kegagalan. Namun, penemuan proyek lebih sulit—pengguna harus menggunakan halaman Trending GitHub atau halaman serupa.
Proyek CocoaPods juga harus memiliki apa yang disebut file podspec, yang mencakup metadata tentang proyek dan menentukan cara pembuatannya. Carthage menggunakan xcodebuild
untuk membangun dependensi, alih-alih mengintegrasikannya ke dalam satu ruang kerja, Carthage tidak memiliki file spesifikasi serupa tetapi dependensi Anda harus menyertakan proyek Xcode mereka sendiri yang menjelaskan cara membuat produk mereka.
Pada akhirnya, kami menciptakan Carthage karena kami menginginkan alat yang paling sederhana—manajer ketergantungan yang menyelesaikan pekerjaan tanpa mengambil alih tanggung jawab Xcode, dan tanpa membuat pekerjaan tambahan untuk pembuat kerangka kerja. CocoaPods menawarkan banyak fitur luar biasa yang tidak akan pernah dimiliki Carthage, dengan mengorbankan kerumitan tambahan.
Carthage dirilis di bawah Lisensi MIT.
Foto latar header dirilis di bawah lisensi CC BY-NC-SA 2.0. Foto asli oleh Richard Mortel.