注册 GPX(或 XML)文件以在 iOS 应用程序中打开
Posted
技术标签:
【中文标题】注册 GPX(或 XML)文件以在 iOS 应用程序中打开【英文标题】:Registering GPX (or XML) file to open in iOS app 【发布时间】:2012-05-16 02:05:30 【问题描述】:我在我的 ios 应用程序中打开 GPX 文件时遇到问题。我注册了扩展名并且一些文件正确打开,也就是说,当我在 Safari 中点击指向 GPX 文件的链接时,它会显示一个提示,询问我要使用哪个应用程序来打开文件。然后我选择我的应用程序并按预期处理文件。对于 Safari 中的某些网站以及电子邮件附件中的所有文件,不会显示提示和应用程序选择,并且浏览器/电子邮件应用程序会将文件内容显示为文本。
我怀疑这是 info.plist 设置的问题,或者可能是 Safari 和电子邮件应用程序的问题。如果您在 ios 应用程序中正确打开 XML 或 GPX 文件,您会从 info.plist 中发布您的 CFBundleDocumentTypes 和 UTExportedTypeDeclarations 设置吗?
欢迎提出任何想法。这是我的 info.plist 中的相应部分。我尝试添加和删除一些可选标签,这是最新的,但不是最完整的。
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Icon.png</string>
<string>Icon@2x.png</string>
</array>
<key>CFBundleTypeName</key>
<string>GPS eXchange Format</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>org.elsners.Indicium.gpx</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.xml</string>
</array>
<key>UTTypeDescription</key>
<string>GPS eXchange Format</string>
<key>UTTypeIdentifier</key>
<string>org.elsners.Indicium.gpx</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>GPX</string>
<string>gpx</string>
</array>
</dict>
</dict>
</array>
【问题讨论】:
Mirek,你解决过这个问题吗?介意为仍在寻找的人发布解决方案吗? 不,我没有找到解决方案,抱歉。对于电子邮件附件,它会显示正确的图标,但当我点击它时,它会以文本文件的形式打开。 最新的斯坦福课程,如果正是关于这个主题!他们可能已经发布了示例代码 【参考方案1】:我遇到了类似的问题。我的应用程序没有显示在从邮件应用程序打开 XML 附件的应用程序列表中。我在 info.plist 中使用了这段代码,它对我有用:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>XML File</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>public.XML</string>
</array>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Sandbox-icon.png</string>
</array>
</dict>
</array>
参考:http://iosdevelopertips.com/core-services/how-to-register-file-types-supported-by-an-ios-app.html
【讨论】:
【参考方案2】:我认为以下部分必须删除:
<key>UTTypeConformsTo</key>
<array>
<string>public.xml</string>
</array>
我用它重现了这个问题,并通过删除来解决。
显然邮件应用认为它可以比其他应用更好地处理符合 XML 的类型,并拦截处理。
我还建议包括对 answer posted by Wallace Campos 的更改。
【讨论】:
【参考方案3】:处理 HTTP 内容时(Safari 和 Mail 应用程序就是这种情况),您一定不要忘记处理其内容类型。处理内容类型的Uniform Type Identifier (UTI) 是public.mime-type
,假设服务器响应的内容类型标头设置为 application/gpx,所以在您的 plist em> 你必须添加到UTTypeTagSpecification
部分:
<dict>
<key>public.filename-extension</key>
<array>
<string>GPX</string>
<string>gpx</string>
</array>
<key>public.mime-type</key>
<string>application/gpx</string>
</dict>
注意:我已经将 application/gpx 和 application/gpx+xml 视为 Web 上 GPX 数据的内容类型,但我没有'不知道是否有标准的 mime 类型,所以最好同时使用。
【讨论】:
【参考方案4】:试试这个代码...
(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
if (url != nil && [url isFileURL])
// xdxf file type handling
if ([[url pathExtension] isEqualToString:@"xdxf"])
NSLog(@"URL:%@", [url absoluteString]);
return YES;
【讨论】:
嗨贾弗,感谢您的评论。我的应用程序中有类似的代码。您提供的代码示例将处理该文件,但最初的问题是当用户在另一个应用程序中激活 GPX 文件时,该应用程序没有启动。以上是关于注册 GPX(或 XML)文件以在 iOS 应用程序中打开的主要内容,如果未能解决你的问题,请参考以下文章