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").