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

iOS端receive_sharing_intent无法唤起APP问题排查求助

iOS端receive_sharing_intent无法唤起主APP排查方案

1. App Group配置校验

  • 主APP(Runner)与ShareExtension必须完全使用同一个App Group ID(格式为group.com.your.bundle.id),大小写、拼写需完全一致,无多余空格。
  • 检查Xcode两个目标的Signing & Capabilities:
    • 主APP:确认已添加App Groups并勾选对应ID
    • ShareExtension:同样添加并勾选同一个App Group ID,且签名证书与主APP保持一致
  • 验证Runner/info.plist和ShareExtension/info.plist的AppGroups数组,确认包含同一个ID。

2. ShareExtension的info.plist关键配置检查

  • 确认NSExtension字典下的NSExtensionAttributes包含正确的NSExtensionActivationRule,覆盖你需要接收的类型(示例如下):
    <key>NSExtensionActivationRule</key>
    <dict>
      <key>NSExtensionActivationSupportsImageWithMaxCount</key>
      <integer>10</integer>
      <key>NSExtensionActivationSupportsText</key>
      <true/>
      <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
      <integer>1</integer>
    </dict>
    
  • 检查NSExtensionPrincipalClass是否设置为$(PRODUCT_MODULE_NAME).ShareViewController(代码实现扩展时需配置此项,而非Storyboard)。
  • 确认ShareExtension的CFBundleIdentifier是主APP Bundle ID的子扩展格式(如主APP为com.your.app,则扩展ID应为com.your.app.ShareExtension)。

3. ShareViewController代码逻辑校验

  • 确保处理完共享数据后,正确调用唤起主APP的逻辑,并结束扩展流程,示例核心代码如下:
    override func didSelectPost() {
        // 1. 获取并保存共享数据到App Group
        if let item = extensionContext?.inputItems.first as? NSExtensionItem,
           let provider = item.attachments?.first {
            if provider.hasItemConformingToTypeIdentifier(kUTTypeText as String) {
                provider.loadItem(forTypeIdentifier: kUTTypeText as String) { text, _ in
                    guard let sharedText = text as? String else { return }
                    let defaults = UserDefaults(suiteName: "group.com.your.bundle.id")
                    defaults?.set(sharedText, forKey: "shared_content")
                    defaults?.synchronize()
                    
                    // 2. 唤起主APP
                    if let appURL = URL(string: "your_custom_scheme://share") {
                        self.extensionContext?.open(appURL) { success in
                            if success {
                                // 3. 必须结束扩展流程
                                self.extensionContext?.completeRequest(returningItems: [], completionHandler: nil)
                            }
                        }
                    }
                }
            }
        }
    }
    
  • 检查主APP的info.plist是否配置了对应的URL Scheme:
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>your_custom_scheme</string>
            </array>
        </dict>
    </array>
    
    确保代码中使用的Scheme与配置完全一致。

4. Xcode项目其他设置检查

  • 主APP与ShareExtension的Deployment Target版本需一致,且不低于插件要求的最低版本(如iOS 13.0+)。
  • 执行Product > Clean Build Folder清理缓存,重新编译主APP至设备(无需单独运行ShareExtension,其会随主APP嵌入安装)。
  • 若共享内容包含相册图片,需在ShareExtension的info.plist中添加NSPhotoLibraryUsageDescription权限描述。

5. 插件与版本适配

  • 确认receive_sharing_intent插件为最新版本,避免已知iOS适配bug。
  • 检查Flutter版本与插件的兼容性(如Flutter 3.x需对应支持的插件版本)。

若以上排查仍未解决问题,可补充以下信息进一步定位:

  • 插件具体版本号
  • 主APP与ShareExtension的完整Bundle ID(敏感信息可打码)
  • Runner/info.plist与ShareExtension/info.plist的完整配置
  • ShareViewController的完整代码

内容的提问来源于stack exchange,提问作者Samsudeen S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:02:01