iOS 9下2010年Objective-C旧项目调用tel scheme报错求助
解决iOS 9+下
-canOpenURL: failed for URL: "tel: 0"的问题 嘿,这个问题我太熟了!之前帮同事调试2010年的老Objective-C项目时刚好碰到过一模一样的情况,给你拆解下怎么解决:
问题根源有两个:
- iOS 9的URL Scheme查询限制:从iOS 9开始,苹果为了隐私安全,要求应用必须显式声明要查询的URL Scheme,否则系统会直接拒绝查询请求,就会抛出你看到的
"This app is not allowed to query for scheme tel"错误。 - URL格式错误:你的URL里
tel:后面多了个空格("tel: 0"),这个空格会导致系统无法正确识别电话协议,也是功能失效的原因之一。
具体修复步骤:
步骤1:配置Info.plist声明tel Scheme
打开项目的Info.plist文件(也可以在Xcode中选择项目target,切换到「Info」标签页,在「Custom iOS Target Properties」里操作):- 添加一个新的键,命名为
LSApplicationQueriesSchemes,类型选择Array - 在这个数组中添加一个字符串元素,内容为
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
相关产品推荐
相关产品推荐

