检测热点在 iPhone X 内崩溃

Detect hotspot crashed in iPhone X

我在 viewDidLoad 中有如下示例代码来检测热点开/关。它在 iPhone 6-8 中正常工作,但在 iPhone X 中崩溃。

 UIApplication *app = [UIApplication sharedApplication];
    if(![[app valueForKey:@"statusBar"] valueForKey:@"doubleHeightLabel"])
    {
       //Some code here
    }
    else
    {
        //Some code here
    }

显示的错误消息:-

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIStatusBar_Modern 0x7ffed341b7f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key doubleHeightLabel.'

有什么想法吗?

它崩溃是因为 Apple 更改了键 "statusBar" 持有的对象。它不再有键为 "doubleHeightLabel" 的对象。正如评论中所述,由于这个问题,Apple 禁止使用 private API 。当他们升级 iOS 版本时,他们会随心所欲地更改 "statusBar" 对象,因此键可能会丢失或更改,甚至可以保存一个完全不同的变量。

解决方案:不要使用 private API。做个好人,听苹果的。

有一种方法可以检查 CNCopyCurrentNetowrkInfo 当前的网络信息。

还有技巧:

Obj-c:

CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;

Swift:

let statusBarHeight = UIApplication.shared.statusBarFrame.size.height

启用个人热点后,它 returns 40,否则 returns 20。

请注意 它不适用于 iPhone X+