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

iOS11.1+Swift4获取MNC/MCC报错,模拟器运行问题求助

关于iOS模拟器获取MCC/MNC报错的解决方案

嘿,我来帮你捋清楚这个问题~

首先可以明确说:这个错误几乎百分百是iOS模拟器导致的。因为模拟器本身没有真实的蜂窝网络硬件模块,它只能模拟基础的网络连接状态(比如Wi-Fi/蜂窝开关),但根本无法获取MCC(移动国家代码)、MNC(移动网络代码)这类依赖实体SIM卡和蜂窝基站的核心参数,初始化网络信息时自然会抛出失败提示。

下面给你分两种场景的具体解决方案:

一、模拟器测试的处理方式

如果需要在模拟器里跑通逻辑,建议直接加环境判断,跳过真实的运营商信息获取逻辑,返回测试用的模拟值:

import CoreTelephony

func fetchMCCMNC() -> (mcc: String?, mnc: String?) {
    #if targetEnvironment(simulator)
        // 模拟器环境返回测试数据,比如国内运营商的标准MCC/MNC
        return ("460", "01")
    #else
        // 真机环境执行真实获取逻辑
        let networkInfo = CTTelephonyNetworkInfo()
        guard let carrier = networkInfo.subscriberCellularProvider else {
            print("无法获取运营商信息")
            return (nil, nil)
        }
        return (carrier.mobileCountryCode, carrier.mobileNetworkCode)
    #endif
}

二、真机环境的正确配置

如果在真机上测试,你需要注意这几个关键点:

  1. 导入CoreTelephony框架:确保你的项目已经导入该框架,否则无法调用运营商信息相关API。
  2. 处理位置权限:iOS 10及以后,出于隐私保护,获取运营商信息需要用户授权位置权限。你需要在Info.plist中添加权限描述:
    • 添加NSLocationWhenInUseUsageDescription键,值填写类似“需要获取位置权限以获取运营商网络信息”的说明文本。
    • 在代码中主动请求位置权限:
      import CoreLocation
      
      let locationManager = CLLocationManager()
      locationManager.requestWhenInUseAuthorization()
      
  3. 确保设备有有效SIM卡:如果真机未插入SIM卡或SIM卡无效,同样无法获取MCC/MNC信息。

补充说明:你使用的iOS 11.1版本中,subscriberCellularProvider这个API是完全可用的;该API在iOS 12及以后被废弃,但你的环境暂时无需考虑这个兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:16:52