2011-11-23 26 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