Apa Itu PLIST? Format Daftar Properti Apple
Jawaban Singkat: Wadah Terstruktur untuk Data Aplikasi
File PLIST—singkatan dari Property List—adalah format utama Apple untuk menyimpan pengaturan konfigurasi, preferensi, dan data yang diserialisasi di seluruh ekosistemnya: macOS, iOS, iPadOS, watchOS, dan tvOS. Akar-akarnya membentang jauh ke NeXTSTEP pada akhir tahun 1980-an, dan format ini tetap menjadi tulang punggung bagaimana aplikasi kamu mengingat pilihanmu, bagaimana layanan sistem memuat konfigurasinya, dan bagaimana proyek Xcode menjelaskan apa yang harus dibangun. Kamu memiliki ratusan file PLIST di Mac-mu saat ini, entah kamu menyadarinya atau tidak. Buka Terminal dan jalankan `ls ~/Library/Preferences/`. Kamu akan melihat daftar panjang file seperti `com.apple.finder.plist`, `com.apple.dock.plist`, dan banyak lainnya—satu untuk hampir setiap aplikasi yang pernah kamu gunakan. File-file sederhana ini yang memberi tahu Finder seberapa lebar sidebar-mu seharusnya, memberi tahu Dock di mana ikon-ikonmu berada, dan mengingatkan Safari tab mana yang terbuka saat terakhir kamu keluar. Format ini mendukung kumpulan tipe data yang kecil dan tetap: strings, integers, floating-point numbers, booleans, tanggal, data biner (Data), arrays, dan dictionaries. Itu adalah seluruh daftarnya. Tidak ada tipe kustom, tidak ada inheritance, dan tidak ada skema. Ini bukan kelalaian; ini adalah pilihan desain yang disengaja. Apple membutuhkan format yang dapat dibaca dan ditulis OS dengan overhead minimal, dan yang cukup sederhana untuk bertahan dari pengeditan manual tanpa langsung merusak status aplikasi.
XML vs. Biner vs. JSON: Tiga Varian dari Format yang Sama
Meskipun hanya ada satu format PLIST, ia hadir dalam tiga encoding yang berbeda. Mencampurkannya adalah sumber kebingungan yang umum. Pertama adalah **XML PLIST**, versi yang dapat dibaca manusia. Buka salah satunya di text editor dan kamu akan melihat deklarasi DOCTYPE yang mengarah ke `http://www.apple.com/DTDs/PropertyList-1.0.dtd`, diikuti oleh lautan tag bersarang: `<dict>`, `<key>`, `<string>`, `<integer>`, `<true/>`. Xcode menggunakan ini untuk file proyeknya (`project.pbxproj` adalah varian), dan inilah yang kamu inginkan saat mengekspor pengaturan untuk backup atau inspeksi. Kekurangannya yang jelas adalah sifatnya yang bertele-tele. Sebuah dictionary sederhana dengan 20 key dapat dengan mudah menyebar hingga 150 baris. Untuk performa, macOS hampir selalu menggunakan **Binary PLIST** (bplist) saat menulis file ke disk. Ketika sebuah aplikasi menyimpan preferensinya, biasanya ia menulis file yang dimulai dengan magic bytes `bplist00`. Format ini jauh lebih ringkas dan jauh lebih cepat untuk di-parse daripada kerabat XML-nya. File XML 150 baris itu bisa menyusut menjadi hanya 400 bytes dalam bentuk biner. Kekurangannya adalah kamu tidak bisa membaca PLIST biner di text editor standar; mereka hanya terlihat seperti karakter yang kacau. Terakhir, ada **JSON PLIST**, opsi yang lebih baru yang didukung sejak macOS 10.7. Ini menggunakan sintaks JSON standar, tetapi masih terbatas pada tipe data inti PLIST. Yang satu ini agak aneh. JSON tidak secara native membedakan integer dari float atau memiliki tipe Date khusus, yang memperkenalkan beberapa batasan halus. Kamu jarang akan melihat alat Apple sendiri menghasilkan JSON PLIST; mereka sebagian besar muncul ketika build tools pihak ketiga atau CI pipelines menghasilkan file konfigurasi. Untungnya, kamu dapat dengan mudah mengonversi di antara ketiganya dengan tool command-line `plutil` bawaan Apple. Perintah seperti `plutil -convert xml1 com.apple.dock.plist -o dock_readable.plist` memberimu salinan preferensi Dock-mu yang dapat dibaca manusia tanpa memodifikasi file biner aslinya.
Di Mana File PLIST Berada dan Apa yang Mereka Kontrol
Mengetahui di mana menemukan file PLIST adalah separuh perjuangan saat kamu memecahkan masalah aplikasi yang bermasalah atau memigrasikan pengaturan ke mesin baru. Mereka berada di beberapa tempat yang dapat diprediksi. Pengaturan aplikasi pribadimu disimpan di `~/Library/Preferences/`. Di sinilah tata letak Dock kustommu, skema warna Terminal-mu, dan key bindings Xcode-mu berada, semuanya terikat pada akun pengguna spesifikmu. Nama file mengikuti skema penamaan reverse-DNS, seperti `com.apple.Terminal.plist` atau `com.googlecode.iterm2.plist`. Sebaliknya, pengaturan yang berlaku untuk setiap pengguna di Mac ditemukan di `/Library/Preferences/`. Ini mengontrol perilaku sistem secara luas seperti konfigurasi jaringan dan zona waktu, dan biasanya memerlukan hak istimewa administrator untuk memodifikasi. PLIST melakukan lebih dari sekadar menyimpan preferensi; mereka juga menggerakkan sistem otomatisasi macOS. File-file di `/Library/LaunchAgents/`, `/Library/LaunchDaemons/`, dan versi `~/Library/` khusus pengguna adalah yang mendefinisikan layanan latar belakang dan tugas terjadwal. Sebuah LaunchDaemon PLIST memberi tahu layanan `launchctl` executable mana yang harus dijalankan, argumen mana yang harus dilewatkan, apakah akan memulai ulang jika terjadi crash, dan jadwalnya. Mungkin yang paling penting dari semuanya adalah file `Info.plist` yang tersimpan di dalam setiap paket `.app`. Klik kanan aplikasi apa pun di Finder, pilih Show Package Contents, dan navigasikan ke `Contents/Info.plist` untuk melihatnya. File ini adalah kartu identitas resmi aplikasi, menyatakan bundle identifier-nya, versi OS minimum, kemampuan hardware yang dibutuhkan, skema URL, dan izin yang dibutuhkan (seperti akses kamera atau mikrofon). Di iOS, `Info.plist` adalah yang digunakan App Store dan OS itu sendiri untuk memutuskan apakah aplikasi kamu dapat berjalan di perangkat tertentu. Peringatan penting: jika kamu berencana untuk mengedit file di `~/Library/Preferences/`, selalu keluar dari aplikasi yang bersangkutan terlebih dahulu. Membaca file saat aplikasi berjalan tidak masalah, tetapi jika kamu menulis perubahan, aplikasi kemungkinan akan menimpanya saat berikutnya ia menyimpan keadaannya. Keluar dari aplikasi, buat editanmu, lalu luncurkan kembali.
Membaca dan Mengedit File PLIST: Opsi Praktismu
Apple menyediakan toolkit lengkap untuk membaca dan memodifikasi file PLIST, mulai dari antarmuka grafis yang rapi hingga utilitas command-line yang kuat. Bagi sebagian besar developer, **editor PLIST bawaan Xcode** adalah tempat terbaik untuk memulai. Ini membuka file PLIST apa pun dalam tampilan pohon terstruktur dengan pengeditan yang sadar tipe: kamu mendapatkan kotak centang untuk boolean, pemilih tanggal untuk nilai Date, dan array serta dictionary yang dapat diperluas dengan rapi. Kamu dapat menambah, menghapus, dan menyusun ulang key tanpa pernah menyentuh XML mentah. Ini adalah workflow standar yang disetujui untuk mengedit `Info.plist` dan file entitlement. Untuk scripting dan otomatisasi, **tool command-line `plutil`** sangat diperlukan. Ini disertakan dengan macOS dan merupakan pembangkit tenaga listrik untuk validasi, konversi, dan pengeditan tingkat key. `plutil -lint myfile.plist` dengan cepat memeriksa kesalahan sintaks, sementara perintah seperti `plutil -replace NSHighResolutionCapable -bool YES MyApp.app/Contents/Info.plist` dapat mengatur satu key tanpa membuka editor. Ini adalah keharusan untuk shell scripts dan CI/CD pipelines. Ketika kamu ingin mengubah preferensi pengguna, **perintah `defaults`** adalah tool yang tepat untuk pekerjaan itu. Kamu dapat membaca pengaturan saat ini dengan `defaults read com.apple.finder ShowPathbar` atau mengubahnya dengan `defaults write com.apple.finder ShowPathbar -bool TRUE`. Inilah mengapa begitu banyak kustomisasi macOS untuk "power user" dibagikan sebagai perintah `defaults write` satu baris yang sederhana. Terkadang kamu membutuhkan lebih banyak kekuatan. **Editor pihak ketiga** seperti PlistEdit Pro (sekitar $12 di Mac App Store per tahun 2025) menambahkan fitur yang tidak dimiliki Xcode, seperti perbandingan berdampingan, pengeditan langsung PLIST biner tanpa konversi, dan operasi batch. Jika kamu menemukan dirimu bergulat dengan PLIST setiap hari, tool khusus adalah investasi yang cerdas. Dan bagaimana dengan **text editor** sederhana? Ini bekerja dengan sempurna untuk XML PLIST, tetapi akan merusak yang biner. Jika kamu membuka file biner di VS Code atau BBEdit, kamu harus terlebih dahulu mengonversinya ke XML dengan `plutil -convert xml1`. Setelah mengedit, konversikan kembali dengan `plutil -convert binary1` sebelum sistem dapat menggunakannya.
Mengonversi File PLIST: Apa yang Bisa dan Tidak Bisa Dilakukan CocoConvert
CocoConvert dibangun untuk menangani skenario konversi PLIST paling umum yang dihadapi orang di web: mengonversi XML PLIST ke JSON, mengubah JSON menjadi XML PLIST, dan mendekode file PLIST biner menjadi XML yang dapat dibaca tanpa memerlukan developer tools. Untuk konversi XML-ke-JSON, CocoConvert memetakan tipe data PLIST ke padanan JSON-nya. String, integer, array, dan dictionary dikonversi dengan bersih. Boolean menjadi JSON `true` dan `false`. Tanggal diserialisasi menjadi string ISO 8601 standar (misalnya, `2024-11-03T14:22:00Z`). Data biner apa pun dari elemen `<data>` di-encode base64 dalam output, yang menjaga konten dengan sempurna tetapi berarti bidang-bidang spesifik tersebut di JSON tidak akan dapat dibaca manusia. Fitur biner-ke-XML sangat berguna. Jika kamu pernah mengekspor backup preferensi dari iPhone menggunakan tool pihak ketiga, CocoConvert dapat mem-parse file `bplist` yang dihasilkan dan menghasilkan XML PLIST yang dapat dibaca, memungkinkan kamu untuk memeriksa isinya tanpa menginstal Xcode di mesinmu. Kami juga perlu menjelaskan apa yang tidak bisa dilakukan CocoConvert: ia tidak dapat mengonversi file PLIST kembali ke format biner. Menghasilkan PLIST biner memerlukan pembangunan tabel offset tingkat byte yang presisi, sebuah tugas yang sederhana untuk library native Apple tetapi sangat sulit untuk diimplementasikan dengan benar dalam layanan web. Jika kamu perlu menulis PLIST biner yang dimodifikasi kembali ke perangkat—misalnya untuk mengembalikan preferensi iPhone yang diedit—kamu harus menggunakan `plutil` di Mac atau editor native seperti PlistEdit Pro. Meskipun macOS sering dapat membaca file XML di mana file biner diharapkan, beberapa aplikasi bersifat ketat dan akan menolak atau mengabaikan versi XML. CocoConvert juga memvalidasi struktur, bukan semantik. Sebuah PLIST dengan bundle identifier yang salah format atau versi OS yang tidak valid akan terkonversi dengan baik, karena dari perspektif format file, itu valid. Itu adalah masalah tingkat aplikasi yang tidak dapat didiagnosis oleh konverter format.
Masalah PLIST Umum dan Cara Mendiagnosisnya
Kerusakan PLIST jarang terjadi, tetapi ini adalah skenario pemecahan masalah macOS yang sangat membuat frustrasi. Gejalanya—aplikasi yang tidak mau meluncur, preferensi yang diatur ulang setiap kali boot ulang, layanan sistem yang gagal secara diam-diam—jarang menunjuk langsung ke file tertentu. Penyebab paling sering adalah **kerusakan dari penulisan yang tidak tepat**. Jika macOS crash atau kehilangan daya saat aplikasi menyimpan pengaturannya, PLIST di disk bisa berakhir terpotong atau rusak. Langkah diagnostik pertamamu seharusnya adalah `plutil -lint ~/Library/Preferences/com.example.app.plist`. File yang sehat mengembalikan `OK`; yang rusak memberikan kesalahan parse, biasanya dengan nomor baris atau offset byte yang membantu. **Masalah izin** adalah penyebab kedua yang umum. File PLIST di direktori `~/Library/Preferences/` milik pengguna yang entah bagaimana dimiliki oleh `root` akan menyebabkan aplikasi secara diam-diam kembali ke pengaturan default-nya setiap kali diluncurkan. Periksa kepemilikan dengan `ls -l ~/Library/Preferences/com.example.app.plist`—pemiliknya harus username-mu, bukan `root`. Kamu bisa memperbaikinya dengan `sudo chown $(whoami) ~/Library/Preferences/com.example.app.plist`. Masalah yang lebih halus lagi adalah **preferensi yang di-cache**. Agar lebih cepat, macOS menggunakan daemon latar belakang, `cfprefsd`, untuk menyimpan nilai preferensi di cache. Ini berarti bahwa meskipun kamu mengedit langsung file PLIST di disk, aplikasi yang sedang berjalan mungkin terus membaca versi lama yang di-cache. Jika perubahan `defaults write`-mu tidak berlaku, ini hampir pasti alasannya. Paksa cache untuk di-flush dengan `killall cfprefsd` (ini akan otomatis restart) atau cukup log out dan log in kembali. Kegagalan build Xcode seringkali berawal dari `Info.plist` yang salah format. Build akan gagal dengan kesalahan yang tidak jelas seperti "The data couldn't be read because it isn't in the correct format," yang hanyalah cara Xcode mengatakan bahwa file gagal di-parse. Sebelum kamu melakukan hal lain, periksa penanda konflik merge seperti `<<<<<<<` di XML, atau cukup jalankan `plutil -lint` pada file tersebut. Untuk PLIST apa pun yang tidak kamu buat sendiri—yang dari backup perangkat, repo GitHub, atau rekan kerja—jalankan `plutil -lint` padanya terlebih dahulu. Ini hanya butuh tiga detik dan menghemat banyak kebingungan.
PLIST dalam Alur Kerja Pengembangan Apple yang Lebih Luas
Selain sekadar menyimpan preferensi, file PLIST adalah infrastruktur penopang beban dalam toolchain pengembangan Apple, seringkali dengan cara yang hanya menjadi jelas ketika sesuatu rusak. Code signing sebuah aplikasi bergantung pada entitlements PLIST. Ini adalah file yang menyatakan dengan tepat kemampuan khusus mana yang diizinkan untuk digunakan aplikasi: iCloud, push notifications, App Groups, Keychain sharing, dan sebagainya. File ini disematkan langsung ke dalam code signature aplikasi selama proses build. Jika entitlements PLIST tidak cocok dengan provisioning profile, aplikasi tidak akan terinstal di perangkat. Tool `codesign` Apple membaca dan memvalidasi file ini secara langsung. Sistem build Xcode sendiri sangat bergantung pada PLIST. File `*.xcscheme` yang ditemukan di dalam `.xcodeproj/xcshareddata/xcschemes/` adalah PLIST yang menjelaskan target mana yang akan dibangun, argumen apa yang akan dilewatkan saat peluncuran, dan variabel lingkungan mana yang akan diatur. Karena mereka hanyalah XML terstruktur, mereka aman untuk di-commit ke version control dan mudah untuk di-diff antar branch. Bahkan metadata pengajuan App Store dikelola oleh PLIST. Privacy manifest (`PrivacyInfo.xcprivacy`), yang diperkenalkan di Xcode 15 dan diwajibkan untuk sebagian besar pengajuan aplikasi setelah Mei 2024, adalah file PLIST. Ini menyatakan API mana yang digunakan aplikasi kamu yang berpotensi digunakan untuk fingerprinting, dan mengapa. Kesalahan pada file ini tidak menyebabkan build error; melainkan menyebabkan penolakan peninjauan App Store, yang jauh lebih menjengkelkan untuk di-debug. Bagi siapa pun yang membangun tool lintas platform yang berinteraksi dengan ekosistem Apple—sistem CI, solusi MDM, atau utilitas backup—pemahaman mendalam tentang format PLIST tidak dapat dihindari. Spesifikasi format didokumentasikan dalam referensi `CFPropertyList` Apple, tetapi format biner juga telah direkayasa balik secara menyeluruh. Parser open-source yang sangat baik tersedia untuk Python, Ruby, Go, dan Rust. Modul `plistlib` dalam standard library Python (sejak 3.4) sangat andal untuk script produksi yang perlu memproses backup perangkat atau file proyek Xcode.