Bagaimana XCode / OSX melakukan itu? Memindahkan proyek XCode ke lokasi lain. XCode secara otomatis tahu di mana ia berada

5

Hanya sedikit latar belakang. Saya sudah lama menggunakan Windows, pengembang C # dan untuk proyek baru untuk perusahaan saya, saya harus beralih ke OSX dan mulai belajar pengembangan iOS. Dengan kata lain, saya masih cukup baru di lingkungan Mac / OSX.

Sebelumnya hari ini saya memutuskan untuk menutup XCode dan mengatur kembali proyek pengujian dan pembelajaran saya, dan proyek yang saya buat di XCode yang menyimpan aset yang kemungkinan besar akan perlu saya gunakan kembali. Ketika saya meluncurkan XCode kembali, saya terkejut melihat bahwa semua proyek saya baru-baru ini masih ada dalam daftar Terbaru dan mereka menunjuk ke lokasi file baru! Manis!

Bagaimana XCode tahu di mana proyek saya berada? Apakah fungsi Sistem Operasi, Sistem File atau apakah XCode memiliki beberapa bentuk kecerdasan yang tertanam dalam sistem untuk mendeteksi jenis pertanyaan ini?

RLH
sumber

Jawaban:

4

Fungsionalitas ini tersedia dari hampir semua File aplikasi »Buka menu Terbaru yang disediakan oleh metode kenyamanan dalam LaunchServices/LSSharedFilesList.h(yang juga merupakan nama plistfile yang menyimpan informasi ini, misalnya ~/Library/Preferences/com.apple.Preview.LSSharedFilesList.plist).

Entri-entri ini mengandung serial NSData(mungkin), yang dapat Anda salin dan tulis ke file misalnya menggunakan hex editor. Mereka berisi path lengkap ke file, volume nama file aktif, UUID, dan beberapa informasi tambahan yang saat ini saya tidak masuk akal jika. Saya berasumsi bahwa UUID digunakan untuk menyelesaikan referensi file jika diperlukan.


NSURLs dapat dikonversi ke referensi file yang dapat diselesaikan kemudian, bahkan ketika file telah dipindahkan. Jawaban tentang StackOverflow ini memiliki lebih banyak informasi teknis.


Saya tidak yakin, tetapi HFS + memiliki inode yang secara unik mengidentifikasi file. Fungsi NSURL mungkin diimplementasikan di atas itu semua. Perilaku yang dapat diamati tampaknya menunjukkan ini: Jika Anda memindahkan file ke sistem file yang berbeda, itu dihapus dari daftar Open Recent file, mungkin karena itu tidak bisa lagi diselesaikan.

Daniel Beck
sumber
Informasi menarik untuk semua orang yang datang dari Linux: HFS+/ OS X menyimpan datum tambahan untuk file yang dapat diakses menggunakan stat: Waktu kelahiran B node (selain untuk mengakses a , mengubah c , dan modifikasi m ). Tidak yakin apakah ini khusus untuk OS X atau lebih umum.
Daniel Beck
Waktu kelahiran ada di sistem Unixlike lainnya. Saya ... pikir FreeBSD dan Solaris memilikinya; Saya juga ingat melihat tambalan untuk Linux dan ext4.
grawity
@grawity Jadi FreeBSD mungkin berasal dari mana. Senang mendengarnya.
Daniel Beck
3

Saya tidak tahu bagaimana XCode melakukan itu, tetapi inilah jawaban umum.

Selain jalur, objek sistem file dapat memiliki pengidentifikasi lainnya, seperti nomor inode pada sistem file Unix atau ID objek pada Windows NTFS, yang sering dapat digunakan untuk menemukan semua jalur ke file dengan ID yang dikenal. Nomor atau pengidentifikasi ini selalu tetap sama selama objek itu sendiri tetap berada di sistem file yang sama, terlepas dari direktori mana Anda memindahkannya.

Objek juga memiliki metadata lain yang lebih terlihat tetapi kurang dapat diandalkan seperti nama, tanggal pembuatan, atau ukuran. Jika ID objek tidak diketahui atau tidak ditemukan di mana pun, program mungkin mencari semua sistem file untuk objek apa pun dengan nama, jenis dan ukuran yang sama, atau menggunakan kriteria lain. Inilah yang dilakukan Mac OS X Aliases dan Windows Shortcuts ketika target aslinya tidak ada (meskipun pintasan hanya berfungsi di shell Windows, sementara alias lebih terintegrasi dengan Mac OS).

Bisa jadi XCode hanya menggunakan fungsi yang sama yang digunakan untuk menyelesaikan alias yang rusak.

grawity
sumber