Swift开发:如何实现打开50个以上URL Scheme的需求?
解决iOS打开50个以上URL Scheme的问题
核心思路:跳过canOpenURL检查,直接调用open方法
LSApplicationQueriesSchemes的50个数量限制仅针对canOpenURL(_:)方法,而非UIApplication.shared.open(_:options:completionHandler:)。你可以直接调用open方法尝试打开目标URL Scheme,无需提前在info.plist中声明所有Scheme。
具体实现代码
let targetURL = URL(string: "your-custom-scheme://path")! UIApplication.shared.open(targetURL, options: [:], completionHandler: { success in if !success { // 打开失败时的处理逻辑,比如提示用户未安装对应应用 print("无法打开该URL Scheme,请检查是否安装了对应应用") } })
注意事项
- 跳过检查的代价:无法提前知晓系统是否存在能处理该Scheme的应用,只能通过
completionHandler的success参数判断结果。 - 审核合规性:这种方式完全符合苹果审核规则,
open方法本身无Scheme数量限制,限制仅针对canOpenURL的检查列表。 - 特殊Scheme处理:
tel:、sms:等系统级Scheme无需额外声明即可直接打开,自定义Scheme遵循上述逻辑。
折中预检查方案(若需提前判断)
如果必须对部分Scheme做预检查,但数量超50个,可按以下方式处理:
- 仅将高频使用的Scheme添加到
LSApplicationQueriesSchemes中,用canOpenURL做预检查; - 低频使用的Scheme直接调用
open方法,不做预检查,依赖completionHandler处理失败场景。
内容的提问来源于stack exchange,提问作者LSH
相关产品推荐
相关产品推荐

