Saya sesekali bekerja dengan paket iTunes Music Store. Paket-paket ini memiliki .itmsp
ekstensi. Seperti .app
, .itmsp
pada dasarnya adalah direktori kontainer. .itmsp
folder berisi file XML dan media.
Pembaruan Xcode terbaru dan / atau Mac OS X (Xcode 4.6.1 pada Mac OS 10.8.3) telah membajak asosiasi tipe file untuk direktori dengan .itmsp
ekstensi. Sebelumnya mereka diperlakukan seperti folder normal - tidak perlu klik dua kali untuk melihat ke dalam. Sekarang, saya harus mengklik dua kali untuk berinteraksi dengan mereka. Ketika saya melakukannya, sebuah program bernama Application Loader mencoba membukanya. Untuk melihat ke dalam, saya harus mengklik kanan dan memilih "Tampilkan Isi Paket". Saya berurusan dengan ribuan file ini pada waktu tertentu, jadi itu tidak akan berhasil.
Saya sudah mencoba mengubah atau menghapus asosiasi tipe file menggunakan Get Info dan RCDefaultApp. Tidak ada yang berhasil. Menghapus asosiasi filetype hanya mengubah .itmsp
direktori menjadi file kosong. Begitu juga menghapus Application Loader.app seluruhnya. Dalam kedua kasus saya masih tidak dapat menelusuri konten tanpa mengklik kanan.
Jawaban yang diterima sebelumnya berhasil untuk sementara waktu: lsregister -u /Applications/Contents/Applications/Application\ Loader.app/
Berhenti berfungsi sejak saya memperbarui Xcode dan / atau Mac OS X. Jika Anda menginstal Xcode, Anda harus dapat mengujinya sendiri dengan memberi nama direktori foo.itmsp
.
Bagaimana saya membuatnya sehingga .itmsp
file diperlakukan sebagai folder sekali lagi?
Jawaban:
Masalahnya: folder .itmsp ditampilkan sebagai file
Finder memperlakukan folder .itmsp sebagai paket , yaitu seolah-olah itu adalah satu file. Misalnya, dalam tampilan kolom, apa pun yang terkandung dalam folder .itmsp tidak terlihat, hanya ikon dokumen yang ditampilkan:
Finder menganggap direktori sebagai paket jika salah satu dari kondisi berikut ini benar (dari Panduan Pemrograman Bundle ):
Direktori ini memiliki ekstensi nama file yang dikenal: .app, .bundle, .framework, .plugin, .kext, dan sebagainya (seperti yang didefinisikan
/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
. Ini adalah daftar biner, buka dengan Xcode:)open -a Xcode Info.plist
.Direktori memiliki ekstensi yang diklaim oleh beberapa aplikasi lain sebagai tipe paket (cari
com.apple.package
di outputmdls -name kMDItemContentTypeTree <foldername>
untuk mengetahuinya.)Direktori ini memiliki bit set paketnya (jika
GetFileInfo -ab <foldername>
dikembalikan1
, sudah diatur.)Kasus 2. berlaku untuk folder .itmsp:
Application Loader.app
jenis eksporcom.apple.itunes-producer.itmsp
dan atur agar sesuai dengancom.apple.package
:Solusi: ketik deklarasi ulang
com.apple.itunes-producer.itmsp
Sebuah solusi adalah mendeklarasikan ulang tipe
com.apple.itunes-producer.itmsp
dan ekstensiitmsp
sebagai folder dan memaksa Layanan Peluncuran untuk menggunakan deklarasi tipe yang dimodifikasi.Agar folder .itmsp ditampilkan sebagai folder oleh Finder, ikuti langkah-langkah berikut:
Buka Automator di folder Aplikasi dan pilih Aplikasi :
Pilih Utilitas di daftar Perpustakaan, pilih Jalankan Script Shell dan seret ke panel di sebelah kanan:
Ganti konten skrip default dengan
exit 0
:Simpan aplikasi sebagai itmspOpener:
Tutup Automator.
Pilih
itmspOpener.app
dan tampilkan isinya:Temukan Konten> Info.plist dan buka dengan editor favorit Anda:
Ganti bagian ini di
Info.plist
:Kaitkan file .itmsp ke
itmspOpener
dan tekan tombol Change All...:Setel ulang basis data Layanan Peluncuran:
(pada OS X 10.8
lsregister
terletak di/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/
.)Buat folder .itmsp dan daftarkan propertinya:
Karena basis data Layanan Peluncuran direset, sekarang Finder menunjukkan folder .itmsp sebagai folder.
Buka
itmspOpener.app
untuk memuat file plistnya dan mendaftarcom.apple.itunes-producer.itmsp
:Mulai
Application Loader.app
:Folder
foo3.itmsp
harus tetap ditampilkan sebagai folder.Periksa properti folder lagi:
com.apple.package
tidak ditambahkan ke atribut metadata folder, itu sebabnya Finder masih menampilkan folder .itmsp sebagai folder!Solusi otomatis: menampilkan folder .itmsp sebagai folder setelah login
Untuk menampilkan folder .itmsp sebagai folder setelah login:
Buat
itmspOpener.app
dan modifikasiInfo.plist
seperti dijelaskan di atas.Buat
/usr/local/bin/itmspTypeLoader
dengan konten ini (variabelitmspOpener
menunjuk ke lokasi tempatitmspOpener.app
tinggal, ubah seperlunya):Baik
sleep 15
sebelum dan sesudah berlarilsregister
adalah yang paling penting. Jika Anda tidak melihat hasil yang diinginkan, coba berbagai penundaan.Buat
/usr/local/bin/itmspTypeLoaderLauncher
dengan konten ini:Atur kedua skrip yang dapat dieksekusi:
Tetapkan
/usr/local/bin/itmspTypeLoaderLauncher
sebagai kait masuk :Mulai ulang agar perubahan diterapkan. Setelah masuk, Anda akan melihat ini:
dan
lsregister -dump
harus mengungkapkan bahwaitmspOpener.app
'sUTExportedTypeDeclarations
lebih diprioritaskanApplication Loader.app
' s:Apakah Anda melihat
inactive
bendera yang diatur dalam jenis ekspor Application Loader.app? Kami mengalahkan Application Loader.Tes asam: folder .itmsp masih ditampilkan seperti itu setelah pembaruan iTunes
Saya baru saja memperbarui Xcode:
dan dapat mengonfirmasi bahwa folder .itmsp ditampilkan sebagai folder selama pembaruan:
dan sesudahnya:
Solusi parsial: Paket ini akan menampilkan konten ketika diklik ganda
Seperti yang dikomentari sebelumnya, prosedur yang dirinci di atas tidak akan berfungsi dengan folder sewenang-wenang yang ditampilkan sebagai paket oleh Finder.
Namun, jika Anda hanya ingin mengklik dua kali paket untuk membukanya, ada cara untuk melakukannya dengan satu
bash
skrip dan Automator:Script membuat folder sementara yang tersembunyi di dalam paket, mengungkapkannya di Finder (sehingga mengungkapkan paket sebagai folder) dan kemudian menghapus folder sementara.
Automator menggabungkan skrip ke dalam aplikasi yang akan dikaitkan dengan file paket.
Ini adalah langkah-langkah untuk membuat aplikasi semacam itu. Saya akan menggunakan file .itmsp sebagai contoh tipe paket dalam penjelasan di bawah ini:
Buka Automator di folder Aplikasi dan pilih Aplikasi :
Pilih Utilitas di daftar Perpustakaan, pilih Jalankan Script Shell dan seret ke panel di sebelah kanan:
Setel masukan Lulus ke sebagai argumen :
Ganti konten skrip default dengan ini:
Simpan aplikasi sebagai itmspOpener:
Tutup Automator.
Sekarang Anda memiliki aplikasi yang dapat membuka file .itmsp sebagai folder jika dikaitkan dengannya.
Ada masalah kosmetik: seperti yang terjadi, file terkait akan memiliki ikon dokumen putih standar:
Mari kita perbaiki ini juga:
Pastikan Automator ditutup.
Pilih itmspOpener dan tampilkan kontennya:
Temukan Konten> Info.plist dan buka dengan editor favorit Anda:
Ganti nilai untuk kunci ini dalam
CFBundleDocumentTypes
array:dan tambahkan kunci ini:
Sekarang, bagian ini terlihat seperti ini:
Beralih ke Finder, pilih folder, tekan ⌘I, pilih ikon folder di sudut kiri atas dan salin dengan ⌘C:
Buka Pratinjau dan pilih File> Baru dari Clipboard. Simpan file sebagai
folder.icns
:Salin
folder.icns
keitmspOpener/Contents/Resources
:Kaitkan file .itmsp ke
itmspOpener
dan tekan tombol Change All...:Ikon file .itmsp harus berubah menjadi folder, atau setidaknya saya pikir begitu: sayangnya, ini tidak terjadi. Jadi saya memindahkan aplikasi itmspOpener ke lokasi lain (saya membuat folder sementara di Desktop saya, memindahkannya ke sana dan kembali ke Desktop saya). Itu menyegarkan informasi ikon di Finder:
Sekarang klik dua kali file .itmsp dan tontonlah itu terbuka sebagai folder:
sumber
.itmsp
folder tidak terlihat. Saya tidak bisa memilah mengapa, tapi itu dia. Selain itu, jika saya memiliki pemabuk saya, Anda tidak perlu mengklik dua kali file untuk melihat ke dalam, tapi oh well.Salah satu opsi adalah membatalkan pendaftaran Application Loader
lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/
, tetapi terdaftar lagi jika dibuka, jika database Layanan Peluncuran dibangun kembali, atau mungkin jika Xcode diperbarui.Anda juga dapat mengomentari entri dalam kamus CFBundleDocumentTypes dan UTExportedTypeDeclarations di
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plist
dan jalankanlsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/
. Itu tidak membatalkan tanda tangan kode Xcode, tetapi perubahan bisa ditimpa oleh pembaruan.Path lengkap ke lsregister ada
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
di 10.5 dan yang lebih baru.sumber
Info.plist
akan membatalkan registrasi jenis file yang Anda hapus dari daftar? Saya bisa membayangkan itu bekerja dan saya bisa dengan mudah membayangkan itu gagal. terlalu.lsregister -u $app && lsregister $app
tampaknya menerapkan perubahan ke Info.plist setidaknya dalam kasus ini.CFBundleDocumentTypes
sehingga Anda mungkin hanya menghapus "alat" itu ketika muncul jika Anda tidak membutuhkannya dan / atau ban memodifikasinya.Berikut adalah kutipan yang relevan dari Apple documenation tentang bundel ( penekanan ditambahkan )
Hampir pasti Xcode menyatakan bahwa ia mengklaim
.itmsp
mewakili jenis paket, seperti yang dijelaskan dalam Paket Dokumen . Jadi mungkin menghapus ekstensi itu dari XcodeInfo.plist
akan melakukan trik, tapi saya curiga bahwa sekali asosiasi itu telah dicatat oleh Finder, menghapusnya dari Xcode tidak akan membatalkannya. Apa "aplikasi yang direkomendasikan" yang Anda dapatkan ketika Anda mengklik kanan pada "Open With ..."? Anda perlu memeriksa semua Info.plist mereka.Saya sarankan untuk melihat apakah Anda dapat menggunakan
lsregister -u
untuk membatalkan registrasi aplikasi yang diklaim.itmsp
. Kalau tidak, Anda mungkin harus menghapus.itmsp
dari semua daftar dan kemudian membunuh seluruh database asosiasi finder menggunakanlsregister -kill -seed
. Tidak pernah melakukan itu, tidak tahu berapa banyak kerusakan yang akan terjadi pada seluruh sistem Anda. Mungkin Anda ingin membatalkan registrasi, lalu edit daftar, lalu bunuh dan masukkan kembali basis data. Tidak akan mengejutkan saya jika batal mendaftar tidak menghapus asosiasi jika Anda sudah menghapus dari plist, dan reseed akan menambahkannya kembali jika Anda belum menghapusnya. Plus dengan cara ini Anda tidak akan kehilangan semua asosiasi lain untuk aplikasi yang menyinggung.Yang lebih parah, Xcode bisa melalui dan mengatur bundel bit di semua folder. Saya kira Anda harus menulis skrip menggunakan
GetFileInfo
danSetFile
untuk memindai disk dan membatalkannya, yang agak menyebalkan, tetapi bisa dilakukan. Jari menyeberangi bit bundel tetap tidak disetel. GunakanGetFileInfo
untuk memeriksa dengan menguji beberapa.sumber
Saya yakin Anda bisa memperbaikinya menggunakan ini
/usr/bin/SetFile -a B /path/to/file.itmsp
Uji satu sebelum Anda mencobanya pada semua yang lain, jelas.
Jika Anda perlu menjalankannya di folder yang diberikan:
find . -name \*.itmsp -exec /usr/bin/SetFile -a B {} \;
harus melakukannya untukmu.
sumber
SetFile -a B
mengatur bit bundel. Bahkan, harus dinonaktifkan:SetFile -a b
. Tetapi ini tidak akan berpengaruh karenaHas bundle
bit tidak disetel:GetFileInfo -ab foo.itmsp
kembali0
.