1

我更新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。同样的问题。

4

2 回答 2

1

在为这个问题烦恼了几天之后,以及该网站的一些成员的一些精彩的输入,我找到了错误的来源:

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

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 中,我的应用程序打开了一个包含 .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 中,甚至无法启动。祝你好运,希望这能帮到你!

于 2013-07-13T14:13:27.243 回答
0

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

当我这样做时,我也倾向于定义一个 mime 类型,例如 a public.mime-typeof application/flight(或任何你的应用程序名称)。


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

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // handle the URL here
}
于 2013-06-30T14:21:54.323 回答