Bagaimana cara menggunakan perintah default dengan Grup Aplikasi?

4

Di OS X Yosemite dimungkinkan untuk memiliki preferensi yang dibagikan di antara beberapa aplikasi yang ada di App Group yang sama. Di sisi pengembangan, sesederhana menyiapkan Grup Aplikasi dan kemudian menggunakan [[NSUserDefaults alloc] initWithSuiteName:@"TEAMID.com.company.AppGroup"]daripada yang biasa [NSUserDefaults standardUserDefaults]. Preferensi ini disimpan ~/Library/Group\ Containers/TEAMID.com.company.AppGroup/Library/Preferences/TEAMID.com.company.AppGroup.plist.

Yang saya coba cari tahu adalah bagaimana memodifikasi preferensi tersebut dari luar aplikasi menggunakan perintah default. Sejauh ini yang terbaik yang saya temukan adalah ini:

defaults write ~/Library/Group\ Containers/TEAMID.com.company.AppGroup/Library/Preferences/TEAMID.com.company.AppGroup PreferenceName -bool YES

Jenis ini berfungsi untuk memodifikasi file .plist yang benar dan memperbarui preferensi yang saya kirimi. Tapi sepertinya tidak kompatibel dengan caching yang digunakan di Yosemite. Segera setelah aplikasi mencoba membaca preferensi yang sama, itu kembali ke apa yang telah ditetapkan sebelumnya.

Apakah ada cara untuk membuat pekerjaan ini andal?

robotspacer
sumber

Jawaban:

1

Sejauh yang saya dapat menentukan masih ada cara yang tepat untuk melakukan ini. Namun, Anda dapat membuatnya bekerja dengan membunuh cfprefsdsetelah menggunakan perintah di atas. Jadi saya hanya menggunakan sesuatu seperti ini di aplikasi Terminal:

defaults write ~/Library/Group\ Containers/TEAMID.com.company.AppGroup/Library/Preferences/TEAMID.com.company.AppGroup PreferenceName -bool YES; killall cfprefsd

Tidak hebat, tapi lebih baik daripada tidak sama sekali.

Pembaruan untuk macOS Sierra (10.12): Sayangnya menggunakan path file sepertinya tidak berfungsi lagi. Anehnya ia bekerja pada file yang ada di tempat lain — seperti jika saya menyalin daftar App Group ke desktop — tetapi saya tidak bisa membuatnya berfungsi dengan benar pada daftar App Group di lokasi normalnya.

Perlu dicatat bahwa man defaultssudah termasuk catatan ini untuk sementara waktu:

Perintah default akan diubah dalam rilis utama mendatang untuk hanya beroperasi pada domain preferensi. Utilitas manipulasi plist umum akan dilipat menjadi program baris perintah yang berbeda.

Seperti saya katakan meskipun, ini bukan masalah dengan plists sewenang-wenang, tampaknya khusus untuk plists di ~/Library/Group Containers/.

robotspacer
sumber