Расширение Swift Share не отображается для PDF-файлов
Используя Swift5.3.2, iOS13.0,
Расширение My Share работает с изображениями и видео.
Однако это не работает для PDF-файлов.
Проблема в том, что мое приложение не отображается в списке Share-Apps для PDF-документа, которым я пытаюсь поделиться со своим приложением.
Я знаю, что правила должны быть правильно установлены внутри info.plist.
Я предпринял следующие две попытки - но обе безуспешно!
Может ли кто-нибудь сказать мне, что нужно для расширения общего доступа к PDF в iOS?
попытка 1: Info.plist
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsFileWithMaxCount</key>
<integer>20</integer>
<key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>100</integer>
<key>NSExtensionActivationSupportsMovieWithMaxCount</key>
<integer>25</integer>
</dict>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
<key>NSExtensionPrincipalClass</key>
<string>CustomShareNavigationController</string>
</dict>
попытка 2: Info.plist
<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.file-url"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png"
).@count == $extensionItem.attachments.@count
).@count == 1
</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
<key>NSExtensionPrincipalClass</key>
<string>CustomShareNavigationController</string>
</dict>
1 ответ
Когда вы инициируете общий доступ к PDF-файлу в Safari, он фактически учитывает 2 элемента ввода: PDF-файл и URL-адрес. Поскольку ваш
NSExtensionActivationRule
предикат конкретно указывает, что
@count == 1
, он вернет false, так как вашему предикату соответствует более 1 элемента. Таким образом, исправление заключается в изменении
@count == 1
к
@count >= 1
или какая логика лучше всего подходит для вашего приложения.
Обновленный запрос, который работал у меня:
<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.file-url"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png"
).@count == $extensionItem.attachments.@count
).@count >= 1
</string>