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

iOS 9下2010年Objective-C旧项目调用tel scheme报错求助

解决iOS 9+下-canOpenURL: failed for URL: "tel: 0"的问题

嘿,这个问题我太熟了!之前帮同事调试2010年的老Objective-C项目时刚好碰到过一模一样的情况,给你拆解下怎么解决:

问题根源有两个:

  1. iOS 9的URL Scheme查询限制:从iOS 9开始,苹果为了隐私安全,要求应用必须显式声明要查询的URL Scheme,否则系统会直接拒绝查询请求,就会抛出你看到的"This app is not allowed to query for scheme tel"错误。
  2. URL格式错误:你的URL里tel:后面多了个空格("tel: 0"),这个空格会导致系统无法正确识别电话协议,也是功能失效的原因之一。

具体修复步骤:

  • 步骤1:配置Info.plist声明tel Scheme
    打开项目的Info.plist文件(也可以在Xcode中选择项目target,切换到「Info」标签页,在「Custom iOS Target Properties」里操作):

    1. 添加一个新的键,命名为LSApplicationQueriesSchemes,类型选择Array
    2. 在这个数组中添加一个字符串元素,内容为tel
      (这样就告诉系统你的应用需要查询tel这个URL Scheme)
  • 步骤2:修正URL格式
    找到你代码中生成电话URL的地方,把"tel: 0"里的空格去掉,改成"tel:0"。如果是动态生成的号码,建议用字符串处理方法自动去除空格,比如:

    NSString *phoneNumber = @" 0"; // 假设是动态获取的带空格号码
    phoneNumber = [phoneNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSURL *telURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", phoneNumber]];
    

验证修复

做完上面两步后,重新编译运行项目,那个界面的打电话功能应该就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:12:56