You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Safari分享选项无法显示ShareExtension的问题排查

Safari分享选项无法显示ShareExtension的问题排查

你的问题很典型——ShareExtension在照片App里能正常出现,但Safari默认分享时找不到,只有切换到PDF或Web Archive选项才会显示,这本质是你的NSExtensionActivationRule规则没有覆盖Safari默认分享的附件组合。

先分析你的规则问题

看你第二个OR分支的规则:

SUBQUERY(
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.content"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.apple.webarchive"
    ).@count == $extensionItem.attachments.@count
).@count >= 1

这个分支有个严格要求:当前extensionItem下的所有附件必须全部匹配public.url/public.content/com.apple.webarchive三者之一(因为子查询的匹配计数要等于附件总数量)。

但Safari默认分享时,通常会同时发送两个附件:一个是public.url类型的网址,另一个是public.image类型的网页预览图。这时候,子查询只能匹配到1个符合条件的附件(网址),而总附件数是2,1 != 2,导致这个分支的规则不触发,你的Extension自然不会出现在分享列表里。

而当你选择Safari的「Web Archive」或「PDF」选项时,分享的extensionItem里只有一个符合条件的附件(比如com.apple.webarchive或属于public.content的PDF),这时候子查询计数等于总附件数,规则触发,Extension就显示了。

解决方案

你只需要调整第二个OR分支的规则,把“所有附件都匹配”的要求改成“至少有一个附件匹配”即可,修改后的规则如下:

OR 
SUBQUERY(
    extensionItems,
    $extensionItem,
    SUBQUERY(
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.content"
        || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.apple.webarchive"
    ).@count >= 1
).@count >= 1

如果你想更精准控制,也可以先确认Safari默认分享的具体UTI:在你的ShareViewController代码中加入日志,打印收到的附件信息:

// 示例Objective-C代码,Swift可自行转换
- (void)viewDidLoad {
    [super viewDidLoad];
    for (NSExtensionItem *item in self.extensionContext.inputItems) {
        for (NSItemProvider *provider in item.attachments) {
            NSLog(@"附件UTI列表:%@", provider.registeredTypeIdentifiers);
        }
    }
}

运行Extension后,在Xcode控制台就能看到Safari默认分享的所有附件UTI,再针对性调整规则会更准确。

总结

问题根源是你的规则对Safari默认的多附件分享场景做了过度限制,放宽“所有附件匹配”为“至少一个附件匹配”,就能让你的Extension在Safari默认分享选项中正常显示了。

备注:内容来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:12:59