iOS13.0适配收集
第三方登录:
如果 APP 支持三方登陆(Facbook、Google、微信、QQ、支付宝等),就必须支持苹果登录,且要放前边.
黑夜模式:
YYLabel 如果使用了 textLayout属性,切换模式的时候 无法自动修改layout文本的颜色
内嵌WebView,需要手动修改css样式
KVC 限制
UITextField: [self setValue:color forKeyPath:@"_placeholderLabel.textColor"];//替换为self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.placeholder attributes:@{NSForegroundColorAttributeName: color}];
UISearchBar, 使用KVC修改私有属性textField, 崩溃
模态弹出默认交互改变
self.modalPresentationStyle = UIModalPresentationFullScreen;
textView.text 截取问题
只要使用截取文本长度的方法,在三指交互点击 撤销时可以必现崩溃
UISegmentedControl 默认样式改变
默认样式变为白底黑字,如果设置修改过颜色的话,页面需要修改
UITabbar 层次发生改变,无法通过设置 shadowImage去掉上面的线
可以参考 腾讯 QMUIKit 里面的实现
App启动过程中,部分View可能无法实时获取到frame
只有等执行完 UIViewController 的 viewDidAppear 方法以后,才能获取到正确的值,在viewDidLoad等地方 frame Size 为 0,例如: [[UIApplication sharedApplication] statusBarFrame];
UIWebView的废弃
部分APP使用webview时, 审核被拒
之前标记为 API_DEPRECATED 部分类被移除
CNCopyCurrentNetworkInfo 变化
iOS13 以后只有开启了 Access WiFi Information capability,才能获取到 SSID 和 BSSID
wi-fi or wlan 相关使用变更
新系统拍live照片,后缀为.mov,图片上传失败
拍照上传的文件为.mov, 一种视频格式,需要服务端支持;
[deviceToken description] 获取到的token格式发生变化
无法推送
MPRemoteCommandCenter
addTarget:action:在iOS 13中selector 一定要返回MPRemoteCommandHandlerStatus,要不然会闪退。
新浪weibo SDK启动崩溃
这个直接影响启动流程,最严重,优先级最高,也许升级sdk后会解决问题;更新到最新的SDK
发票PDF显示乱码
隐私与安全性
当 App 请求获取位置信息时,新增了「只允许一次」的选项;
当 App 在后台使用你的位置信息时,iOS 13 会通过弹窗进行提醒,你可以据此选择是否更新对该应用的隐私权限设置;
MPMoviePlayerController
在iOS13已经不能用了
2020 年 4 月前 App 启动画面必须使用 Launch Storyboards 处理
2020 年 4 月前需通过特定 API 解决屏幕适配及 iPad 分屏多任务处理
第三方库
iOS13 Beta 版适配,发现svga动画无法正常播放,svga中的资源没有加载出来。
4.暗黑模式
原理
1.将同一个资源,创建出两种模式的样式。系统根据当前选择的样式,自动获取该样式的资源
2.每次系统更新样式时,应用会调用当前所有存在的元素调用对应的一些重新方法,进行重绘视图,可以在对应的方法做相应的改动
资源文件适配
1.创建一个Assets文件(或在现有的Assets文件中)
2.新建一个图片资源文件(或者颜色资源文件、或者其他资源文件)
3.选中该资源文件, 打开 Xcode ->View ->Inspectors ->Show Attributes Inspectors (或者Option+Command+4)视图,将Apperances 选项 改为Any,Dark
4.执行完第三步,资源文件将会有多个容器框,分别为 Any Apperance 和 Dark Apperance. Any Apperance 应用于默认情况(Unspecified)与高亮情况(Light), Dark Apperance 应用于暗黑模式(Dark)
5.代码默认执行时,就可以正常通过名字使用了,系统会根据当前模式自动获取对应的资源文件
注意
同一工程内多个Assets文件在打包后,就会生成一个Assets.car 文件,所以要保证Assets内资源文件的名字不能相同
UIView
1 2 3 4 5 |
|
UIViewController
1 2 3 4 |
|
UIPresentationController
1 2 3 |
|
全局关闭黑暗模式
方式一 配置plist文件: 在Info.plist 文件中,添加UIUserInterfaceStyle key 名字为 User Interface Style 值为String,将UIUserInterfaceStyle key 的值设置为 Light
在开发中,如果用的系统控件(如cell、tableview的背景色)未设置背景色(或者为透明),则进入暗黑模式后,控件背景色变为黑色。
可以每一个页面设置,当然也可以整体设置,
一般我们的APP都是在一个window下的,那就整体设置APP里的window
方式二 :代码关闭黑暗模式 强制关闭暗黑模式
1 2 3 4 5 |
|
单个界面不遵循暗黑模式
- UIViewController与UIView 都新增一个属性 overrideUserInterfaceStyle
- 将 overrideUserInterfaceStyle 设置为对应的模式,则强制限制该元素与其子元素以设置的模式进行展示,不跟随系统模式改变进行改变
- 设置 ViewController 的该属性, 将会影响视图控制器的视图和子视图控制器采用该样式
- 设置 View 的该属性, 将会影响视图及其所有子视图采用该样式
- 设置 Window 的该属性, 将会影响窗口中的所有内容都采用样式,包括根视图控制器和在该窗口中显示内容的所有演示控制器(UIPresentationController)
iOS适配暗黑模式:https://www.jb51.net/article/169853.htm
5.增加一直使用蓝牙的权限申请
CBCentralManager,iOS13以前,使用蓝牙时可以直接用,不会出现权限提示,iOS13后,再使用就会提示了。
在info.plist里增加
1 2 |
|
6.使用MJExtension 中处理NSNull的不同
这个直接会导致Crash的在将服务端数据字典转换为模型时,如果遇到服务端给的数据为NSNull时,
mj_JSONObject,其中 class_copyPropertyList方法得到的属性里,多了一种EFSQLBinding类型的东西,而且属性数量也不准确,那就没办法了,我只能改写这个方法了,这个组件没有更新的情况下,写了一个方法swizzling掉把当遇到 NSNull时,直接转为nil了。
7. WKWebView 中测量页面内容高度的方式变更
iOS 13以前
document.body.scrollHeight
iOS 13中
document.documentElement.scrollHeight
两者相差55 应该是浏览器定义高度变了
8. 友盟消息推送,获取deviceToken适配
1 2 3 4 5 6 7 8 9 |
|
9. StatusBar 与之前版本不同
目前状态栏也增加了一种模式,由之前的两种,变成了三种, 其中default由之前的黑色内容,变成了会根据系统模式,自动选择当前展示lightContent还是darkContent
10. fishhook 导致的Crash (https://github.com/facebook/fishhook/issues/61)
————————————————
参考链接:https://blog.csdn.net/kuangdacaikuang/article/details/100513423