【问题标题】:Opening data file in app from email从电子邮件打开应用程序中的数据文件
【发布时间】:2013-06-27 18:05:56
【问题描述】:

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

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

在我的应用委托中,我使用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。同样的问题。

【问题讨论】:

  • 也许那些因为“不清楚你在问什么”而投票结束这个问题的人可以发表评论,因为我觉得这个问题非常清楚,即使问题的根源不是.如果您对如何使这个问题更清楚有任何建议,请分享。

标签: ios xml import


【解决方案1】:

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

虽然我这样做了,但我也倾向于定义一个 mime 类型,例如public.mime-typeapplication/flight(或任何您的应用名称)。


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

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

【讨论】:

  • 嗨,罗伯。不幸的是,这些想法都没有——尽管都有效——解决了这个问题。我是否正确地说,如果在触摸电子邮件附件时出现我的图标,那么至少应该启动该应用程序?假设 info.plist 文件是有序的?这是你的理解吗?
  • @LeeBarringer 是的,这就是我的理解。很抱歉没有成功。
  • 谢谢罗伯。这个问题是一个令人头疼的问题 - 因为该应用程序在 IOS 4 上运行良好。问候,Lee
  • @LeeBarringer 这也适用于 iOS 6,所以我不知道您的情况如何。如果您使用public.data,您应该会看到应用程序列表,您的应用程序应该在那里,当您点击它时,您的应用程序委托中的openURL 方法应该被调用。
  • 再次感谢。如果有人有任何想法,这个问题仍然存在。
【解决方案2】:

在为这个问题苦苦思索了几天,并从本网站的一些成员那里得到了一些很棒的意见后,我找到了错误的来源:

在检查我的管理器设备控制台(窗口 > 管理器,然后是您正在测试的设备的控制台)时,我注意到以下警告:

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 文件中声明的数据的 MIME 类型严格保持一致。基本上在 iOS 4 中,我的应用程序打开了一个包含 .xml 内容的文件,该文件包含在 .ftl 类型的文件中,并带有以下 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 不是 public.data

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

【讨论】:

  • 很高兴您找到了解决问题的方法!
  • 我知道这可能会让人觉得很奇怪,但您应该随意“接受”您自己的答案,以便将此问题标记为已关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2018-05-14
相关资源
最近更新 更多