IOS13更新对于开发者来说,并不算太友好。原因有如下几点。
一、禁用私有属性通过KVC赋值。
对这一点,是分开两部分的。对于XCODE10以前的开发工具打包的安装包,这些改变私有属性的KVC方法在IOS13系统的手机上,并不会执行,就是说没有效果。而对于XCODE11以后的开发工具打包的安装包,则会自动检测,一旦发现该方法调用了KVC修改了私有属性,则会给出报错断言(如果连接了电脑真机调试),并直接闪退。
所以奉劝各位没来得及适配13的小伙伴们,尽量能保留10版本或以下的XCODE,预防直接更新后,太多崩溃导致影响到开发进程。
附上IOS13查找statusBar的方法
//IOS13新增了UIStatusBarManager属性
UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;
id _statusBar = nil;
if ([statusBarManager respondsToSelector:@selector(createLocalStatusBar)]) {
UIView *_localStatusBar = [statusBarManager performSelector:@selector(createLocalStatusBar)];
if ([_localStatusBar respondsToSelector:@selector(statusBar)]) {
_statusBar = [_localStatusBar performSelector:@selector(statusBar)];
}
}
这样就可以做执行view的方法,但并不能改变statusBar的背景颜色。
二、新增暗黑模式,完全适配需要进行较大UI更换。
包括图片,背景颜色,字体颜色等全方面的修改。以至于通常新版本里面并不能做到完全适配。这时候,我们有个投机的方法,直接添加代码到info.plist里面
<key>UIUserInterfaceStyle</key>
<string>Light</string>
这样可以在APP内禁用掉暗黑模式。但长远来说,苹果还是希望我们的APP会支持暗黑模式,不久的将来,会强制APP开发者去适配。
三、部分常用三方框架会导致闪退
常见有MJExtension,fishhock等三方大牛库,这个需要查找相关的临时解决方法,待三方框架更新适配。
四、蓝牙权限问题
在IOS12及以下的版本,使用蓝牙模块并不需要请求权限,所以很多线上的APP都没有加入相关请求权限信息。但因为苹果对隐私权限的进一步限制,在IOS13,就会直接闪退。这是必须等相关APP更新,也是很多果粉反馈所说,更新了IOS13以后,好多软件都直接闪退的原因。
除去上述的几大原因,还有一些零碎的方面,在这里就不陈述了。总结来说,在有条件的情况下,还是需要提前安装下一个大版本的测试版,对自家的APP做个提前的体检,以防会有重大的线上BUG出现。
PS:这次的XCODE新测试版更新的比较慢,并不能提前发现私有属性的崩溃问题。所幸只用来投机取巧改了些无关紧要的UI细节,并不会导致重大问题