iOS AppExtension: Как я могу объединить NSExtensionActivationRule и NSPredicate

В настоящее время я разрабатываю приложение для iOS, содержащее расширение Share.

Я понял, чтоNSExtensionActivationSupportsImageWithMaxCount ключ не позволяет мне активировать расширение Share на URL.jpeg или.png (UTI "public.image", kUTTypeImage) в Safari (то есть: ссылка imgur).

Я все еще могу активировать и протестировать свое расширение, если я переключусь на NSActivationRule = TRUEPREDICATE, но это запрещено для выпущенного приложения.

Я заполнил баг на радаре на случай, если он не нужен (даже фейсбук, твиттер и т. Д. Не активированы по этим URL)

Прямо сейчас я хотел бы объединить следующие ключи и "public.image" в строке NSPredicate, как сказано в документации ( https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html)

Поэтому я должен перевести ключи в UTI

Пока я перевёл:
- NSExtensionActivationSupportsFileWithMaxCount на "public.file-url" kUTTTypeFileURL
- NSExtensionActivationSupportsMovieWithMaxCount на "public.movie" kUTTypeMovie
- NSExtensionActivationSupportsText на "public.text" kUTTypeText
- NSExtensionActivationSupportsWebURLWithMaxCount на "public.url" kUTTypeURL

Но я не могу найти перевод типа для:

  • NSExtensionActivationSupportsWebPageWithMaxCount, "public.HTML" это kUTTypeHTML?

Кто-нибудь уже использовал эти ключи внутри предиката?

1 ответ

Решение

В итоге я сделал: 1) временно разрешил TRUEPREDICATE и использовал некоторую логику, подобную этой

    NSExtensionItem *item = extensionContext.inputItems.firstObject;

    if ( item )
    {
        NSItemProvider *itemProvider = item.attachments.firstObject;

        if ( itemProvider )
        {
            NSArray *registeredTypeIdentifiers = itemProvider.registeredTypeIdentifiers;
            NSLog( @"registeredTypeIdentifiers: %@", registeredTypeIdentifiers );
        }
     }`

Это даст вам все типы документов, которыми вы хотите поделиться (пример: "public.url"). Из-за множества типов мой предикат стал немного сложным:

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 "public.tiff"
                        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.compuserve.gif"
                        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.bmp"
                        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.microsoft.word.doc"
                        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "org.openxmlformats.wordprocessingml.document"
                        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.comma-separated-values-text"
                )
                AND
                (
                     NOT ( ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.photoshop-image" )
                )

    ).@count == $extensionItem.attachments.@count
).@count == 1

Это в основном ищет любой тип файла для изображения (кроме Adobe PSD), PDF, TXT, CSV или DOC / DOCX. Это также позволяет только 1 документ для совместного использования за один раз.

Похоже, что kUTTypeImage включает PSD - отсюда моя блокировка этого формата ( "com.adobe.photoshop-image").

Другие вопросы по тегам