20

我无法在我的 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>
4

4 回答 4

1

处理 HTTP 内容时(Safari 和 Mail 应用程序就是这种情况),您不能忘记处理其内容类型。处理内容类型的统一类型标识符(UTI) 是public.mime-type,假设服务器响应的内容类型标头设置为application/gpx,因此在您的plist中,您必须添加到该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/gpxapplication/gpx+xml作为网络上 GPX 数据的内容类型,我不知道是否有标准的 mime 类型,所以最好同时使用两者。

于 2016-01-07T17:59:22.470 回答
0

试试这个代码...

(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;
}
于 2015-06-12T11:29:32.557 回答
0

我认为必须删除以下部分:

<key>UTTypeConformsTo</key>
<array>
    <string>public.xml</string>
</array>

我用它重现了这个问题,并通过删除来修复。

显然邮件应用认为它可以比其他应用更好地处理符合 XML 的类型,并拦截处理。

我还建议包括对Wallace Campos 发布的答案的更改。

于 2018-03-09T09:35:35.747 回答
0

我面临着类似的问题。我的应用程序没有显示在从邮件应用程序打开 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

于 2019-12-02T09:39:35.140 回答