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

iOS Swift调用canOpenURL访问message://协议报错无法打开邮件应用

报错原因
  • iOS 9及以上系统新增了URL Scheme查询的安全限制,所有需要通过canOpenURL:方法检测的自定义Scheme,必须提前在项目Info.plist的查询白名单中登记,未登记的Scheme调用查询接口就会触发该报错。
  • 你用到的message://是iOS系统邮件应用的专属URL Scheme,未加入白名单时直接执行检测逻辑,所以收到了不允许查询的错误提示。
  • 额外说明:iOS模拟器默认没有预装系统邮件应用,就算完成了白名单配置,模拟器上也无法正常调起该功能,需要使用真机测试。
解决方案

步骤1:配置URL Scheme白名单

打开项目的Info.plist文件,两种配置方式二选一即可:

  • 可视化编辑:添加类型为数组的Queries URL Schemes(对应原始键为LSApplicationQueriesSchemes),在数组中新增一个值为message的item。
  • 源码编辑:右键点击Info.plist选择Open As -> Source Code,粘贴以下代码:
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>message</string>
</array>

步骤2:优化调用逻辑(可选)

如果你不需要提前检测邮件应用是否存在,可以直接调用open方法,系统找不到对应应用时会自动返回失败不会崩溃,代码可以调整为:

func sendEmail() {
    //  Converted to Swift 5.4 by Swiftify v5.4.24488
    guard let mailURL = URL(string: "message://") else { return }
    UIApplication.shared.open(mailURL, options: [:]) { openSuccess in
        if !openSuccess {
            // 可在这里添加兜底逻辑,比如提示用户未安装邮件应用
            print("无法打开邮件应用")
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:45:03