使用swift跟踪蜂窝数据使用情况

有没有办法在swift中跟踪设备使用的蜂窝数据? 有没有api? 我正在努力实现这样的目标

更新到Swift 4,您可以使用这个简单的扩展。 跟踪设备单元和wifi使用情况。

extension SystemDataUsage { public static var wifiCompelete: UInt64 { return SystemDataUsage.getDataUsage().wifiSent + SystemDataUsage.getDataUsage().wifiReceived } public static var wwanCompelete: UInt64 { return SystemDataUsage.getDataUsage().wirelessWanDataSent + SystemDataUsage.getDataUsage().wirelessWanDataReceived } } class SystemDataUsage { private static let wwanInterfacePrefix = "pdp_ip" private static let wifiInterfacePrefix = "en" class func getDataUsage() -> DataUsageInfo { var ifaddr: UnsafeMutablePointer? var dataUsageInfo = DataUsageInfo() guard getifaddrs(&ifaddr) == 0 else { return dataUsageInfo } while let addr = ifaddr { guard let info = getDataUsageInfo(from: addr) else { ifaddr = addr.pointee.ifa_next continue } dataUsageInfo.updateInfoByAdding(info) ifaddr = addr.pointee.ifa_next } freeifaddrs(ifaddr) return dataUsageInfo } private class func getDataUsageInfo(from infoPointer: UnsafeMutablePointer) -> DataUsageInfo? { let pointer = infoPointer let name: String! = String(cString: pointer.pointee.ifa_name) let addr = pointer.pointee.ifa_addr.pointee guard addr.sa_family == UInt8(AF_LINK) else { return nil } return dataUsageInfo(from: pointer, name: name) } private class func dataUsageInfo(from pointer: UnsafeMutablePointer, name: String) -> DataUsageInfo { var networkData: UnsafeMutablePointer? var dataUsageInfo = DataUsageInfo() if name.hasPrefix(wifiInterfacePrefix) { networkData = unsafeBitCast(pointer.pointee.ifa_data, to: UnsafeMutablePointer.self) if let data = networkData { dataUsageInfo.wifiSent += UInt64(data.pointee.ifi_obytes) dataUsageInfo.wifiReceived += UInt64(data.pointee.ifi_ibytes) } } else if name.hasPrefix(wwanInterfacePrefix) { networkData = unsafeBitCast(pointer.pointee.ifa_data, to: UnsafeMutablePointer.self) if let data = networkData { dataUsageInfo.wirelessWanDataSent += UInt64(data.pointee.ifi_obytes) dataUsageInfo.wirelessWanDataReceived += UInt64(data.pointee.ifi_ibytes) } } return dataUsageInfo } } struct DataUsageInfo { var wifiReceived: UInt64 = 0 var wifiSent: UInt64 = 0 var wirelessWanDataReceived: UInt64 = 0 var wirelessWanDataSent: UInt64 = 0 mutating func updateInfoByAdding(_ info: DataUsageInfo) { wifiSent += info.wifiSent wifiReceived += info.wifiReceived wirelessWanDataSent += info.wirelessWanDataSent wirelessWanDataReceived += info.wirelessWanDataReceived } } 

您可以使用它: SystemDataUsage.wifiCompelete