如何设置NSExtensionActivationRule谓词? [英] How do I set NSExtensionActivationRule predicates?

查看:180
本文介绍了如何设置NSExtensionActivationRule谓词?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

甚至比人们聪明得多的人我找到 NSExtensionActivationRule arcane的语法,但即使像我这样的傻瓜也应该能够复制/粘贴示例,不是吗?不幸的是我甚至无法获得 Apple的例子可行。当您点击共享表按钮(下面的堆栈跟踪)时,我的操作扩展程序的主机应用程序崩溃。

Even people far smarter than I am find the syntax for NSExtensionActivationRule arcane, but even a fool like me should be able to copy/paste examples, no? Unfortunately I can't even get Apple's examples to work. The host app for my action extension crashes when you hit the share sheet button (stack trace below).

您应该能够设置 NSExtensionActivationRule 作为字符串,对吗?当我将其设置为 TRUEPREDICATE 以进行调试时,它工作正常。但如果我从Apple(稍微修改为 public.image )中取这个简单的例子并将其粘贴,我就会崩溃:

You should be able to just set NSExtensionActivationRule as a string, right? It works fine when I set it to TRUEPREDICATE for debugging purposes. But if I take this simple example from Apple (slightly modified for public.image) and paste it in, I get a crash:

{extensionItems = ({
    attachments = ({
        registeredTypeIdentifiers = (
            "public.image"
        );
    });
})}

我试过 SUBQUERY 东西:

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

理想情况下,我只想使用 NSExtensionActivationSupportsImageWithMaxCount 完全避免这种情况,但是此人发现,似乎没有为jpgs激活。

Ideally I'd like to avoid this altogether by just using NSExtensionActivationSupportsImageWithMaxCount but as this person found, it doesn't seem to get activated for jpgs.

无论如何,承诺的堆栈跟踪:

Anyway, that stack trace as promised:

2015-02-21 23:28:08.644 MobileSlideShow[56997:2414043] Communications error: <OS_xpc_error: <error: 0x4c985f4> { count = 1, contents =
    "XPCErrorDescription" => <string: 0x4c9883c> { length = 22, contents = "Connection interrupted" }
}>
2015-02-21 23:28:08.651 MobileSlideShow[56997:2413473] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray removeObjectsAtIndexes:]: index set cannot be nil'
*** First throw call stack:
(
    0   CoreFoundation                      0x04060686 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x03b35a97 objc_exception_throw + 44
    2   CoreFoundation                      0x03f84ffe -[NSMutableArray removeObjectsAtIndexes:] + 654
    3   UIKit                               0x01d71d78 _UIApplicationExtensionDiscoveryGetPostprocessedExtensions + 350
    4   UIKit                               0x01d718e3 -[_UIActivityApplicationExtensionDiscovery activitiesMatchingInputItems:error:updateBlock:] + 1237
    5   UIKit                               0x01c342f2 -[UIActivityViewController _availableActivitiesForItems:applicationExtensionActivities:] + 594
    6   UIKit                               0x01c3409b -[UIActivityViewController _availableActivitiesForItems:] + 48
    7   UIKit                               0x01c3519a -[UIActivityViewController _availableActivities] + 57
    8   UIKit                               0x01c39552 -[UIActivityViewController activityGroupViewController:availableActivitiesInCategory:] + 65
    9   UIKit                               0x0195c47f -[UIActivityGroupViewController collectionView:didSelectItemAtIndexPath:] + 251
    10  UIKit                               0x01b8d94d -[UICollectionView _selectItemAtIndexPath:animated:scrollPosition:notifyDelegate:] + 591
    11  UIKit                               0x01baced4 -[UICollectionView _userSelectItemAtIndexPath:] + 191
    12  UIKit                               0x01bad0c8 -[UICollectionView touchesEnded:withEvent:] + 492
    13  libobjc.A.dylib                     0x03b4b7cd -[NSObject performSelector:withObject:withObject:] + 84
    14  UIKit                               0x0164f714 forwardTouchMethod + 270
    15  UIKit                               0x0164f784 -[UIResponder touchesEnded:withEvent:] + 31
    16  libobjc.A.dylib                     0x03b4b7cd -[NSObject performSelector:withObject:withObject:] + 84
    17  UIKit                               0x0164f714 forwardTouchMethod + 270
    18  UIKit                               0x0164f784 -[UIResponder touchesEnded:withEvent:] + 31
    19  UIKit                               0x014e714a -[UIWindow _sendTouchesForEvent:] + 874
    20  UIKit                               0x014e7c24 -[UIWindow sendEvent:] + 790
    21  UIKit                               0x014a5d81 -[UIApplication sendEvent:] + 242
    22  UIKit                               0x014b613b _UIApplicationHandleEventFromQueueEvent + 21263
    23  UIKit                               0x01489599 _UIApplicationHandleEventQueue + 2206
    24  CoreFoundation                      0x03f820ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    25  CoreFoundation                      0x03f77c0d __CFRunLoopDoSources0 + 253
    26  CoreFoundation                      0x03f77168 __CFRunLoopRun + 952
    27  CoreFoundation                      0x03f76aeb CFRunLoopRunSpecific + 443
    28  CoreFoundation                      0x03f7691b CFRunLoopRunInMode + 123
    29  GraphicsServices                    0x0089e2c9 GSEventRunModal + 192
    30  GraphicsServices                    0x0089e106 GSEventRun + 104
    31  UIKit                               0x0148d366 UIApplicationMain + 1526
    32  MobileSlideShow                     0x00092724 MobileSlideShow + 63268
    33  libdyld.dylib                       0x049dcac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException


推荐答案

它应该是这样的,对我来说很好用,只需尝试:

This is how it should look like and works fine for me, just try:

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <string>SUBQUERY (
            extensionItems,
            $extensionItem,
            SUBQUERY (
            $extensionItem.attachments,
            $attachment,
            (
            ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg-2000"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.compuserve.gif"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.bmp"
            )
            ).@count == 1
            ).@count == 1
        </string>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.ui-services</string>
</dict>

这篇关于如何设置NSExtensionActivationRule谓词?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆