Kembalikan Asosiasi Tipe File

12

Saya sesekali bekerja dengan paket iTunes Music Store. Paket-paket ini memiliki .itmspekstensi. Seperti .app, .itmsppada dasarnya adalah direktori kontainer. .itmspfolder 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 .itmspekstensi. 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 .itmspdirektori 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 .itmspfile diperlakukan sebagai folder sekali lagi?

michaelmichael
sumber
Sudahkah Anda mencoba menyeret dan menjatuhkan file pada Ikon Aplikasi Xcode dan melihat apakah itu melakukan apa yang Anda inginkan?
MrDaniel
Terima kasih untuk sarannya. Itu tidak relevan dengan masalah yang ada, jadi saya akan mencoba mengedit pertanyaan saya untuk menjelaskan maksud saya.
michaelmichael
1
Apa versi OS X yang Anda jalankan? Apa versi Xcode?
Old Pro
Saya menghapus Jawaban saya yang menghapus tipe-tipe dari CFBundleDocumentTypes dan mematikannya di Launch Service DataBase. Ini berfungsi untuk sementara waktu tetapi tampaknya untuk menegaskan kembali dirinya sendiri di beberapa titik nanti. ??
markhunte

Jawaban:

11

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:

masukkan deskripsi gambar di sini

Finder menganggap direktori sebagai paket jika salah satu dari kondisi berikut ini benar (dari Panduan Pemrograman Bundle ):

  1. 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.

  2. Direktori memiliki ekstensi yang diklaim oleh beberapa aplikasi lain sebagai tipe paket (cari com.apple.packagedi output mdls -name kMDItemContentTypeTree <foldername>untuk mengetahuinya.)

  3. Direktori ini memiliki bit set paketnya (jika GetFileInfo -ab <foldername>dikembalikan 1, sudah diatur.)

Kasus 2. berlaku untuk folder .itmsp: Application Loader.appjenis ekspor com.apple.itunes-producer.itmspdan atur agar sesuai dengan com.apple.package:

$ mkdir foo.itmsp
$ mdls -name kMDItemContentTypeTree foo.itmsp/
kMDItemContentTypeTree = (
    "com.apple.itunes-producer.itmsp",
    "com.apple.package",
    (...)
)
$ grep -B 5 -A 8 com.apple.package /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Info.plist 
    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>com.apple.package</string>
                <string>public.composite-content</string>
            </array>
            <key>UTTypeDescription</key>
            <string>iTunes Package</string>
            <key>UTTypeIconFile</key>
            <string>ITMSP.icns</string>
            <key>UTTypeIdentifier</key>
            <string>com.apple.itunes-producer.itmsp</string>

Solusi: ketik deklarasi ulang com.apple.itunes-producer.itmsp

Sebuah solusi adalah mendeklarasikan ulang tipe com.apple.itunes-producer.itmspdan ekstensi itmspsebagai folder dan memaksa Layanan Peluncuran untuk menggunakan deklarasi tipe yang dimodifikasi.

Catatan penting:

Meskipun itu andal memecahkan masalah OP, solusi yang diusulkan, ketika diterapkan ke paket lain, tidak menampilkannya sebagai folder.

Saya telah menemukan bahwa solusi yang diusulkan tampaknya hanya bekerja dengan jenis file yang dideklarasikan oleh aplikasi yang terletak di jalur aplikasi non standar.

Ini adalah kasus dengan Application Loader.app, yang terletak di /Applications/Xcode.app/Contents/Applications/.

Jika Anda tertarik dengan solusi parsial, periksa bagian akhir jawaban ini.

Agar folder .itmsp ditampilkan sebagai folder oleh Finder, ikuti langkah-langkah berikut:

  1. Buka Automator di folder Aplikasi dan pilih Aplikasi :

    masukkan deskripsi gambar di sini

  2. Pilih Utilitas di daftar Perpustakaan, pilih Jalankan Script Shell dan seret ke panel di sebelah kanan:

    masukkan deskripsi gambar di sini

  3. Ganti konten skrip default dengan exit 0:

    masukkan deskripsi gambar di sini

  4. Simpan aplikasi sebagai itmspOpener:

    masukkan deskripsi gambar di sini

  5. Tutup Automator.

  6. Pilih itmspOpener.appdan tampilkan isinya:

    masukkan deskripsi gambar di sini

  7. Temukan Konten> Info.plist dan buka dengan editor favorit Anda:

    masukkan deskripsi gambar di sini

  8. Ganti bagian ini di Info.plist:

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>itmsp</string>
            </array>
            <key>CFBundleTypeName</key>
                <string>itmsp folder</string>
            <key>CFBundleTypeRole</key>
                <string>Viewer</string>
            <key>CFBundleTypeIconFile</key>
                <string>folder</string>
            <key>LSTypeIsPackage</key>
                <false/>
            <key>LSHandlerRank</key>
                <string>Owner</string>
        </dict>
    </array>
    (...)
    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>kUTTypeDirectory</string>
            </array>
            <key>UTTypeDescription</key>
            <string>itmsp folder</string>
            <key>UTTypeIconFile</key>
            <string>folder.icns</string>
            <key>UTTypeIdentifier</key>
            <string>com.apple.itunes-producer.itmsp</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <string>itmsp</string>
            </dict>
        </dict>
    </array>
    

    Catatan: Kenapa kUTTypeDirectorybukannya public.directorydi UTExportedTypeDeclarations? Dari dokumentasi Apple : Penting: Saat menggunakan ISK yang ditentukan sistem dalam kode Anda, Anda harus menggunakan konstanta yang didefinisikan dalam UTCoreTypes.hkerangka Layanan Peluncuran bila tersedia, daripada string UTI yang sebenarnya. Misalnya, kirimkan kUTTypeApplication daripada "com.apple.application". "Pengidentifikasi Jenis Seragam yang Dideklarasikan Sistem" mencantumkan konstanta ini sebagai tambahan pada string UTI.

  9. Kaitkan file .itmsp ke itmspOpenerdan tekan tombol Change All...:

    masukkan deskripsi gambar di sini

  10. Setel ulang basis data Layanan Peluncuran:

    $ lsregister -kill -r -domain local -domain system -domain user
    

    (pada OS X 10.8 lsregisterterletak di /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/.)

  11. Buat folder .itmsp dan daftarkan propertinya:

    $ mkdir foo3.itmsp
    $ mdls -name kMDItemContentTypeTree foo3.itmsp/
    kMDItemContentTypeTree = (
        "public.folder",
        "public.directory",
        "public.item"
    )
    

    Karena basis data Layanan Peluncuran direset, sekarang Finder menunjukkan folder .itmsp sebagai folder.

  12. Buka itmspOpener.appuntuk memuat file plistnya dan mendaftar com.apple.itunes-producer.itmsp:

    $ open ~/Desktop/itmspOpener.app
    
  13. Mulai Application Loader.app:

    $ open '/Applications/Xcode.app/Contents/Applications/Application Loader.app'
    

    Folder foo3.itmspharus tetap ditampilkan sebagai folder.

  14. Periksa properti folder lagi:

    $ mdls -name kMDItemContentTypeTree foo3.itmsp/
    kMDItemContentTypeTree = (
        "public.directory",
        "public.item",
        "public.content"
    )
    

    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:

  1. Buat itmspOpener.appdan modifikasi Info.plistseperti dijelaskan di atas.

  2. Buat /usr/local/bin/itmspTypeLoaderdengan konten ini (variabel itmspOpenermenunjuk ke lokasi tempat itmspOpener.apptinggal, ubah seperlunya):

    #!/bin/bash
    
    itmspOpener="/Users/jaume/Applications/itmspOpener.app/"
    
    echo "$(date): Starting" > /tmp/itmspTypeLoader.log
    sleep 15
    echo "$(date): Deleting Launch Services database" >> /tmp/itmspTypeLoader.log
    /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user >> /tmp/itmspTypeLoader.log
    sleep 15
    echo "$(date): Starting $itmspOpener" >> /tmp/itmspTypeLoader.log
    open $itmspOpener >> /tmp/itmspTypeLoader.log
    sleep 1
    echo "$(date): Starting Application Loader.app" >> /tmp/itmspTypeLoader.log
    open "/Applications/Xcode.app/Contents/Applications/Application Loader.app/"
    
    # Wait until process "Application Loader.app" exists
    while [ $(ps -ef|grep -v grep|grep -c "Application Loader") -ne 1 ]; do
        sleep 1
        echo "$(date): Waiting" >> /tmp/itmspTypeLoader.log
    done
    # Send TERM signal
    kill -TERM $(ps -ef|grep "Application Loader"|grep -v grep|awk "{print \$2}")
    if [ $? -eq 0 ]; then
        echo "$(date): Application Loader killed" >> /tmp/itmspTypeLoader.log
    else
        echo "$(date): Application Loader could not be killed" >> /tmp/itmspTypeLoader.log
    fi
    echo "$(date): Exiting" >> /tmp/itmspTypeLoader.log
    

    Baik sleep 15sebelum dan sesudah berlari lsregisteradalah yang paling penting. Jika Anda tidak melihat hasil yang diinginkan, coba berbagai penundaan.

  3. Buat /usr/local/bin/itmspTypeLoaderLauncherdengan konten ini:

    #!/bin/bash
    
    # $1 returns the short name of the user who is logging in
    su - $1 -c /usr/local/bin/itmspTypeLoader &
    
  4. Atur kedua skrip yang dapat dieksekusi:

    $ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher 
    
  5. Tetapkan /usr/local/bin/itmspTypeLoaderLaunchersebagai kait masuk :

    $ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
    
  6. Mulai ulang agar perubahan diterapkan. Setelah masuk, Anda akan melihat ini:

    masukkan deskripsi gambar di sini

    dan lsregister -dumpharus mengungkapkan bahwa itmspOpener.app's UTExportedTypeDeclarationslebih diprioritaskan Application Loader.app' s:

    $ lsregister -dump | less
    bundle  id:            24748
            path:          /Users/jaume/Desktop/itmspOpener.app/
            name:          itmspOpener
            (...)
            flags:         apple-internal  relative-icon-path  ui-element  has-min-sys-version-by-arch  hi-res-capable  user-can-change-hi-res-mode  
            item flags:    container  package  application  extension-hidden  native-app  scriptable  services  x86_64  
            (...)
            --------------------------------------------------------
            type    id:            33796
                    uti:           com.apple.itunes-producer.itmsp
                    description:   itmsp folder
                    flags:         exported  active  apple-internal  trusted  
                    icon:          Contents/Resources/folder.icns
                    conforms to:   kuttypedirectory
                    tags:          .itmsp
            --------------------------------------------------------
            (...)
    bundle  id:            24600
            path:          /Applications/Xcode.app/Contents/Applications/Application Loader.app/
            name:          Application Loader
            (...)
            flags:         apple-internal  relative-icon-path  hi-res-capable  user-can-change-hi-res-mode  
            item flags:    container  package  application  extension-hidden  native-app  i386  x86_64  
            (...)
            --------------------------------------------------------
            type    id:            33832
                    uti:           com.apple.itunes-producer.itmsp
                    description:   iTunes Package
                    flags:         exported  inactive  apple-internal  trusted  
                    icon:          Contents/Resources/ITMSP.icns
                    conforms to:   com.apple.package, public.composite-content
                    tags:          .itmsp
            --------------------------------------------------------
    

    Apakah Anda melihat inactivebendera 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:

masukkan deskripsi gambar di sini

dan dapat mengonfirmasi bahwa folder .itmsp ditampilkan sebagai folder selama pembaruan:

masukkan deskripsi gambar di sini

dan sesudahnya:

masukkan deskripsi gambar di sini

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 bashskrip dan Automator:

  • Script membuat folder sementara yang tersembunyi di dalam paket, mengungkapkannya di Finder (sehingga mengungkapkan paket sebagai folder) dan kemudian menghapus folder sementara.

    catatan:

    Sebaliknya skrip dapat membuat file sementara yang tersembunyi. Namun, saya lebih suka membuat folder karena rmdirhanya menghapus folder kosong , sementara rmmenghapus file apa pun , jadi jika, karena alasan tertentu. skrip mendatangkan malapetaka, hanya folder kosong yang akan dihapus, yang mungkin tidak seburuk jika file dihapus.

  • 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:

  1. Buka Automator di folder Aplikasi dan pilih Aplikasi :

    masukkan deskripsi gambar di sini

  2. Pilih Utilitas di daftar Perpustakaan, pilih Jalankan Script Shell dan seret ke panel di sebelah kanan:

    masukkan deskripsi gambar di sini

  3. Setel masukan Lulus ke sebagai argumen :

    masukkan deskripsi gambar di sini

  4. Ganti konten skrip default dengan ini:

    for f in "$@"; do
        # If not dealing with a directory, exit
        if [ ! -d "$f" ]; then exit; fi
        # Create a temporary directory inside the itmsp "file"
        tmpdir="$f/.itmspOpener$$"
        if mkdir $tmpdir; then
            # Reveal in Finder
            open -R $tmpdir
            # Delete temporary file
            rmdir $tmpdir
        fi
    done
    
  5. Simpan aplikasi sebagai itmspOpener:

    masukkan deskripsi gambar di sini

  6. 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:

masukkan deskripsi gambar di sini

Mari kita perbaiki ini juga:

  1. Pastikan Automator ditutup.

  2. Pilih itmspOpener dan tampilkan kontennya:

    masukkan deskripsi gambar di sini

  3. Temukan Konten> Info.plist dan buka dengan editor favorit Anda:

    masukkan deskripsi gambar di sini

  4. Ganti nilai untuk kunci ini dalam CFBundleDocumentTypesarray:

    <key>CFBundleTypeName</key>
    <string>itmsp folder</string>
    

    dan tambahkan kunci ini:

    <key>CFBundleTypeIconFile</key>
    <string>folder</string>
    

    Sekarang, bagian ini terlihat seperti ini:

    masukkan deskripsi gambar di sini

  5. Beralih ke Finder, pilih folder, tekan I, pilih ikon folder di sudut kiri atas dan salin dengan C:

    masukkan deskripsi gambar di sini

  6. Buka Pratinjau dan pilih File> Baru dari Clipboard. Simpan file sebagai folder.icns:

    masukkan deskripsi gambar di sini

  7. Salin folder.icnske itmspOpener/Contents/Resources:

    masukkan deskripsi gambar di sini

  8. Kaitkan file .itmsp ke itmspOpenerdan tekan tombol Change All...:

    masukkan deskripsi gambar di sini

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:

masukkan deskripsi gambar di sini

Sekarang klik dua kali file .itmsp dan tontonlah itu terbuka sebagai folder:

masukkan deskripsi gambar di sini

Jaume
sumber
Ini sangat mengesankan ... TAPI tampaknya ada satu masalah yang mengganggu: Jika Finder ada dalam tampilan kolom (jenis tampilan pilihan saya), apa pun yang ada di dalam .itmspfolder 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.
michaelmichael
1
Kamu benar. Saya tidak mengantisipasi Anda menggunakan tampilan kolom, meskipun saya harus mengatakan itu masuk akal ketika berhadapan dengan ribuan folder .itmsp. Tapi saya menemukan cara untuk menyelesaikan masalah, yaitu memaksa Finder untuk memperlakukan folder .itmsp sebagai folder. Lihatlah edit saya (atau lompat langsung ke paragraf terakhir yang disebut Solusi, tetapi jangan lupa untuk memodifikasinya Info.plist mspOpener pertama seperti yang dijelaskan dalam paragraf Trik.)
jaume
Luar biasa! Terima kasih atas jawabannya. Ini adalah tampilan yang sangat menarik pada beberapa hal yang membuat Finder dan OS X tergerak.
michaelmichael
Terima kasih, saya senang Anda menemukannya berguna! (Saya akan mengedit jawaban nanti untuk meningkatkan readibility dan memberikan lebih banyak struktur.)
jaume
Saya akhirnya menemukan waktu untuk mengedit jawabannya. Saya telah memesan ulang paragraf dan menambahkan bukti bahwa solusi yang dijelaskan dalam jawaban saya kebal terhadap pembaruan iTunes.
jaume
7

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.plistdan jalankan lsregister -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/lsregisterdi 10.5 dan yang lebih baru.

Lri
sumber
Apakah Anda yakin bahwa membatalkan pendaftaran aplikasi setelah mengubahnya Info.plistakan membatalkan registrasi jenis file yang Anda hapus dari daftar? Saya bisa membayangkan itu bekerja dan saya bisa dengan mudah membayangkan itu gagal. terlalu.
Old Pro
@OldPro Ya, lsregister -u $app && lsregister $apptampaknya menerapkan perubahan ke Info.plist setidaknya dalam kasus ini.
Lri
Ini adalah jawaban yang luar biasa - perlu diingat bahwa saat berikutnya Anda meningkatkan Xcode - Anda mungkin berakhir dengan Application Loader yang mendaftarkan default CFBundleDocumentTypessehingga Anda mungkin hanya menghapus "alat" itu ketika muncul jika Anda tidak membutuhkannya dan / atau ban memodifikasinya.
bmike
2

Berikut adalah kutipan yang relevan dari Apple documenation tentang bundel ( penekanan ditambahkan )

Bagaimana Sistem Mengidentifikasi Kumpulan dan Paket

Finder menganggap direktori sebagai paket jika salah satu dari kondisi berikut ini benar:

  • Direktori tersebut memiliki ekstensi nama file yang dikenal: .app, .bundle, .framework, .plugin, .kext, dan sebagainya.
  • Direktori ini memiliki ekstensi yang diklaim beberapa aplikasi lain mewakili jenis paket; lihat “ Paket Dokumen .”
  • Direktori ini memiliki bit set paketnya.

Cara yang lebih disukai untuk menentukan paket adalah dengan memberi direktori paket ekstensi nama file yang dikenal. Untuk sebagian besar, Xcode menangani ini untuk Anda dengan menyediakan template yang menerapkan ekstensi yang benar. Yang harus Anda lakukan adalah membuat proyek Xcode dari tipe yang sesuai.

Hampir pasti Xcode menyatakan bahwa ia mengklaim .itmspmewakili jenis paket, seperti yang dijelaskan dalam Paket Dokumen . Jadi mungkin menghapus ekstensi itu dari Xcode Info.plistakan 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 -uuntuk membatalkan registrasi aplikasi yang diklaim .itmsp. Kalau tidak, Anda mungkin harus menghapus .itmspdari semua daftar dan kemudian membunuh seluruh database asosiasi finder menggunakan lsregister -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 GetFileInfodan SetFileuntuk memindai disk dan membatalkannya, yang agak menyebalkan, tetapi bisa dilakukan. Jari menyeberangi bit bundel tetap tidak disetel. Gunakan GetFileInfountuk memeriksa dengan menguji beberapa.

Pro tua
sumber
0

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.

TJ Luoma
sumber
1
SetFile -a B mengatur bit bundel. Bahkan, harus dinonaktifkan: SetFile -a b. Tetapi ini tidak akan berpengaruh karena Has bundlebit tidak disetel: GetFileInfo -ab foo.itmspkembali 0.
jaume