November 10, 2026

Instinctivecode

Pengembangan aplikasi iOS & Mac, UX

7 Cara Menyimpan Data Pengaturan di Aplikasi iOS dan macOS

Meja kerja pengembang dengan MacBook dan iPhone yang menampilkan kode dan layar pengaturan aplikasi
Tujuh pendekatan untuk menyimpan data pengaturan di aplikasi iOS dan macOS, mulai dari UserDefaults hingga SwiftData, lengkap dengan kelebihan dan kekurangannya.

Menyimpan data pengaturan aplikasi iOS dan macOS sering dianggap sepele, padahal pilihan mekanisme penyimpanan memengaruhi kecepatan peluncuran, kemudahan pengujian, dan kerumitan migrasi saat versi baru dirilis. Tujuh cara berikut umum dipakai, dari yang paling ringan sampai yang paling terstruktur, supaya kamu bisa memilih sesuai kebutuhan aplikasi.

1. UserDefaults untuk preferensi sederhana

UserDefaults adalah pilihan pertama untuk menyimpan preferensi kecil seperti tema, status onboarding, atau pilihan bahasa. API-nya ringkas: cukup panggil UserDefaults.standard.set(...) dan UserDefaults.standard.bool(forKey:). Data disimpan sebagai plist di direktori aplikasi, dan sistem mengurus penulisan ke disk secara otomatis.

Batasan utamanya adalah tipe data yang didukung: string, angka, boolean, tanggal, data biner, array, dan dictionary. Untuk struktur yang lebih kompleks, kamu harus mengubahnya menjadi Data terlebih dahulu. UserDefaults juga tidak cocok untuk data berukuran besar karena seluruh isinya dimuat ke memori saat aplikasi berjalan. Jika pengaturanmu hanya beberapa lusin kunci dengan nilai primitif, UserDefaults sudah cukup dan paling cepat diimplementasikan.

2. File JSON di direktori Application Support

Ketika pengaturan mulai berbentuk struktur bersarang, menyimpannya sebagai file JSON lebih rapi daripada memaksakan UserDefaults. Kamu bisa mendefinisikan struct Codable, lalu menulisnya ke file di direktori Application Support menggunakan JSONEncoder dan FileManager.

Pendekatan ini memberi kendali penuh atas format dan lokasi file, dan kamu bisa memeriksa isinya dengan editor teks saat debugging. Kekurangannya, kamu perlu menangani pembacaan dan penulisan secara manual, termasuk urusan atomik agar file tidak korup jika aplikasi berhenti di tengah proses. Untuk aplikasi macOS yang menyimpan konfigurasi proyek, file JSON sering lebih masuk akal karena pengguna bisa membackup atau memindahkannya.

3. Property list (plist) khusus

Plist masih menjadi format asli Apple untuk konfigurasi. Kamu bisa membuat file plist terpisah di direktori dokumen atau bundle, lalu membacanya dengan PropertyListDecoder. Format ini mendukung tipe data yang lebih kaya daripada JSON, termasuk tanggal dan data biner, tanpa konversi manual.

Plist cocok jika kamu perlu menyimpan pengaturan yang juga dibaca oleh komponen non-Swift, misalnya skrip build atau alat internal. Namun, untuk aplikasi yang seluruhnya Swift, JSON lebih umum dan pustaka pendukungnya lebih banyak. Perhatikan juga bahwa plist di bundle bersifat read-only, jadi pengaturan yang bisa diubah pengguna harus disimpan di direktori yang bisa ditulis.

4. Keychain untuk data sensitif

Token akses, kredensial, atau kunci API tidak boleh masuk UserDefaults atau file biasa. Keychain menyediakan penyimpanan terenkripsi yang dikelola sistem, dengan kontrol akses seperti kSecAttrAccessibleAfterFirstUnlock. API-nya berbasis C dan terasa kaku di Swift, tetapi ada pembungkus komunitas yang bisa mempermudah.

Keychain juga bisa dipakai untuk menyimpan pengaturan yang perlu dibagikan antar aplikasi dalam satu grup, misalnya antara aplikasi iOS dan ekstensi. Jika aplikasimu menangani catatan atau data pribadi, pertimbangkan juga untuk membandingkan opsi aplikasi catatan terenkripsi sebagai referensi model keamanan yang mungkin kamu adopsi.

5. SwiftData untuk model pengaturan yang kompleks

Sejak SwiftData diperkenalkan, menyimpan objek model menjadi lebih mudah. Kamu bisa mendefinisikan @Model untuk entitas pengaturan, lalu menyimpannya ke ModelContainer. SwiftData menangani persistensi, migrasi ringan, dan query dengan @Query di SwiftUI.

Pilihan ini masuk akal jika pengaturanmu sebenarnya adalah kumpulan data yang tumbuh, misalnya daftar filter yang disimpan pengguna atau riwayat konfigurasi. Untuk sekadar menyimpan tiga boolean, SwiftData terasa berlebihan karena menambah dependensi dan waktu inisialisasi. Bandingkan dengan pendekatan lain di SwiftData vs Core Data jika kamu perlu mempertimbangkan aplikasi yang sudah lebih dulu memakai Core Data.

6. CloudKit atau sinkronisasi cloud

Jika pengaturan harus tersedia di beberapa perangkat, menyimpannya di CloudKit atau layanan sinkronisasi lain menjadi pilihan. Kamu tetap menyimpan salinan lokal, lalu menyinkronkan perubahan di latar belakang. Pendekatan ini menambah kerumitan karena harus menangani konflik, status offline, dan kuota.

Untuk preferensi yang jarang berubah, sinkronisasi penuh mungkin tidak sepadan. Namun, untuk pengaturan yang terikat akun pengguna, cloud memudahkan pengalaman lintas perangkat. Baca perbandingan offline mode vs sinkronisasi cloud sebelum memutuskan, karena tidak semua aplikasi perlu menyinkronkan pengaturan.

7. Basis data pihak ketiga atau solusi khusus

Ada kalanya kebutuhan pengaturan tidak cocok dengan semua opsi di atas, misalnya ketika kamu ingin menyimpan pengaturan dalam format yang bisa dibaca alat lain atau ketika aplikasi macOS perlu berbagi konfigurasi dengan proses latar belakang. Basis data ringan seperti SQLite atau pustaka key-value pihak ketiga bisa menjadi jalan tengah.

Pilihan ini menambah dependensi dan ukuran aplikasi, jadi timbang baik-baik. Untuk sebagian besar aplikasi, kombinasi UserDefaults untuk preferensi kecil dan file JSON untuk konfigurasi kompleks sudah memadai. Jika kamu memantau aplikasi secara terpisah, atur juga interval ping untuk monitoring jaringan agar tidak mengganggu proses yang sedang berjalan.

Ringkasan perbandingan

Metode Cocok untuk Keterbatasan
UserDefaults Preferensi primitif dan kecil Tidak untuk data besar atau kompleks
File JSON Struktur bersarang, mudah diperiksa Penanganan manual, risiko korup
Plist Konfigurasi yang dibaca alat lain Kurang populer di proyek Swift murni
Keychain Token dan data sensitif API C, perlu pembungkus
SwiftData Model pengaturan yang tumbuh Overhead untuk data kecil
CloudKit Sinkronisasi lintas perangkat Konflik dan status offline
Basis data pihak ketiga Kebutuhan khusus Dependensi tambahan

Mulailah dari yang paling sederhana yang memenuhi kebutuhan. Jika pengaturan hanya beberapa nilai, UserDefaults sudah cukup. Ketika strukturnya mulai bercabang, pindah ke file JSON atau SwiftData. Untuk data sensitif, Keychain tidak bisa ditawar. Jika pengguna memiliki beberapa perangkat, pertimbangkan sinkronisasi cloud sejak awal agar migrasi tidak merepotkan. Apa pun pilihanmu, bungkus akses penyimpanan dalam satu tipe agar perubahan di kemudian hari tidak menyebar ke seluruh kode.

Pertanyaan yang Sering Diajukan

Apakah UserDefaults aman untuk menyimpan token akses?

Tidak. UserDefaults menyimpan data sebagai plist yang bisa dibaca jika perangkat diakses secara tidak sah. Gunakan Keychain untuk token, kata sandi, atau kunci API.

Kapan sebaiknya memilih SwiftData daripada file JSON?

Pilih SwiftData jika pengaturanmu berupa kumpulan objek yang perlu di-query, diurutkan, atau dihubungkan dengan model lain. Untuk konfigurasi statis yang jarang berubah, file JSON lebih ringan.

Bagaimana cara berpindah dari UserDefaults ke SwiftData tanpa kehilangan data pengguna?

Lakukan migrasi satu kali saat aplikasi pertama kali dijalankan setelah pembaruan. Baca nilai lama dari UserDefaults, simpan ke model SwiftData, lalu hapus kunci lama setelah migrasi berhasil. Uji proses ini dengan data contoh sebelum merilis.