注册GPX(或XML)文件以在iOS应用中打开

Mir*_*ekE 19 cocoa-touch ios4 ios ios5

我在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>
Run Code Online (Sandbox Code Playgroud)

Jaf*_*son 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;
}
Run Code Online (Sandbox Code Playgroud)