Pertanyaan Mac Sandboxed App Kehilangan Izin Berkas ke Aplikasi Lain


Saya mengembangkan aplikasi yang saat ini terkotak pasir. Ini bertindak sebagai editor teks dasar. Baru-baru ini, saya ingin menguji apa yang terjadi ketika saya membuka file di aplikasi saya dan aplikasi lain pada saat yang sama, membuat pembaruan dalam satu aplikasi, lalu melihat pembaruan di satu aplikasi lain. saya menggunakan Coda atau BBEdit sebagai editor alternatif saya. Jika saya mematikan sandboxing - maka masalah ini tidak ada. Namun, karena aplikasi harus di-sandbox pada tanggal 1 Maret, saya lebih memilih menerapkan solusi daripada menunggu dan melihat.

Ketika saya membuka kedua file dan membuat pengeditan di aplikasi saya dan kemudian beralih ke aplikasi lain, perubahan tersebut direfleksikan sehingga editor tersebut memiliki versi yang baru saja disimpan dari aplikasi saya. Namun, jika saya melakukan kebalikan dari menabung dari aplikasi mereka dan kemudian pindah ke saya - tidak ada sukacita. Tanpa melakukan tindakan apa pun, konsol melaporkan dua kesalahan spesifik: deny file-issue-extension dan deny file-write-data. Aplikasi tampaknya kehilangan hak istimewa untuk mengedit dokumen karena diubah oleh editor eksternal setelah dokumen dibuka di aplikasi saya. Jika saya mencoba menyimpan file di aplikasi saya, ia meminta untuk menduplikasi dokumen karena telah kehilangan akses ke dokumen asli. Ini tidak terjadi sebaliknya karena aplikasi tersebut belum dikosongkan dan untuk itu memiliki izin yang tidak dimiliki aplikasi saya. Juga tidak tampak bahwa Anda dapat mencegah aplikasi lain melakukan perubahan jika Anda tidak menginginkan perilaku ini.

Dokumentasi di developer.apple.com menyebutkan apa-apa tentang situasi semacam ini. Saya tidak yakin apakah ini perilaku yang dimaksudkan. Jika ya, maka saya dapat memberitahu pengguna saya bahwa izin dokumen telah hilang dan mereka harus menyimpan versi baru atau membuka kembali file tersebut. Jika perilaku TIDAK dimaksudkan, maka metode apa di API NSDocument akan memberikan izin ke file setelah hilang? Saya berasumsi jawabannya adalah yang pertama, bahwa ini memang dimaksudkan, tetapi dapatkah seseorang mengonfirmasi dan apakah ada dokumentasi?


32
2018-01-12 16:14


asal


Jawaban:


Tanpa melakukan tindakan apa pun, konsol melaporkan dua kesalahan spesifik: menolak ekstensi-masalah-file dan menolak file-tulis-data. Aplikasi tampaknya kehilangan hak istimewa untuk mengedit dokumen karena diubah oleh editor eksternal setelah dokumen dibuka di aplikasi saya. Jika saya mencoba menyimpan file di aplikasi saya, ia meminta untuk menduplikasi dokumen karena telah kehilangan akses ke dokumen asli

Perilaku yang benar dalam situasi seperti ini adalah untuk tidak menimpa file, tetapi untuk meminta pengguna jika mereka ingin memuat ulang dokumen, jika demikian muat ulang dan kemudian tuliskan.

OS melakukan hal yang benar dengan tidak membiarkan penulisan buta atas file yang telah berubah.

Lihat NSFilePresenter - (kosong) yang disajikanItemDidChange untuk melihat apakah itu berubah. Baca kembali file dan kemudian lihat apakah Anda dapat menyimpannya. Anda tidak mengatakan Anda ditolak membaca pada file.

Juga, karena Anda belum memposting kode apa pun, mungkin akan berguna untuk menunjukkan kode apa yang Anda gunakan untuk mengakses file dan menyimpannya. NSDocument telah dibangun untuk menangani beberapa jenis perubahan file di kotak pasir.


1
2017-08-08 03:55



Mari hubungi Aplikasi Anda ScottEdit dan pesaing Anda sebagai StackEdit

Mungkin ada beberapa hal yang terjadi. NSDocument memiliki metode lockDocument. StackEdit mungkin telah mengunci dokumen dan TIDAK membukanya setelah disimpan. Jika Anda keluar dari aplikasi, file akan dibuka kuncinya dan tersedia untuk aplikasi Anda. Jika ini kasusnya, Anda harus membuat pemberitahuan ketika atribut file berubah menggunakan kqueue atau yang lain.

Jika aplikasi lain adalah "memblokir" akses ke aplikasi Anda. Anda dapat mengirim email ke pengembang tersebut dan memintanya untuk memperbarui aplikasinya agar membuka kunci dokumen setelah disimpan. Langkah terakhir ini adalah selain menyiapkan pemberitahuan karena pengembang lain mungkin datang dan melakukan hal yang sama (melanggar aplikasi Anda).


0
2017-08-03 14:16