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

如何在UIActivityViewController中隐藏本应用的Share Extension

如何隐藏UIActivityViewController中自身的Share Extension

这个问题我做项目时也碰到过,其实iOS已经给我们提供了几种简单的方案来解决,不用绕远路~

方案一:直接排除指定扩展类型

最省心的方式就是在初始化UIActivityViewController时,把自己的Share Extension对应的活动类型加入到排除列表里。

步骤很简单:

  1. 先找到你Share Extension的Bundle ID(在Xcode的Target设置→General选项卡下的Bundle Identifier,比如com.yourcompany.yourapp.ShareExtension)。
  2. 在创建UIActivityViewController时,把这个Bundle ID转成UIActivityType,添加到excludedActivityTypes数组中:
// 假设你要分享的内容是items数组
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

// 替换成你自己的Share Extension Bundle ID
if let selfExtensionType = UIActivityType(rawValue: "com.yourcompany.yourapp.ShareExtension") {
    activityVC.excludedActivityTypes = [selfExtensionType]
}

present(activityVC, animated: true, completion: nil)

这样你的应用唤起分享面板时,就不会显示自己的Share Extension了。

方案二:通过自定义ItemSource控制显示

如果你的分享内容需要做更多自定义处理,也可以通过实现UIActivityItemSource协议来精准控制哪些活动可以显示:

class CustomShareItemSource: NSObject, UIActivityItemSource {
    // 返回占位内容,实际分享内容在下面的方法里返回
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return ""
    }
    
    // 返回真实的分享内容
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType?) -> Any? {
        return "你的分享内容"
    }
    
    // 控制是否显示某个活动类型
    func activityViewController(_ activityViewController: UIActivityViewController, canPerformActivityType activityType: UIActivityType?) -> Bool {
        // 排除自己的Share Extension
        if activityType?.rawValue == "com.yourcompany.yourapp.ShareExtension" {
            return false
        }
        // 其他活动默认允许显示
        return true
    }
}

// 使用自定义ItemSource创建分享面板
let itemSource = CustomShareItemSource()
let activityVC = UIActivityViewController(activityItems: [itemSource], applicationActivities: nil)
present(activityVC, animated: true)

几个注意点

  • 一定要确保用的是Share Extension的Bundle ID,不是主应用的!
  • 这个设置只对你自己的应用唤起的分享面板生效,其他第三方应用唤起分享时,依然会显示你的扩展——这是正常的,毕竟其他应用没有理由隐藏它。
  • 如果你的扩展支持多种活动类型,可能需要排查所有对应的UIActivityType值,但一般Share Extension默认只有一个对应的类型。

内容的提问来源于stack exchange,提问作者Ilesh Panchal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:19:09