通过电子邮件打开app中的数据文件

时间:2013-06-30 12:54:29

标签: ios xml import

我已更新我的应用的info.plist文件,以反映新的文件类型(称为.ftl)。

当我将这种类型的文件附加到电子邮件时,iOS会将文件类型识别为可以传递到我的应用程序的文件类型(当在电子邮件中触摸文件时,我的应用程序图标会出现)。但是,当我选择图标时,我的应用程序无法启动。

在我的App委托中,我使用application:openURL:sourceApplication:sourceApplication annotation:委托方法来处理相关NSURL的处理。当我NSLog这个方法时,很明显没有调用该方法。

有什么想法吗?我已经在iOS 4中使用了这个。然后我升级了Xcode以测试运行iOS 6的iPad并且遇到了这个死胡同。我的应用程序的其余部分工作正常。

根据Rob的要求,这里是我的info.plist文件中的CFBundleDocumentTypes和UTExportedTypeDeclarations。感谢:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.yourcompany.blinkapp.ftl</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>Blink FTL Sheet</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeDescription</key>
        <string>Blink FTL Sheet</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.text</string>
        </array>
        <key>UTTypeIdentifier</key>
        <string>com.yourcompany.blinkapp.ftl</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>ftl</string>
        </dict>
    </dict>
</array>

我也尝试在我的UTTypeConformsTo中使用public.data而不是public.text。同样的问题。

2 个答案:

答案 0 :(得分:1)

经过几天在这个问题上撕掉我的头发,以及本网站的一些成员的一些奇妙的意见,我发现了这个错误的来源:

在检查我的组织者设备控制台(窗口&gt;组织者,然后是您正在测试的设备的控制台)时,我注意到以下警告:

LaunchServices: Invalid LSOpenOperation request - No applications found to open document

我在Apple开发者论坛上看了一下,发现:

https://discussions.apple.com/thread/4489540?start=0&tstart=0

这看起来像是iOS 6中首次出现的问题,要求在您尝试在应用中打开的文件中包含的数据的mime类型与plist.info文件中声明的数据之间存在严格的一致性。基本上在iOS 4中,我的应用程序打开了一个文件,其中包含.ftl类型的.xml内容,其中包含以下info.plist条目:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeIdentifier</key>
        <string>com.yourcompany.blinkapp.ftl</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>ftl</string>
            <key>public.mime-type</key>
            <string>application/blinkapp</string>
        </dict>
    </dict>
</array>

但是,在iOS 6中,必须将UTTypeConformsTo声明为XML:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.xml</string>
        </array>
        <key>UTTypeIdentifier</key>
        <string>com.yourcompany.blinkapp.ftl</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>ftl</string>
            <key>public.mime-type</key>
            <string>application/blinkapp</string>
        </dict>
    </dict>
</array>

...注意public.xml NOT public.data

听起来可能很明显,但就像我说的那样,在iOS 4和5下,我的应用程序顺利运行......突然在iOS6中,甚至无法启动。祝你好运,希望这有帮助!

答案 1 :(得分:0)

CFBundleDocumentTypes(“文档类型”)中,您没有CFBundleTypeRole(“角色”)。根据{{​​3}},“此键指定应用程序相对于类型的角色。值可以是Editor,Viewer,Shell或None。此键是必需的。”我可能会尝试设置它,看看是否能解决问题。

虽然我在这里,但我也倾向于定义一个mime类型,例如: public.mime-type application/flight(或您的应用名称)。


查看您的代码,documentation的签名未完整。方法签名是:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // handle the URL here
}