UTIs และบริการเรียกใช้
รายการประเภทไฟล์ "รู้จัก" จัดเก็บอยู่ที่ใด
คำที่เป็นทางการสำหรับ "ประเภทไฟล์" คือ ตัวระบุประเภทเครื่องแบบ (UTIs) และฐานข้อมูลของ UTIs ถูกดูแลโดย เปิดตัวบริการ .
ใช้ สถานีปลายทาง ,
คุณสามารถดูเนื้อหาของฐานข้อมูล Launch Services ได้โดยใช้ lsregister
เครื่องมือซึ่งถูกเก็บไว้ที่:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
แทนที่จะระบุเส้นทางที่ยาวทุกครั้งที่คุณต้องการเรียกใช้ lsregister
คุณสามารถเพิ่มไดเรกทอรีลงในของคุณชั่วคราว PATH
:
PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"
จากนั้นคุณสามารถเรียกใช้ lsregister
เพียงป้อน:
lsregister
ในการดูเนื้อหาของฐานข้อมูล Launch Services:
lsregister -dump
ประกาศ UTIs ใหม่
มีวิธีที่จะทำให้ OS X รู้จักชนิดไฟล์ใหม่หรือไม่?
บทความของ Apple นี้ "ประกาศตัวระบุชนิดเครื่องแบบใหม่" ,
ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับวิธีการทำเช่นนี้ นี่คือกระบวนการที่สมบูรณ์:
1. สร้างแอปพลิเคชันจำลอง
สร้างแอปพลิเคชันจำลองเพื่อลงทะเบียนด้วย Launch Services:
- เปิด AppleScript Editor (อยู่ใน OS X's ยูทิลิตี้ โฟลเดอร์)
- บันทึกสคริปต์เปล่าใหม่ที่ใดที่หนึ่ง (เช่น: บนเดสก์ท็อปของคุณ), ตั้งค่า รูปแบบไฟล์ ไปยัง ใบสมัคร .
2. เปิดไฟล์ Info.plist
- ค้นหาแอปพลิเคชันจำลองใหม่ของคุณใน Finder
- คลิกขวาที่มันแล้วเลือก แสดงเนื้อหาของแพ็คเกจ จากเมนูป๊อปอัพ
- เปิดมัน สารบัญ โฟลเดอร์
- เปิด Info.plist ไฟล์ในโปรแกรมแก้ไขข้อความ (เช่น: TextEdit )
3. เพิ่ม UTI ใหม่ของคุณ
มีให้เลือกสองปุ่ม:
UTExportedTypeDeclarations
- สำหรับส่วนขยายชื่อไฟล์ที่กำหนดเองของคุณเอง
UTImportedTypeDeclarations
- สำหรับส่วนขยายชื่อไฟล์ที่มีอยู่แล้ว แต่ไม่รู้จักโดย OS X
เลือกรหัสที่เหมาะสมที่สุดสำหรับความต้องการของคุณ
จากนั้นใน Info.plist ไฟล์ก่อนสองบรรทัดสุดท้าย ( </dict></plist>
) เพิ่มรหัสนี้:
<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>
ทำการเปลี่ยนแปลงต่อไปนี้:
- แทนที่
KEY
ด้วยรหัสที่คุณเลือก (เช่น UTExportedTypeDeclarations
หรือ UTImportedTypeDeclarations
)
- แทนที่
IDENTIFIER
ด้วยตัวระบุ reverse-DNS ที่เหมาะสม:
- ส่งออกแล้ว - มีบางอย่างที่เหมือนกัน
com.mycompany.mytype
- นำเข้า - สำหรับ ซอฟต์แวร์ id 's Doom WAD รูปแบบตัวระบุที่เหมาะสมจะเป็น
com.idsoftware.wad
- แทนที่
EXTENSION
ด้วยนามสกุลไฟล์ (ไม่มีจุดนำ) เช่น: wad
.
นี่คือรหัสขั้นต่ำที่จำเป็นสำหรับการเปิดตัวบริการเพื่อยอมรับ UTI ใหม่ของคุณ
คุณยังสามารถเพิ่มคุณสมบัติทางเลือกต่อไปนี้:
UTTypeConformsTo
- ดูภาคผนวกด้านล่าง
UTTypeDescription
- คำอธิบายที่ผู้ใช้มองเห็นได้ซึ่งจะปรากฏใน Finder
UTTypeIconFile
- หากคุณเพิ่ม รูปภาพไอคอนของ Apple ไฟล์ไปที่ สารบัญ / ทรัพยากรธรรมชาติ โฟลเดอร์ในแอปพลิเคชันจำลองของคุณและเพิ่มชื่อไฟล์ในคุณสมบัตินี้
จากนั้นไฟล์ที่มีนามสกุลไฟล์ใหม่จะใช้ไอคอนนี้
UTTypeReferenceURL
- URL ของเอกสารอ้างอิงที่อธิบายถึงประเภทนี้
นี่คือตัวอย่างที่สมบูรณ์ที่แสดงคุณสมบัติที่เป็นตัวเลือกทั้งหมด:
<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. ลงทะเบียน UTI ใหม่ของคุณด้วย Launch Services
เรียกใช้คำสั่งนี้ในเทอร์มินัล:
lsregister <PATH_TO_APP>
การแทนที่ <PATH_TO_APP>
ด้วยพา ธ ไปยังแอปพลิเคชันจำลองของคุณเช่น:
lsregister ~/Desktop/MyDummyApp.app
หากตอนนี้คุณสร้างไฟล์ที่มีนามสกุลไฟล์ใหม่แล้วเลือกไฟล์ใน Finder
และตี เข้าสู่ ตัวค้นหาควรเลือกเฉพาะชื่อไฟล์โดยอัตโนมัติไม่ใช่ส่วนขยาย
หากคุณดูเนื้อหาของฐานข้อมูล Launch Services:
lsregister -dump
คุณควรหา UTI ใหม่ของคุณในรายการ:
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
หากภายหลังคุณต้องการยกเลิกการลงทะเบียน UTI ใหม่ให้ผ่าน -u
ตัวเลือกที่จะ lsregister
:
lsregister -u ~/Desktop/MyDummyApp.app
ภาคผนวก: ลำดับชั้นและความสอดคล้องของ UTI
OS X ประกาศลำดับชั้นของ UTIs ที่แสดงไว้ที่นี่: ตัวระบุประเภทเครื่องแบบแบบระบบประกาศ .
นี่คือ UTIs บางส่วนในลำดับชั้น:
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
แต่ละ UTI "สอดคล้องกับ" UTI หลักของมัน:
ตัวอย่างเช่น UTI public.html
ซึ่งกำหนดข้อความ HTML สอดคล้องกับ
ตัวระบุข้อความฐาน public.text
. ในกรณีนี้ความสอดคล้องช่วยให้แอปพลิเคชัน
ที่สามารถเปิดไฟล์ข้อความทั่วไประบุไฟล์ HTML เป็นไฟล์ที่สามารถเปิดได้เช่นกัน
( อ้าง )
เมื่อสร้าง UTI ใหม่คุณควรตั้งค่า UTTypeConformsTo
คุณสมบัติหนึ่ง
ของ UTIs ที่มีอยู่
ตัวอย่างเช่นถ้า UTI ใหม่ของคุณเป็นรหัสต้นฉบับ
จากนั้นคุณควรตั้งค่า UTTypeConformsTo
ทรัพย์สินเพื่อ public.source-code
,
เพื่อให้สามารถเปิดได้โดยแอปพลิเคชันใด ๆ ที่สามารถเปิดได้ public.source-code
หรือ public.plain-text
หรือ public.text
ไฟล์
CFBundleTypeExtensions
เป็นรหัสมรดกซึ่งกลายเป็น เลิกใช้แล้วใน OS X 10.5 . วิธีที่ต้องการตั้งแต่ปี 2550 คือการประกาศ UTIs ใหม่ดังที่กล่าวไว้ ที่นี่ และอธิบายไว้ใน คำตอบของฉัน .