Bagaimana saya bisa membuat OS X mengenali ekstensi file baru?

16

Di Finder.app, Anda dapat menekan Enteruntuk mengedit nama file atau folder yang saat ini dipilih.

OS X akan secara otomatis memilih hanya bagian nama file, bukan ekstensi:

Ini sangat berguna, karena dengan begitu Anda bisa mulai mengetik nama baru, tanpa khawatir mengubah ekstensi file secara tidak sengaja.

Namun, ini hanya berfungsi untuk jenis file "dikenal". Jika Anda mencobanya dengan ekstensi yang tidak dikenal, seluruh nama file (termasuk ekstensi) akan dipilih:

Saya mencoba memetakan aplikasi yang dapat membuka semua .barfile melalui + I→ “Ubah Semua”, tetapi saya masih mendapatkan perilaku yang dijelaskan di atas.

Di mana daftar jenis file "dikenal" disimpan? Apakah ada cara untuk membuat OS X mengenali jenis file baru?

Mathias Bynens
sumber

Jawaban:

7

Posting SuperUser ini bekerja untuk saya:

Anda perlu menjelajah ke aplikasi yang ingin Anda gunakan untuk membuka file-file ini, dan mengedit bundelnya. Klik kanan aplikasi untuk menangani ekstensi file ini dan pilih Tampilkan Isi Paket . Arahkan ke Contents, dan edit Info.plist. Anda mungkin memerlukan Editor Daftar Properti , yang merupakan bagian dari alat pengembang Apple. Jika Anda beruntung, ini dalam format XML. Edit file ini CFBundleDocumentTypesdan tambahkan entri untuk ekstensi yang Anda inginkan.

Saya menggunakan TextEdit sebagai aplikasi default untuk membuka .barfile. Satu-satunya hal yang saya lakukan berbeda adalah mengubah XML yang masuk di TextEdit Info.plistke:

    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>bar</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>BarDocument</string>
        <key>CFBundleTypeName</key>
        <string>Bar Document</string>
        <key>CFBundleTypeRole</key>
        <string>Document</string>
    </dict>

… Dan kemudian saya menggunakan LSRefresh.app untuk menyegarkan TextEdit di basis data layanan peluncuran. Kemudian itu berfungsi seperti yang Anda sarankan, meskipun mungkin akan memecah tanda tangan kode Textedit (dan aplikasi lain yang ditandatangani) pada Lion.

binarybob
sumber
1
CFBundleTypeExtensionsadalah kunci warisan yang menjadi usang di OS X 10.5 . Metode yang disukai sejak 2007 adalah mendeklarasikan ISK baru, sebagaimana disebutkan di sini dan dijelaskan dalam jawaban saya .
TachyonVortex
5
Maaf, saya harus mengundurkan diri karena ini saran yang buruk. Tidak hanya tidak bijaksana untuk merusak bundel aplikasi (menjalankan risiko efek samping yang aneh atau lebih buruk), tetapi juga dapat sepenuhnya menghancurkan salinan aplikasi. Anda perhatikan bahwa proses ini tidak valid tanda tangan kode tetapi gagal menunjukkan bahwa pada versi macOS yang mendukung kotak pasir (10.7+), aplikasi kotak pasir dengan tanda tangan tidak valid tidak dapat diluncurkan atau digunakan dengan cara apa pun.
Bob
1
@ binarybob, Yang tidak saya mengerti adalah mengapa Anda tidak mengklik kanan file xxx.bardan memilih open with?
Pacerier
@ Bob, Apa standbox aplikasi itu?
Pacerier
Sandboxing Aplikasi @Pacerier adalah fitur keamanan macOS yang sepenuhnya mengisolasi aplikasi dari sistem dan satu sama lain, dengan daftar "hak" yang sangat singkat yang merinci secara spesifik apa yang boleh dilakukan aplikasi . Daftar hak tersebut tertanam dalam tanda tangan kode dan divalidasi setiap kali aplikasi dijalankan, memastikan bahwa kemampuan aplikasi tidak dapat dirusak, baik secara tidak sengaja atau oleh serangan. Lihat dokumen ini untuk penjelasan teknis.
Bob
26

Layanan ISK dan Peluncuran

Di mana daftar jenis file "dikenal" disimpan?

Istilah resmi untuk "tipe file" adalah Uniform Type Identifiers (UTI), dan basis data UTI dikelola oleh Launch Services .

Menggunakan Terminal , Anda dapat melihat konten basis data Layanan Peluncuran menggunakan lsregisteralat, yang disimpan di:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister

Alih-alih menentukan jalur panjang itu setiap kali Anda ingin menjalankan lsregister, Anda dapat menambahkan sementara direktori ke PATH:

PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"

dan kemudian Anda dapat menjalankan lsregisterhanya dengan memasukkan:

lsregister

Untuk melihat konten basis data Layanan Peluncuran:

lsregister -dump

Mendeklarasikan ISK Baru

Apakah ada cara untuk membuat OS X mengenali jenis file baru?

Artikel Apple ini, "Mendeklarasikan Pengidentifikasi Jenis Seragam Baru" , memberikan informasi berguna tentang cara melakukan ini. Inilah proses lengkapnya:

1. Buat aplikasi dummy

Buat aplikasi tiruan untuk mendaftar dengan Layanan Peluncuran:

  • Buka AppleScript Editor (terletak di folder Utilities OS X ).
  • Simpan skrip kosong baru di suatu tempat (mis: pada Desktop Anda), atur Format File -nya ke Aplikasi .

2. Buka file Info.plist-nya

  • Temukan aplikasi boneka baru Anda di Finder.
  • Klik kanan padanya, dan pilih Show Package Contents dari menu popup.
  • Buka folder Kontennya .
  • Buka file Info.plist dalam editor teks (mis: TextEdit ).

3. Tambahkan ISK baru Anda

Ada dua pilihan kunci:

  • UTExportedTypeDeclarations - untuk ekstensi nama file kustom Anda sendiri.
  • UTImportedTypeDeclarations - untuk ekstensi nama file yang sudah ada tetapi tidak dikenali oleh OS X.

Pilih kunci yang paling sesuai dengan kebutuhan Anda.

Kemudian di file Info.plist , sebelum dua baris terakhir ( </dict></plist>), tambahkan kode ini:

<key>KEY</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>IDENTIFIER</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>EXTENSION</string>
            </array>
        </dict>
    </dict>
</array>

membuat perubahan berikut:

  • Ganti KEYdengan kunci yang Anda pilih (salah satu UTExportedTypeDeclarationsatau UTImportedTypeDeclarations).
  • Ganti IDENTIFIERdengan pengidentifikasi DNS terbalik yang sesuai:
    • Diekspor - Sesuatu seperti com.mycompany.mytype
    • Impor - Untuk id Software 's Doom WAD Format, pengenal yang cocok akancom.idsoftware.wad
  • Ganti EXTENSIONdengan ekstensi nama file (tanpa awalan dot), misalnya: wad.

Ini adalah kode minimum yang diperlukan untuk Layanan Peluncuran untuk menerima ISK baru Anda. Anda juga dapat menambahkan properti opsional berikut:

  • UTTypeConformsTo - Lihat Lampiran di bawah ini.
  • UTTypeDescription - Deskripsi yang terlihat oleh pengguna, yang akan ditampilkan di Finder.
  • UTTypeIconFile- Jika Anda menambahkan file Apple Icon Image ke folder Contents / Resources di aplikasi dummy Anda, dan menambahkan nama file di properti ini, maka file yang memiliki ekstensi nama file baru Anda akan menggunakan ikon ini.
  • UTTypeReferenceURL - URL dokumen referensi yang menjelaskan jenis ini.

Berikut ini adalah contoh lengkap yang menunjukkan semua properti opsional:

<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.idsoftware.wad</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>wad</string>
            </array>
        </dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Doom WAD file</string>
        <key>UTTypeIconFile</key>
        <string>DoomWAD.icns</string>
        <key>UTTypeReferenceURL</key>
        <string>http://en.wikipedia.org/wiki/Doom_WAD</string>
    </dict>
</array>

4. Daftarkan UTI baru Anda dengan Layanan Peluncuran

Jalankan perintah ini di Terminal:

lsregister <PATH_TO_APP>

mengganti <PATH_TO_APP>dengan jalur ke aplikasi dummy Anda, misalnya:

lsregister ~/Desktop/MyDummyApp.app

Jika sekarang Anda membuat file dengan ekstensi nama file baru Anda, dan kemudian memilihnya di Finder dan tekan Enter, Finder akan secara otomatis memilih hanya bagian nama file, bukan ekstensi.

Jika Anda melihat konten basis data Layanan Peluncuran:

lsregister -dump

Anda harus menemukan ISK baru Anda terdaftar:

type    id:            50364
        bindableKey:   12608
        generation:    1
        uti:           com.idsoftware.wad
        description:   Doom WAD file
        flags:         imported  active  apple-internal  untrusted
        icon:          DoomWAD.icns
        conforms to:   public.data
        tags:          .wad

Jika nanti Anda ingin membatalkan pendaftaran ISK baru Anda, berikan -uopsi ke lsregister:

lsregister -u ~/Desktop/MyDummyApp.app

Lampiran: Hirarki dan kesesuaian UTI

OS X menyatakan hierarki ISK yang tercantum di sini: System-Declared Uniform Type Identifiers .

Berikut adalah beberapa ISK dalam hierarki:

  • public.content
    • public.text
      • public.rtf
      • public.html
      • public.xml
      • public.plain-text
      • public.source-code
        • public.c-source
        • public.c-header
        • com.sun.java-source
    • public.image
      • public.jpeg
      • public.tiff
      • public.png
    • public.audiovisual-content
      • public.movie
      • public.audio

Setiap ISK "sesuai dengan" induknya ISK:

Misalnya, UTI public.html, yang mendefinisikan teks HTML, sesuai dengan pengidentifikasi teks dasar public.text,. Dalam hal ini, kesesuaian memungkinkan aplikasi yang dapat membuka file teks umum mengidentifikasi file HTML yang dapat dibuka juga. ( ref )

Saat membuat ISK baru, sebaiknya atur UTTypeConformsToproperti menjadi salah satu ISK yang ada.

Misalnya, jika ISK baru Anda adalah jenis kode sumber, maka Anda harus mengatur UTTypeConformsToproperti untuk public.source-code, sehingga dapat dibuka oleh aplikasi yang dapat membuka public.source-codeatau public.plain-textatau public.textfile.

TachyonVortex
sumber
0

Ikuti langkah ini:

  1. Pilih file dengan ekstensi yang tidak dikenal (misalnya, .txt).

  2. Klik kanan dan pilih Get Infoatau gunakan pintasan keyboard Commandiuntuk menampilkan jendela informasi.

  3. Klik pada indikator pengungkapan selain Buka dengan: untuk membuka tampilan terperinci. Pilih aplikasi yang diinginkan dari drop down. Ini akan mengaitkan dokumen dengan aplikasi yang dipilih (Untuk misalnya TextEdit).

  4. Klik pada Perubahan All ... tombol. Pertama-tama akan muncul kotak dialog yang meminta untuk mengonfirmasi maksud Anda dan akan menautkan semua .txtdokumen untuk dibuka dengan TextEdit, dan membiarkan ekstensi tidak dipilih ketika Anda menekan balik pada nama dokumen.

pengguna3127882
sumber