如何将iPhone应用程序与_every_文件types关联?

有iPhone应用程序“另一个邮件客户端”,应该能够打开任何文件发送它作为附件。 所以,我想把这个应用程序与任何扩展名的文件关联起来。

在文档之后,我们应该声明支持具有根UTItypes的文件public.data – 任何文件都应该属于这种types。 它可以工作,但不是。 在这种情况下,我们的应用程序将无法打开任何文件,但只有那些已经在系统中注册的文件。 例如,如果在任何应用程序(例如dropbox)中,我们将尝试使用UIDocumentInteractionController以“未知扩展名(file.unknowntype)”打开文件,那么答案将是负面的,尽pipe事实上我们已经注册我们的应用程序,它支持根UTItypes的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> 

我已经做了一个应用程序与以下设置

 <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)意味着文件,属于设置“系统UTIs都知道”,而不是任何文件。 所以,你将能够处理99%的文件 ,用户想通过电子邮件发送,但不是全部。 另一种方法是导出你认为重要的UTI,但是默认情况下不在系统UTI中。

朋友,在发布答案之前,我正确地阅读了你的问题。 我又一想,你将有一套已知的“任何types”的文件来批量注册。 但是,您希望dynamic调整您的应用程序,以便将来为您的应用程序注册任何文件types,并使其可以连接。 就我所知,就不能让你的应用程序普遍支持任何未知的文件types。 让我解释发生了什么,

  1. 假设你创build了一个应用程序APP1,那么它不知道文件扩展名.XYZ,并将其安装在iPhone上。

  2. 但是,后来我开发了另一个应用程序APP2,其中包含上面的代码,我注册了APP2的.XYZtypes在任何iPhone它安装。

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

这就是现在你的app APP1可以使用这个.XYZ文件的原因。

总结一下,在制作应用程序之前,您必须提前知道特定的扩展types。

然而,inheritance人可能的解决scheme。

解答:

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

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

我希望能够做到这一点。

祝你好运!

一个调查的想法…

如果其他应用程序的安装“修复”了问题,请尝试检查其他应用程序Info.plist文件,以查看是否正在注册或导出任何有趣的UTI或类似设置。

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

您可以通过复制iTunes来检查应用程序ipa文件的内容,将ipa重命名为zip压缩内容,然后在应用程序内部Show Package Contents