CocoaPods Trunk — layanan server ekosistem CocoaPods yang dirancang untuk publikasi, hosting, dan manajemen pustaka pod. Trunk menggantikan mekanisme publikasi lama melalui repositori GitHub dan fork, menyediakan infrastruktur terpusat dengan autentikasi, manajemen sesi, versioning, dan validasi sebelum publikasi. Pengembang iOS dan macOS menggunakan pod trunk push untuk mengirim pustaka ke registry publik.
Poin Utama
pod trunk register dengan konfirmasi emailpod trunk push melalui validasi, linting, dan unggah ke registrypod trunk me, pod trunk add-owner, pod trunk deprecate untuk administrasi podCocoaPods Trunk — adalah infrastruktur server yang diluncurkan pada tahun 2015 untuk publikasi terpusat pustaka pod. Sebelum hadirnya Trunk, setiap pod didistribusikan melalui repositori Git: pengembang harus membuat repositori publik, menambahkan file podspec, dan mengirim Pull Request ke repositori pusat CocoaPods/Specs. Pendekatan ini memerlukan moderasi manual dan menyebabkan keterlambatan dalam publikasi pembaruan.
Trunk memecahkan masalah ini dengan menyediakan API terpadu untuk publikasi, pembaruan, dan penghapusan pod. Layanan ini mencakup empat komponen utama:
Arsitektur Trunk dibangun di atas stack Ruby on Rails dengan database PostgreSQL. Layanan ini menggunakan HTTP API dengan format JSON untuk semua operasi, dan klien CLI pod trunk adalah bagian dari distribusi CocoaPods dan diinstal bersama gem utama cocoapods.
Saat ini, lebih dari 100.000 pod telah dipublikasikan melalui Trunk, dengan total unduhan melebihi 50 miliar. Setiap hari, layanan ini memproses ribuan permintaan publikasi dan pembaruan pustaka dari pengembang di seluruh dunia.
Sebelum mempublikasikan pod, Anda harus mendaftar di Trunk. Prosesnya terdiri dari satu langkah — perintah pod trunk register:
pod trunk register your@email.com 'Your Name' --description='MacBook Pro, pengembangan iOS'Setelah perintah dijalankan, email dengan tautan konfirmasi dikirim ke alamat yang ditentukan. Mengklik tautan akan mengaktifkan akun dan membuat token sesi yang disimpan di keychain sistem (Keychain di macOS, gnome-keyring atau yang setara di Linux). Token digunakan secara otomatis di semua operasi pod trunk berikutnya.
Parameter --description bersifat opsional tetapi disarankan — membantu mengidentifikasi sesi saat melihat sesi aktif melalui pod trunk me. Jika Anda bekerja di beberapa mesin (stasiun kerja, server CI), deskripsi memungkinkan Anda membedakan satu sesi dari sesi lainnya.
Untuk memeriksa status autentikasi, gunakan perintah berikut:
pod trunk meKeluaran menunjukkan email, nama, daftar pod Anda (jika sudah pernah mempublikasikan) dan sesi aktif. Contoh hasil:
- Name: Your Name
- Email: your@email.com
- Since: 2024-03-15 10:30 UTC
- Pods:
- MyLibrary
- AnotherPod
- Sessions:
- 2024-03-15 10:30 UTC - MacBook Pro, pengembangan iOSDi server CI (GitHub Actions, GitLab CI, Jenkins), autentikasi dilakukan melalui token yang diteruskan melalui variabel lingkungan COCOAPODS_TRUNK_TOKEN. Token dapat diperoleh dengan perintah:
pod trunk me --token-onlyToken ini disimpan di pengaturan CI sebagai variabel rahasia dan digunakan pada tahap publikasi tanpa registrasi ulang. Contoh untuk GitHub Actions:
env:
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}Penting: token memberikan akses penuh ke manajemen pod yang terikat pada akun. Jangan pernah mempublikasikannya di repositori publik atau memberikannya kepada pihak ketiga. Jika token dikompromikan, token dapat dicabut melalui pod trunk remove-session atau semua sesi dapat dihapus melalui panel manajemen di situs web CocoaPods.
File podspec (.podspec atau .podspec.json) — adalah manifes pustaka yang berisi metadata, dependensi, informasi tentang platform, dan kode sumber. Trunk menggunakan file ini untuk validasi dan registrasi pod. Podspec minimal untuk publikasi terlihat seperti ini:
Pod::Spec.new do |s|
s.name = 'MyLibrary'
s.version = '0.1.0'
s.summary = 'Deskripsi singkat pustaka'
s.description = 'Deskripsi terperinci dengan penjelasan kemampuan'
s.homepage = 'https://github.com/username/MyLibrary'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Your Name' => 'your@email.com' }
s.source = { :git => 'https://github.com/username/MyLibrary.git', :tag => s.version.to_s }
s.source_files = 'Sources/**/*.{swift,h,m}'
s.platform = :ios, '12.0'
s.swift_version = '5.7'
endBidang utama podspec:
MAJOR.MINOR.PATCH. Trunk tidak menerima publikasi ulang versi yang sama — Anda harus menaikkan nomornya.MIT, Apache-2.0, BSD atau lisensi terbuka lainnya.Sebelum publikasi, podspec harus diperiksa kebenarannya menggunakan linter:
pod lib lint MyLibrary.podspecLinter memeriksa sintaksis, keberadaan bidang wajib, kebenaran jalur file, dan keterpecahan dependensi. Jika dalam proses linting menggunakan sumber privat (private specs), tambahkan flag --sources. Untuk melewati unduhan jaringan (hanya pemeriksaan lokal), gunakan flag --local-only.
Perintah utama untuk mempublikasikan pod — pod trunk push. Perintah ini mengirim file podspec ke server Trunk, di mana ia menjalani validasi penuh dan didaftarkan di registry publik. Sintaksis:
pod trunk push MyLibrary.podspecFlag --allow-warnings mengizinkan publikasi jika ada peringatan. Secara default, peringatan apa pun (warnings) memblokir publikasi. Jika pustaka memiliki peringatan yang diketahui yang tidak memengaruhi fungsionalitas, Anda dapat menggunakan flag ini. Penting: kesalahan (errors) selalu memblokir publikasi, terlepas dari flag.
Flag --synchronous membuat permintaan sinkron — terminal menunggu validasi selesai di server. Secara default, perintah mengembalikan kontrol segera setelah pengiriman, dan server memproses publikasi secara asinkron. Mode sinkron berguna di CI/CD ketika langkah pipeline berikutnya bergantung pada keberhasilan publikasi.
Flag --skip-import-validation melewatkan pemeriksaan impor pustaka ke proyek pengujian. Ini mempercepat publikasi, tetapi tidak menjamin bahwa pustaka benar-benar dikompilasi. Gunakan flag ini hanya jika Anda yakin dengan kebenaran build.
Contoh publikasi dengan opsi tipikal:
pod trunk push MyLibrary.podspec \
--allow-warnings \
--synchronous \
--skip-import-validationSetelah publikasi berhasil, Trunk mengembalikan JSON dengan detail:
Congrats
MyLibrary (0.1.0) successfully published
Pod URL: https://cocoapods.org/pods/MyLibraryPustaka tersedia untuk instalasi melalui Podfile proyek iOS atau macOS mana pun. Biasanya data di indeks pencarian CocoaPods diperbarui dalam beberapa menit, tetapi dalam kasus yang jarang terjadi, indeksasi bisa memakan waktu hingga satu jam.
Batasan penting: versi pod yang telah dipublikasikan tidak dapat dihapus. Ini dilakukan untuk mencegah kerusakan pada proyek yang sudah menggunakan versi tersebut. Jika publikasi berakhir dengan kesalahan, Anda dapat mempublikasikan versi berikutnya dengan koreksi, tetapi pengembalian tidak dimungkinkan. Pengecualian — pod trunk delete, hanya tersedia untuk karyawan CocoaPods dan diterapkan dalam kasus ekstrem (pelanggaran lisensi, kode berbahaya).
CocoaPods Trunk menyediakan beberapa perintah untuk mengelola pod yang dipublikasikan:
Untuk mentransfer hak publikasi pod ke pengembang lain, gunakan perintah berikut:
pod trunk add-owner MyLibrary developer@email.comSetelah dijalankan, pemilik baru mendapatkan akses penuh ke manajemen pod: publikasi versi baru, menambah dan menghapus pemilik lain, menandai pod sebagai usang. Pemilik dapat berupa pengguna Trunk mana pun yang terdaftar — registrasi awal wajib dilakukan.
Jika pengembang meninggalkan proyek atau tidak lagi memiliki akses ke pod:
pod trunk remove-owner MyLibrary developer@email.comPemilik hanya dapat dihapus oleh pemilik saat ini. Pemilik terakhir pod tidak dapat dihapus — pertama-tama Anda harus menambahkan yang baru. Ini mencegah situasi di mana pod menjadi tidak memiliki pemilik.
Jika pustaka tidak lagi didukung, pustaka dapat ditandai sebagai usang (deprecated). Ini tidak menghapus pod dari registry, tetapi menambahkan peringatan kepada pengguna saat instalasi:
pod trunk deprecate MyLibrarySecara opsional, pod pengganti dapat ditentukan:
pod trunk deprecate MyLibrary --in-favor-of=NewLibrarySaat menginstal pod usang, CocoaPods menampilkan peringatan di terminal dan merekomendasikan untuk beralih ke pengganti yang ditentukan. Ini adalah cara yang benar untuk mengakhiri dukungan pustaka tanpa mengganggu build proyek yang ada.
Informasi tentang pod tersedia melalui perintah pod trunk info:
pod trunk info MyLibraryPerintah ini menampilkan semua versi pod, tanggal publikasi, daftar pemilik, dan status (aktif/usang). Untuk melihat detail versi tertentu, gunakan pod spec cat MyLibrary 0.1.0.
Saat bekerja dengan Trunk, pengembang sering menghadapi kesalahan umum. Mari kita bahas yang paling sering terjadi:
Gejala: [!] Authentication failed. You need to register a session first.
Penyebab: Token sesi tidak ada atau kedaluwarsa. Token memiliki masa berlaku terbatas (secara default 30 hari tanpa aktivitas).
Solusi: Jalankan ulang pod trunk register your@email.com 'Your Name'. Jika menggunakan CI, periksa keaktualan variabel COCOAPODS_TRUNK_TOKEN dan buat token baru jika perlu.
Gejala: [!] You have already pushed version 0.1.0 for MyLibrary.
Penyebab: Upaya mempublikasikan ulang versi yang sudah ada. Trunk tidak mengizinkan penimpaan versi.
Solusi: Naikkan versi di podspec sesuai dengan versioning semantik. Jika Anda membuat kesalahan di podspec, publikasikan versi berikutnya dengan koreksi.
Gejala: [!] The spec did not pass validation. ERROR | [iOS] file patterns: Source files did not match any file.
Penyebab: Jalur ke file sumber di bidang source_files salah ditentukan.
Solusi: Periksa jalur di podspec, jalankan pod lib lint secara lokal sampai semua kesalahan teratasi, lalu ulangi publikasi. Gunakan pola glob: Classes/**/*.{h,m}, Sources/MyLibrary/**/*.swift.
Gejala: [!] Connection to trunk.cocoapods.org failed. Timeout.
Penyebab: Masalah jaringan atau server Trunk tidak tersedia sementara.
Solusi: Periksa ketersediaan server: curl -I https://trunk.cocoapods.org. Jika server merespons, ulangi perintah dalam beberapa menit. Mungkin IP Anda diblokir — coba dari koneksi lain atau melalui VPN.
Gejala: [!] You do not have permission to push to MyLibrary.
Penyebab: Anda bukan pemilik pod. Ini terjadi jika seseorang sudah mendaftarkan pod dengan nama tersebut.
Solusi: Hubungi pemilik pod saat ini (dapat diketahui melalui pod trunk info MyLibrary) dan minta untuk menambahkan Anda melalui pod trunk add-owner. Jika nama pod sudah digunakan, pertimbangkan nama alternatif.
Pertanyaan yang Sering Diajukan
Cara lama memerlukan Pull Request manual ke repositori CocoaPods/Specs. Trunk mengotomatiskan proses: Anda menjalankan satu perintah pod trunk push, dan server sendiri memeriksa podspec, menambahkannya ke registry, dan memperbarui indeks pencarian. Trunk juga menambahkan manajemen akses (banyak pemilik), token sesi, dan penyimpanan metadata terpusat.
Ini tidak mungkin — Trunk melarang penghapusan versi yang dipublikasikan untuk menjaga integritas dependensi. Jika versi mengandung kesalahan kritis, publikasikan versi baru dengan koreksi dan tandai versi bermasalah sebagai usang melalui pod trunk deprecate. Penghapusan total hanya tersedia untuk administrator CocoaPods dalam kasus luar biasa.
Tidak, bidang s.author harus menyertakan email. Trunk menggunakannya untuk menghubungkan pod ke akun pemilik. Alamat harus sesuai dengan email yang ditentukan saat registrasi melalui pod trunk register. Jika email di podspec berbeda, publikasi akan ditolak.
Biasanya pod muncul di pencarian CocoaPods dalam 5–15 menit. Dalam kasus yang jarang terjadi, indeksasi bisa memakan waktu hingga satu jam. Pod tersedia untuk instalasi melalui Podfile segera setelah respons berhasil dari Trunk — Anda hanya perlu menentukan versi yang tepat atau rentang di Podfile.
Jika Anda memiliki sesi aktif (token belum kedaluwarsa), ubah email melalui pod trunk register new@email.com — registrasi baru akan menghubungkan pod ke alamat baru. Jika sesi kedaluwarsa, hubungi dukungan CocoaPods melalui GitHub Issues. Bukti kepemilikan pod dapat berupa kemampuan untuk membuat commit di repositori Git pod.
Kesimpulan
pod trunk register dengan konfirmasi email dan penyimpanan otomatis token sesipod trunk push menjalani validasi di server; versi yang dipublikasikan tidak dapat dihapuspod trunk add-owner dan pod trunk remove-ownerCOCOAPODS_TRUNK_TOKEN untuk publikasi otomatis di pipelineKami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga