iOS分享扩展如何支持*.wav文件

6
正如标题所述,我想让我的扩展在用户共享*.wav文件时显示。
我遇到了以下苹果文档: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW8 我试图弄清楚如何使用文档中提到的内容来实现。这份文档让我感觉我已经拥有了大部分,如果不是全部,我所需要的东西,但不知道它们如何组合在一起。
我明白我很可能需要构建一个"SUBQUERY(..)"语句,但它放在哪里?我该如何使用它?
2个回答

15

最终我做了以下操作:

对于 NSExtensionActivationRule 键,我将类型从 Dictionary 更改为 String,并输入了以下字符串(可以保留格式,不需要全部内联):

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" ||
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie" ||
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.audio"
    ).@count == $extensionItem.attachments.@count
).@count >= 1

你只需要:

ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.audio"

但是我的扩展还支持电影和图像,这就是为什么它也有这些功能(对于那些可能想知道如何支持多个选项的人来说,我把它保留了下来)。请注意,我决定支持比最初查询的波形格式更多的音频选项。类型可以在这里查找:统一类型标识符参考

第一个计数检查确保主机应用程序中的每个选定项目都符合该扩展。

第二个计数检查,即末尾的检查,用于指示扩展接受1个或多个项目(符合要求)。如果您只想允许每次处理1个项目,则输入以下内容:

).@count == 1

或者,如果你想允许多个项目并设定一个上限:

).@count < 4


).@count <= 3

请确保在谓词字符串中使用 " 而不是 ,以免出错。这将为您节省大量时间和烦恼。 - Shumais Ul Haq
为什么不只使用 public.data 而不是在谓词中使用所有这些类型?它可以工作... - D4ttatraya
这对于 m4a 格式的文件不起作用。 :( - Parth
已将其更改为 public.mpeg-4-audio 并从应用信息中删除了导入类型,但该应用程序仍显示在共享面板中。 但是,单击它时没有弹出任何内容。 但是长按图标会给出一个在应用中打开的选项。 到底发生了什么? 在我进行任何更改之前,一个带有取消和发布选项的小黑框正在显示... - Parth
OT: 真是令人惊讶,苹果设计得如此复杂。他们本可以只支持指定“audio/x-wave”共享扩展,但却创造了这个混乱的查询语言,甚至不能正确处理WAV文件或扩展名或MIME类型。 - philk
显示剩余3条评论

0

如果有人想知道没有外部SUBQUERY的单个项目会是什么样子:

SUBQUERY(
    $extensionItem.attachments, 
    $attachment, 
    ANY $attachment.registeredTypeIdentifiers 
    UTI-CONFORMS-TO "public.audio"
).@count = 1

只需将UTI-CONFORMS-TO "public.audio"替换为UTI-CONFORMS-TO "public.image"UTI-CONFORMS-TO "public.movie"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接