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

如何在运行时获取iOS应用的URL Scheme

从iOS应用Bundle中获取自定义URL Scheme的实现方法

要遵循DRY原则避免硬编码URL Scheme字符串,直接从应用Bundle的配置中解析是最优解——毕竟自定义URL Scheme本身就配置在Info.plist的CFBundleURLTypes字段里,我们只需要读取这个配置即可。

实现步骤

  1. 给Bundle添加扩展,封装解析逻辑
    直接通过Bundle的infoDictionary读取CFBundleURLTypes结构,提取出URL Scheme:

    extension Bundle {
        var customURLScheme: String? {
            // 从Info.plist中读取URL类型配置
            guard let urlTypes = infoDictionary?["CFBundleURLTypes"] as? [[String: Any]],
                  // 取第一个URL类型配置(如果有多个可根据需求筛选)
                  let targetURLType = urlTypes.first,
                  // 读取该类型下的所有URL Scheme
                  let urlSchemes = targetURLType["CFBundleURLSchemes"] as? [String],
                  // 取第一个Scheme(多Scheme场景可自定义筛选规则)
                  let mainScheme = urlSchemes.first else {
                return nil
            }
            return mainScheme
        }
    }
    
  2. 在代码中直接调用
    后续需要使用URL Scheme时,直接通过Bundle.main获取即可,无需硬编码:

    if let scheme = Bundle.main.customURLScheme {
        let deepLinkURL = URL(string: "\(scheme)://profile/user123")
        // 处理跳转逻辑,比如打开应用内页面或调用其他App
    }
    

额外说明

  • 如果你的应用配置了多个URL Scheme,或者需要指定某个特定的Scheme,可以在解析时通过CFBundleURLName(URL类型的标识)来筛选,比如:
    // 修改扩展中的逻辑,根据URLName筛选
    let targetURLType = urlTypes.first { type in
        type["CFBundleURLName"] as? String == "com.yourapp.mainScheme"
    }
    
  • 确保Info.plist中确实配置了CFBundleURLTypes,否则方法会返回nil,建议在使用时做非空判断。

内容的提问来源于stack exchange,提问作者Chris Marshall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:45:25