我正在开发不需要在App Store上的东西,因此使用私有API满足我的需求没有问题,我正在尝试使用MobileWiFi. framework to read the RSSI value for the wireless network the phone is currently connected to. I've included thehttps://github.com/Cykey/ios-reversed -headers / tree / c613e45f3ee5ad9f85ec7d43906cf69ee812ec6a / MobileWiFi`标头,并使用桥接标头将它们包括在我的swift项目中,并编写了如下代码。请原谅,我是新手。
MobileWiFi. framework to read the RSSI value for the wireless network the phone is currently connected to. I've included the
import SystemConfiguration.CaptiveNetwork typealias _WiFiManagerClientCreate = @convention(c) (CFAllocator, CInt) -> UnsafeRawPointer typealias _WiFiManagerClientCopyDevices = @convention(c) (UnsafeRawPointer) -> CFArray typealias _WiFiDeviceClientCopyProperty = @convention(c) (UnsafeRawPointer, CFString) -> CFPropertyList if let libHandle = dlopen (Paths.ipConfiguration, RTLD_LAZY) { result = libHandle.debugDescription let _createManagerPtr = dlsym(libHandle, "WiFiManagerClientCreate") let _clientCopyDevicesPtr = dlsym(libHandle, "WiFiManagerClientCopyDevices") let _clientCopyPropertyPtr = dlsym(libHandle, "WiFiDeviceClientCopyProperty") if (_createManagerPtr != nil) && (_clientCopyDevicesPtr != nil) && (_clientCopyPropertyPtr != nil) { let _createManager = unsafeBitCast(_createManagerPtr, to: _WiFiManagerClientCreate.self) let _clientCopyDevices = unsafeBitCast(_clientCopyDevicesPtr, to: _WiFiManagerClientCopyDevices.self) let _clientCopyProperty = unsafeBitCast(_clientCopyPropertyPtr, to: _WiFiDeviceClientCopyProperty.self) let manager = _createManager(kCFAllocatorDefault, 0) let devices = _clientCopyDevices(manager) let client = CFArrayGetValueAtIndex(devices, 0) let data = _clientCopyProperty(client!, "RSSI" as CFString) let rssi = CFDictionaryGetValue(data as! CFDictionary, "RSSI_CTL_AGR") NSLog("RSSI: \(rssi)") } dlclose(libHandle) }
这产生一个错误 fatal error: unexpectedly found nil while unwrapping an Optional value which stems from trying to call _createManager
fatal error: unexpectedly found nil while unwrapping an Optional value which stems from trying to call _createManager
我最终使用了这种解决方法:
+ (int) wifiStrength { UIApplication *app = [UIApplication sharedApplication]; NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSString *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { dataNetworkItemView = subview; break; } } return[[dataNetworkItemView valueForKey:@"wifiStrengthRaw"] intValue]; }
没有任何权利或越狱的作品