共享扩展:带有“public.url”的“NSExtensionActivationRule”未显示在共享表中

问题描述 投票:0回答:1

我正在 iOS 中构建一个共享扩展,允许用户将 URL(例如,来自 Instagram)共享到我的应用程序。当我使用时,我的扩展程序运行良好:

<key>NSExtensionActivationRule</key>
<string>TRUEPREDICATE</string>

但是,当我尝试将构建上传到 TestFlight 时,这被 Apple 拒绝,并出现以下错误:

Info.plist 值无效。捆绑包中的键“NSExtensionActivationRule”的值无效。

为了遵守 Apple 的准则,我尝试对 URL 使用特定的激活规则。我现在的

Info.plist
看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>NSExtensionActivationRule</key>
            <string>
                ANY NSExtensionItems.attachments.contentTypeUTI == "public.url"
            </string>
        </dict>
        <key>NSExtensionMainStoryboard</key>
        <string>MainInterface</string>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.share-services</string>
    </dict>
</dict>
</plist>

但是,有了这个规则:

当我尝试共享 URL 时,共享扩展名

未出现在共享表中。

调试日志确认附件类型为

public.url


Attachment Type Identifiers: ["public.url"]


我尝试过的:

    我使用了 NSExtensionActivationSupportsAttachmentsWithMatchingTypeIdentifiers,如下所示:
<key>NSExtensionActivationSupportsAttachmentsWithMatchingTypeIdentifiers</key> <array> <string>public.url</string> </array>
结果:扩展程序仍然没有显示。

    我确保主应用程序和扩展目标的应用程序组均已正确配置。
  • 我清除了缓存,从设备中删除了应用程序,然后重新启动了设备。
工作状态(但被Apple拒绝):

如果我使用:

<key>NSExtensionActivationRule</key> <string>TRUEPREDICATE</string>
扩展在共享表中正确显示并按预期工作,但 Apple 在验证期间拒绝了它(当我尝试将应用程序上传到 TestFlight 时)。

问题:

  1. 当使用正确的

    public.url

     定位 
    NSExtensionActivationRule
     时,为什么我的共享扩展名没有出现在共享表中?

  2. 正确且符合 Apple 标准的配置方式是什么

    NSExtensionActivationRule

     以便扩展程序出现在 URL 中并通过 TestFlight 验证?

ios info.plist ios8-share-extension share-extension
1个回答
0
投票
经过多次尝试和错误,我终于在分享 Instagram 和 TikTok 等应用程序的 URL 时,让该应用程序显示在分享菜单中。解决方案涉及添加

NSExtensionActivationSupportsWebURLWithMaxCount

 键,我最初忽略了它。

Apple 关于

NSExtensionActivationSupportsWebURLWithMaxCount

 的文档很微妙,并且并不总是清楚它如何补充 
NSExtensionActivationSupportsAttachmentsWithMatchingTypeIdentifiers

我(错误地)认为仅

public.url

就足以满足所有情况,因为它是一种普遍的尿路感染。然而,Instagram 等主机应用程序对 URL 的不同处理方式暴露了这一假设的缺陷。将 
NSExtensionActivationSupportsWebURLWithMaxCount
 显式添加到 Info.plist 会产生很大的不同。

这是最终起作用的完整

Info.plist

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>NSExtensionActivationRule</key> <dict> <key>NSExtensionActivationSupportsAttachmentsWithMatchingTypeIdentifiers</key> <array> <string>public.url</string> </array> <key>NSExtensionActivationSupportsWebURLWithMaxCount</key> <integer>1</integer> </dict> </dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.share-services</string> </dict> </dict> </plist>
    
© www.soinside.com 2019 - 2024. All rights reserved.