2011-11-23 25 views
2

我想告訴OSX的Finder,我的電子郵件客戶端應用程序可以打開.eml文件,迄今爲止它不太好。我從Mail.app的plist中抽出一片葉子,並將大部分UTI值直接複製,只是將UTTypeIdentifier更改爲我自己的公司。Finder沒有看到我的UTI

plist中,因爲它主張:

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.memecode.scribe.email</string> 
     </array> 
     <key>CFBundleTypeRole</key> 
     <string>Viewer</string> 
     <key>CFBundleTypeIconFile</key> 
     <string>Email.icns</string> 
     <key>CFBundleTypeName</key> 
     <string>Email Message</string> 
    </dict> 
</array> 
<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeIconFile</key> 
     <string>Email.icns</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.data</string> 
      <string>public.email-message</string> 
     </array> 
     <key>UTTypeDescription</key> 
     <string>Email Message</string> 
     <key>UTTypeIdentifier</key> 
     <string>com.memecode.scribe.email</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>eml</string> 
      <key>public.mime-type</key> 
      <string>message/rfc822</string> 
     </dict> 
    </dict> 
</array> 

有什麼明顯的是我做錯了什麼?

回答

1

由於Mail爲.eml擴展名聲明瞭一個UTI,所以我認爲爲相同的擴展名定義自己的UTI並不合理。只需在LSItemContentTypes下使用Mail的UTI即可。如果你願意,你可以複製郵件的UTI聲明作爲導入的類型。

+0

確實,您*需要*將Mail的UTI聲明導入到您自己的Info.plist中,然後使用Mail的UTI而不是您自己的'CFBundleDocumentTypes'。我一段時間寫了一個應用程序來幫助這兩個人:http://boredzo.org/uti-plist-helper/ –

+0

這可行,但我不知道如果主機系統上刪除Mail.app會發生什麼?似乎我要依靠Mail.app在那裏,工作正常,這讓我感到不安。我寧願完全獨立於Mail.app。 (目前我正在導入他們的UTI ......這使得我的應用出現在.eml文件的「open with」菜單中) – fret

+0

@fret:如果Mail.app被刪除,那很好。這實際上是編寫導入聲明的關鍵。你說的是,我不擁有這個UTI,但是如果車主不在身邊,這是宣言。 – JWWalker