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 }
二、真机环境的正确配置
如果在真机上测试,你需要注意这几个关键点:
- 导入CoreTelephony框架:确保你的项目已经导入该框架,否则无法调用运营商信息相关API。
- 处理位置权限:iOS 10及以后,出于隐私保护,获取运营商信息需要用户授权位置权限。你需要在
Info.plist中添加权限描述:- 添加
NSLocationWhenInUseUsageDescription键,值填写类似“需要获取位置权限以获取运营商网络信息”的说明文本。 - 在代码中主动请求位置权限:
import CoreLocation let locationManager = CLLocationManager() locationManager.requestWhenInUseAuthorization()
- 添加
- 确保设备有有效SIM卡:如果真机未插入SIM卡或SIM卡无效,同样无法获取MCC/MNC信息。
补充说明:你使用的iOS 11.1版本中,subscriberCellularProvider这个API是完全可用的;该API在iOS 12及以后被废弃,但你的环境暂时无需考虑这个兼容性问题。
内容的提问来源于stack exchange,提问作者user6346482
相关产品推荐
相关产品推荐

