在iOS中关联我的应用程序的自定义文件

我正在尝试关联我的应用程序创建的自定义文件(它是XML),以便用户可以将文件通过电子邮件发送给对方。 我在这里遵循了优秀的教程:

如何将文件类型与iPhone应用程序相关联?

该文件名为XXX.checklist

但它并没有关联。 我相信我的问题在于public.mime-type键,因为我不知道我应该把它放在那里。 以下是相关的info-plist条目

CFBundleDocumentTypes    CFBundleTypeIconFiles  docIcon64.png docIcon320.png  CFBundleTypeName My App Checklist CFBundleTypeRole Viewer LSHandlerRank Owner LSItemContentTypes  com.mycompany.appid.checklist     UTExportedTypeDeclarations   UTTypeConformsTo  public.content/// i tried public.text but it allowed the file to be opened by the devices default text viewer which I would not like.  UTTypeDescription My App Checklist UTTypeIdentifier com.mycompany.appid.checklist UTTypeTagSpecification  public.filename-extension // fixed this key checklist public.mime-type text/xml /// changed to this, still doest work though    

如果您的UTI被声明为public.data我假设您的清单文件是自定义二进制数据。

然后,您应该只使用application/octet-stream作为mime类型。

更新:知道了,你的问题比任何人都期望的更微不足道。 对于初学者来说public.data一件事 – public.data适用于所有后代(包括public.xml ),因此对于XML文件,您可以设置以下任何一个:

  • public.item
  • public.data
  • public.content
  • public.text
  • public.xml

提供打开文件类型的应用程序列表是基于系统中的已知应用程序构建的,可以处理给定的UTI以及您的UTI。 由于默认文本编辑器打开了public.textpublic.xml因此它将是您的文件类型的默认操作(您的应用程序将显示在通过长按邮件附件调用的列表上)。

(显然)没有处理public.data应用程序(对于public.content ),因此当您使用此UTI时,附件的默认操作是在您的应用程序中打开它。

现在到了…您的CFBundleDocumentTypes有一个额外的级别:

 CFBundleDocumentTypes     CFBundleTypeIconFiles  docIcon64.png docIcon320.png  CFBundleTypeName My App Checklist CFBundleTypeRole Viewer LSHandlerRank Owner LSItemContentTypes  com.mycompany.appid.checklist      

它会起作用。 UTExportedTypeDeclarations部分已经很好了。