NSExtension-共享-仅将类型限制为视频或图片

Mel*_*rne 9 info.plist ios swift

我的应用程序中有一个扩展程序,允许用户选择其“照片/图片”应用程序中的图片或视频,以发布在我的应用程序中。

通过执行以下操作,我将图片数量限制为20个,将视频数量限制为1个: 在此处输入图片说明

但是,我希望我的用户选择多张图片一个视频,而这种配置是不可能的。

我已经阅读了这篇文章:NSExtension分享扩展限制照片计数

他们解释说我可以执行自定义验证规则,但是我不知道如何编写它。还有其他激活参数吗?有人可以帮助编写规则吗?

提前致谢!

Gio*_*gen 7

Apple提供了执行所需操作的选项。我们可以在这里看一下文档:

https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW8

我将UTI-CONFORMS-TO项目修改为视频和图像,并且计数了一些:

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
    ).@count <= 20
).@count >= 1
OR
SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.video"
    ).@count == 1
).@count == 1
Run Code Online (Sandbox Code Playgroud)

此查询应将选择范围限制为仅1个视频或1到20个图像。请注意,您应该像下面这样指定此查询:

<key>NSExtensionAttributes</key>
<dict>
    <key>NSExtensionActivationRule</key>
    <string>
    --- SUBQUERY HERE ---
    </string>
</dict>
Run Code Online (Sandbox Code Playgroud)

我没有测试此代码,它可能无法完全正常运行,但是它将为您指明正确的方向。

  • 我知道,这对我来说不是很清楚。给我一些时间,我将更新我的答案:) (3认同)
  • 感谢您的解释。但是我想将其限制为1个视频或20个图像。没有一个或一个。如果我删除最后一个@count == 1,它是否会在Info.Plist中受到其他限制,或者是否能够添加5个视频? (2认同)

C. *_*net 1

这是一个有效的答案,奇怪的是我没有设法使逻辑条件(AND / OR)在单个子查询中工作,所以我不得不将其拆分:

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
    ).@count == 1
    AND
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
    ).@count == 0
).@count == 1
OR
SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
    ).@count == 0
    AND
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
    ).@count &lt;= 20
).@count &gt;= 1
Run Code Online (Sandbox Code Playgroud)