Làm cách nào để OS X nhận ra các phần mở rộng tệp mới?


16

Trong Finder.app, bạn có thể nhấn Enterđể chỉnh sửa tên của tệp hoặc thư mục hiện được chọn.

OS X sẽ tự động chỉ chọn phần tên tệp, không phải phần mở rộng:

Điều này rất hữu ích, bởi vì theo cách đó bạn chỉ có thể bắt đầu nhập tên mới mà không phải lo lắng về việc vô tình thay đổi phần mở rộng tệp.

Tuy nhiên, điều này dường như chỉ hoạt động đối với các loại tệp tin được biết đến. Nếu bạn thử nó với một phần mở rộng không xác định, toàn bộ tên tệp (bao gồm cả phần mở rộng) sẽ được chọn:

Tôi đã thử ánh xạ một ứng dụng có thể mở tất cả .barcác tệp thông qua + I→ Thay đổi tất cả, nhưng tôi vẫn nhận được các hành vi được mô tả ở trên.

Đâu là danh sách các loại tập tin đã biết Có cách nào để OS X nhận ra các loại tệp mới không?

Câu trả lời:


7

Bài đăng SuperUser này đã làm việc cho tôi:

Bạn cần duyệt đến ứng dụng mà bạn muốn sử dụng để mở các tệp này và chỉnh sửa gói của nó. Bấm chuột phải vào ứng dụng để xử lý các phần mở rộng tệp này và chọn Hiển thị Nội dung Gói . Điều hướng đến Contentsvà chỉnh sửa Info.plist. Bạn có thể cần Trình soạn thảo danh sách tài sản , một phần của các công cụ dành cho nhà phát triển của Apple. Nếu bạn may mắn, nó ở định dạng XML. Chỉnh sửa tập tin này CFBundleDocumentTypesvà thêm một mục cho phần mở rộng mà bạn muốn.

Tôi đã sử dụng TextEdit làm ứng dụng mặc định để mở .bartệp. Điều duy nhất tôi đã làm khác là thay đổi XML đã có trong TextEdit Info.plistthành:

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

Sau đó, tôi đã sử dụng LSRefresh.app để làm mới TextEdit trong cơ sở dữ liệu dịch vụ khởi chạy. Sau đó, nó hoạt động như bạn đề xuất, mặc dù nó có thể sẽ phá vỡ chữ ký mã của Textedit (và bất kỳ ứng dụng đã ký nào khác) trên Lion.


1
CFBundleTypeExtensionslà một khóa kế thừa đã bị phản đối trong OS X 10.5 . Phương pháp ưa thích từ năm 2007 là khai báo UTI mới, như được đề cập ở đây và được mô tả trong câu trả lời của tôi .
TachyonVortex

5
Tôi xin lỗi, tôi phải đánh giá thấp điều này bởi vì đây là lời khuyên tồi. Không chỉ là không khôn ngoan khi can thiệp vào một gói ứng dụng (có nguy cơ bị các tác dụng phụ kỳ quái hoặc tệ hơn), mà còn có thể phá hỏng hoàn toàn bản sao của ứng dụng. Bạn lưu ý rằng quy trình này không làm mất hiệu lực chữ ký mã nhưng không chỉ ra rằng trên các phiên bản macOS hỗ trợ hộp cát (10.7+), một ứng dụng hộp cát có chữ ký không hợp lệ không thể được khởi chạy hoặc sử dụng theo bất kỳ cách nào.
Bob

1
@binarybob, Điều tôi không hiểu là tại sao bạn không chỉ cần bấm đúng tệp xxx.barvà chọn open with?
Pacerier

@Bob, ứng dụng standboxing là gì?
Pacerier

@Pacerier Sandboxing App là một tính năng bảo mật của macOS, cách ly hoàn toàn các ứng dụng với hệ thống với nhau, với một danh sách rất ngắn "quyền lợi" chi tiết cụ thể những ứng dụng được phép làm. Danh sách quyền lợi đó được nhúng trong chữ ký mã và được xác thực mỗi khi ứng dụng được chạy, đảm bảo rằng các khả năng của ứng dụng không thể bị can thiệp, do vô tình hoặc do một cuộc tấn công. Xem tài liệu này để được giải thích kỹ thuật.
Bob

26

UTI và Dịch vụ ra mắt

Đâu là danh sách các loại tập tin đã biết

Thuật ngữ chính thức cho "loại tệp" là Số nhận dạng loại thống nhất (UTI) và cơ sở dữ liệu của UTI được duy trì bởi Launch Services .

Sử dụng Terminal , bạn có thể xem nội dung của cơ sở dữ liệu Launch Services bằng lsregistercông cụ được lưu trữ tại:

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

Thay vì chỉ định đường dẫn dài đó mỗi khi bạn muốn chạy lsregister, bạn có thể tạm thời thêm thư mục của nó vào PATH:

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

và sau đó bạn có thể chạy lsregisterbằng cách nhập:

lsregister

Để xem nội dung của cơ sở dữ liệu Launch Services:

lsregister -dump

Tuyên bố UTI mới

Có cách nào để OS X nhận ra các loại tệp mới không?

Bài viết này của Apple, "Khai báo định danh loại đồng phục mới" , cung cấp thông tin hữu ích về cách thực hiện việc này. Đây là quá trình hoàn chỉnh:

1. Tạo một ứng dụng giả

Tạo một ứng dụng giả để đăng ký với Launch Services:

  • Mở AppleScript Editor (nằm trong thư mục Tiện ích của OS X ).
  • Lưu tập lệnh trống mới ở đâu đó (ví dụ: trên Màn hình của bạn), đặt Định dạng tệp của nó thành Ứng dụng .

2. Mở tệp Info.plist của nó

  • Xác định vị trí ứng dụng giả mới của bạn trong Finder.
  • Nhấp chuột phải vào nó và chọn Hiển thị nội dung gói từ menu bật lên.
  • Mở thư mục Nội dung của nó .
  • Mở tệp Info.plist trong trình soạn thảo văn bản (ví dụ: TextEdit ).

3. Thêm UTI mới của bạn

Có hai lựa chọn:

  • UTExportedTypeDeclarations - cho phần mở rộng tên tệp tùy chỉnh của riêng bạn.
  • UTImportedTypeDeclarations - đối với các phần mở rộng tên tệp đã tồn tại nhưng không được OS X.

Chọn chìa khóa phù hợp nhất cho nhu cầu của bạn.

Sau đó, trong tệp Info.plist , trước hai dòng cuối cùng ( </dict></plist>), hãy thêm mã này:

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

thực hiện các thay đổi sau:

  • Thay thế KEYbằng khóa bạn đã chọn (hoặc UTExportedTypeDeclarationshoặc UTImportedTypeDeclarations).
  • Thay thế IDENTIFIERbằng một định danh DNS ngược phù hợp:
    • Đã xuất - Một cái gì đó như com.mycompany.mytype
    • Đã nhập - Đối với định dạng Doom WAD của Phần mềm id , số nhận dạng phù hợp sẽ làcom.idsoftware.wad
  • Thay thế EXTENSIONbằng phần mở rộng tên tệp (không có dấu chấm hàng đầu), ví dụ : wad.

Đây là mã tối thiểu cần thiết để Launch Services chấp nhận UTI mới của bạn. Bạn cũng có thể thêm các thuộc tính tùy chọn sau:

  • UTTypeConformsTo - Xem Phụ lục bên dưới.
  • UTTypeDescription - Mô tả người dùng có thể nhìn thấy, sẽ được hiển thị trong Finder.
  • UTTypeIconFile- Nếu bạn thêm tệp Hình ảnh Biểu tượng của Apple vào thư mục Nội dung / Tài nguyên trong ứng dụng giả của bạn và thêm tên tệp của nó trong thuộc tính này, thì các tệp có phần mở rộng tên tệp mới của bạn sẽ sử dụng biểu tượng này.
  • UTTypeReferenceURL - URL của tài liệu tham khảo mô tả loại này.

Đây là một ví dụ hoàn chỉnh hiển thị tất cả các thuộc tính tùy chọn:

<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. Đăng ký UTI mới của bạn với Dịch vụ Khởi chạy

Chạy lệnh này trong Terminal:

lsregister <PATH_TO_APP>

thay thế <PATH_TO_APP>bằng đường dẫn đến ứng dụng giả của bạn, ví dụ:

lsregister ~/Desktop/MyDummyApp.app

Nếu bây giờ bạn tạo một tệp có phần mở rộng tên tệp mới của mình, sau đó chọn tệp đó trong Finder và nhấn Enter, Finder sẽ tự động chỉ chọn phần tên tệp chứ không phải phần mở rộng.

Nếu bạn xem nội dung của cơ sở dữ liệu Dịch vụ khởi chạy:

lsregister -dump

bạn nên tìm UTI mới được liệt kê:

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

Nếu sau này bạn muốn hủy đăng ký UTI mới của mình, hãy chuyển -utùy chọn này sang lsregister:

lsregister -u ~/Desktop/MyDummyApp.app

Phụ lục: Phân cấp và tuân thủ UTI

OS X tuyên bố một hệ thống phân cấp của UTI được liệt kê ở đây: Số nhận dạng loại thống nhất được khai báo hệ thống .

Dưới đây là một vài UTI trong hệ thống phân cấp:

  • 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

Mỗi UTI "phù hợp với" UTI mẹ của nó:

Ví dụ, UTI public.html, định nghĩa văn bản HTML, tuân thủ định danh văn bản cơ sở , public.text. Trong trường hợp này, sự phù hợp cho phép các ứng dụng có thể mở các tệp văn bản chung xác định các tệp HTML cũng như các tệp mà nó có thể mở. (tham khảo )

Khi tạo một UTI mới, bạn nên đặt thuộc UTTypeConformsTotính thành một trong những UTI hiện có.

Ví dụ: nếu UTI mới của bạn là một loại mã nguồn, thì bạn nên đặt thuộc UTTypeConformsTotính thành public.source-code, để nó có thể được mở bởi bất kỳ ứng dụng nào có thể mở public.source-codehoặc public.plain-texthoặc public.texttệp.


0

Thực hiện theo các bước sau:

  1. Chọn tệp có phần mở rộng không được nhận dạng (giả sử .txt).

  2. Nhấp chuột phải và chọn Get Infohoặc sử dụng phím tắt Commandiđể hiển thị cửa sổ thông tin.

  3. Nhấp vào chỉ báo công bố bên cạnh Mở bằng: để mở chế độ xem chi tiết. Chọn ứng dụng mong muốn từ trình đơn thả xuống. Điều này sẽ liên kết tài liệu với ứng dụng đã chọn (Ví dụ: TextEdit).

  4. Nhấp chuột vào Change Tất cả ... nút. Đầu tiên, nó sẽ hiển thị một hộp thoại yêu cầu xác nhận ý định của bạn và sẽ liên kết tất cả các .txttài liệu để mở bằng TextEdit và để phần mở rộng không được chọn khi bạn nhấn return vào tên của tài liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.