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

iOS 17中获取SIM卡国家码:替代已废弃serviceSubscriberCellularProviders的方法咨询

iOS 17 获取SIM卡国家码及详情的替代方案

iOS 17 目前仍无直接替代serviceSubscriberCellularProviders的公开API来获取SIM卡国家码或完整详情,但可尝试以下几种间接方式:

  • 调用已废弃API的临时方案(不推荐长期依赖)
    尽管serviceSubscriberCellularProviders在iOS 16被标记为废弃,iOS 17中仍可能暂时可用。你可以继续通过它获取CTCarrier实例,从中提取isoCountryCode。但需注意,苹果未来版本可能彻底移除该API,存在兼容性风险。示例代码:

    import CoreTelephony
    
    let networkInfo = CTTelephonyNetworkInfo()
    if let carrier = networkInfo.serviceSubscriberCellularProviders?.values.first {
        let simCountryCode = carrier.isoCountryCode
        print("SIM国家码: \(simCountryCode ?? "无法获取")")
    }
    
  • 通过蜂窝网络MCC间接推断
    使用Network框架获取当前蜂窝网络的移动国家码(MCC),再通过MCC与国家码的映射关系推断出结果。这种方式仅能获取当前连接网络对应的信息,无蜂窝连接时失效,且需自行维护MCC映射表。示例代码:

    import Network
    
    let monitor = NWPathMonitor()
    monitor.pathUpdateHandler = { path in
        guard let cellularInterface = path.availableInterfaces.first(where: { $0.type == .cellular }),
              let mcc = cellularInterface.mcc else { return }
        
        let countryCode = self.mapMCCToISOCode(mcc: mcc)
        print("推断的国家码: \(countryCode ?? "未知")")
    }
    monitor.start(queue: DispatchQueue.global())
    
    // 示例映射函数,需补充完整MCC对应关系
    func mapMCCToISOCode(mcc: String) -> String? {
        let mccMap: [String: String] = [
            "460": "CN",
            "310": "US",
            "234": "GB"
            // 更多MCC映射需自行扩展
        ]
        return mccMap[mcc]
    }
    
  • 用户手动输入(最可靠方案)
    若上述方式无法满足需求,直接请求用户手动选择或输入所在国家/地区是最稳定的方案,不受系统API限制,且数据准确性更高。

注意:所有涉及蜂窝网络的API调用,都需要在Info.plist中添加NSCellularNetworkUsageDescription权限描述,说明应用使用该权限的具体用途。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:02:36