2012-02-20 99 views
15

有iPhone应用程序“另一个邮件客户端”应该能够打开任何文件发送它作为附件。所以,我想将此应用程序与任何具有任何扩展名的文件相关联。如何将iPhone应用程序与_every_文件类型关联?

按照文档,我们应该声明支持根UTI类型的文件public.data - 任何文件都应该属于这种类型。它有效,但根本不。在这种情况下,我们的应用程序将无法打开任何文件,但只能打开已在系统中注册的文件。例如,如果在任何应用程序(例如,dropbox)中,我们将尝试使用UIDocumentInteractionController“打开......”文件,其中包含未知扩展名(file.unknowntype),那么答案将是负面的,尽管事实上我们已经注册我们的应用程序,它支持根UTI型public.data。但是,如果您安装了另一个支持扩展名为(* .unknowntype)的文件的应用程序,那么我们的应用程序也将能够打开这些文件,并将显示在“open in ...”应用程序列表中。

UPD: @Gabriel这是我的Info.plist文件的CFBundleDocumentTypes部分:

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>MyMail</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>public.data</string> 
     </array> 
     <key>CFBundleTypeRole</key> 
     <string>Viewer</string> 
     <key>LSHandlerRank</key> 
     <string>Default</string> 
     <key>CFBundleTypeIconFiles</key> 
     <array> 
      <string>Icon29.png</string> 
      ... 
      <string>Icon114.png</string> 
     </array> 
    </dict> 
</array> 
+0

请让我们看看您的info.plist中的CFBundleDocumentTypes部分。 – Gabriel 2012-02-22 21:09:20

回答

2

我做了一个应用程序有以下设置

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeIconFiles</key> 
     <array/> 
     <key>CFBundleTypeName</key> 
     <string>name</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>public.data</string> 
     </array> 
    </dict> 
</array> 

当我尝试打开来自Safari的.pdf,这个应用程序显示在“打开..”列表中。你可以制作一个示例应用程序并尝试它吗?

UPD:

好像权利要求“public.data”(也试过public.item,public.content)指文件,属于设置“所有已知的系统尿路感染”,而不是任何文件。所以,你将能够处理99% of files,用户想通过电子邮件发送,但不是全部。另一种方法是导出你认为重要的UTI,但默认情况下不在系统UTI中。

+0

系统默认支持PDF类型,所以没关系。尝试打开具有未知扩展名的文件(例如* .unknowntype)。 – ddnv 2012-02-25 06:09:57

0

朋友,我在发布答案之前正确阅读了您的问题。我再次想到,你将拥有一组已知的“任何类型”文件来批量注册。但是,您希望动态调整您的应用程序,以便将来为您的应用程序注册任何文件类型,并使其可附着。就我的知识而言,你不能让你的应用程序普遍支持任何未知的文件类型。让我来解释发生了什么,

  1. 假定你的应用程序APP1那么它不知道有关文件扩展名为.xyz iPhone上安装它。

  2. 但是,后来我开发了另一个应用程序APP2,它包含上面的代码,并且我在APP2的任何iPhone上安装了.XYZ类型。

  3. 因此,可以说我在你的iPhone上安装APP2,有APP1。当我的应用程序运行时,那么.XYZ扩展(提前知道APP2)会注册到iPhone中。

这就是现在您的应用程序APP1可以使用此.XYZ文件的原因。结论是,在制作应用程序之前,您必须提前知道特定类型的扩展名。

但是,继承人可能的解决方案。

解决方案:

  1. 决定要在extenstion支持的最大字符数。可以说4.

  2. 现在,您可以制作一个小型Brute-Force例程在您的应用中运行,以制作所有可能的字符组合并将它们全部注册。这应该使任何扩展名最多4个字符的文件都可以附加到邮件。

我希望应该这样做。

祝你好运!

+0

你真的确定你想推荐暴力破解4个角色吗?这将导致456976注册!在[fspirit's answer](http://stackoverflow.com/a/9432862/1608468)中的示例之后,这几乎是96MB的plist数据! – tomsmeding 2012-12-09 06:57:25

0

调查的想法...

如果另一个应用程序“修复”问题的安装,然后尝试检查其他应用程序Info.plist文件,看它是否被注册或出口任何有趣UTI S或类似设置。

这听起来像你的应用程序可能只做了一半的工作,另一个应用程序正在完成缺少的设置。

您可以通过复制,重命名ipazip上的应用程序中提取内容,然后Show Package Contents内从iTunes检查的应用ipa文件的内容。

相关问题