iOS 18.0中Shared Extension无法通过URL打开主应用
问题根源
iOS 18 强化了沙盒隔离机制,封堵了通过响应链(responder chain)获取UIApplication的非常规方式——Share Extension 作为独立沙盒组件,原本就不允许直接访问主应用的UIApplication实例,iOS 17 中该 hack 方式侥幸生效,但 iOS 18 彻底禁止了这类操作。
正确实现方案
使用NSExtensionContext提供的官方方法open(_:options:completionHandler:),这是 Extension 与主应用交互的合规途径,修改后的代码如下:
private func openMainApp() { guard let url = URL(string: "AppName://") else { print("无效的 URL Scheme") close() return } // 通过 Extension 上下文打开主应用 extensionContext?.open(url, options: [:]) { [weak self] success in success ? print("RUN : APP") : print("NOT RUN : APP") self?.close() } }
必要检查项
- 确认主应用
Info.plist中CFBundleURLSchemes已正确配置你的自定义 Scheme(替换代码中的AppName)。 - 检查 Share Extension 的
Info.plist中NSExtensionActivationRule配置正确,保证 Extension 能被正常触发。 - 确保主应用未在
Info.plist中添加限制 URL Scheme 调用的新配置项(iOS 18 新增的沙盒相关限制)。
内容的提问来源于stack exchange,提问作者Rifiter
相关产品推荐
相关产品推荐

