WWDC20中iOS的改变

2022-08-02 15:05:54 浏览数 (1)

WWDC20中,绝大部份同学都会把注意力放在了iOS的布局改变和自研芯片上,这方面的文章也比较多,但作为一名开发者,更多的聚焦在iOS官方语言和官方库上来,这里仅找出几个更新比较大的点给大家分享。

1.UICollectionView

WWDC19开始,UICollectionView相比之前简单的DataSource、Delegate的形式多了一种新写法,通过DiffableDataSource支持了局部刷新、cell的方便增删改等;通过UICollectionViewCompositionalLayout 帮助开发者更简单地去构建复杂布局。

具体可以观看视频Discuss WWDC20 Session 10097 - Advances in UICollectionView

这里面是一个概述,展示了DiffableDataSource使用区域截图,创建可以展开/收起的轮廓界面,并向你介绍如何使用复合式界面的创建列表,并打造出带有网格视图、类似UITableView的界面。当然这里也分章节进行了介绍

Discuss WWDC20 Session 10026 - Lists in UICollectionView介绍是列表的使用

Discuss WWDC20 Session 10027 - Modern cell configuration介绍是网络视图与列表视图单元格的最新配置技巧

Discuss WWDC20 Session 10045 - Advances in diffable data sources介绍的是数据源方面的工作

值得一提的是,UICollectionView的升级是2019年开始的,所以20的分享更多的在19的基础上,对这方面感兴趣的同学可以从19开始看,这里推荐一篇文章https://www.jianshu.com/p/86f94a20abdc,里面有一些新的demo可以参考。

这里做一个简单的介绍

UICollectionViewCompositionalLayout

我们在写现有的layout的时候,了解到目前的collectionView有item和section两个维度。而在modern collectionview里,在这两者之间增加了一个Group纬度。为的就是更方便地创造出更复杂的布局:

有了group以后,我们可以嵌套多种排列的Item。这样有利有弊,好处不言而喻,坏处当然是理解起来又要多一个层级。

Group 有三种形式水平(horizontal)、垂直(vertical)、自定义(custom)从这里可以看出,collectionView的布局越来越多样,越来越多样,多性能监控和用户行为监控提了更高的要求,

DiffableDataSource

类似于DiffableDataSource的概念其实我们在IGList中有接触,通过为数据源设置不同的identifier实现数据源和UI的绑定。在刷新数据源时,只要重新计算diff,计算进行局部刷新,可以大大提高UICollectionView的性能。 在modern collectionview 中也引入了新的DiffableDataSource的概念,我们不再需要设置Datasource通过一系列数据源方法返回,而是通过一开始的绑定,通过snapshot进行刷新。

UICollectionLayoutListConfiguration

今年WWDC20的session里,比较大的两个更新就是增加了outline展开收起样式的支持和新增UItableViewlike的 collectionView。也就意味着collectionView可以做UItableView的事情了(不再需要UItableView),同样,该样式还支持左滑删除等tableview的特色属性。

Modern Collection Views 是iOS13推出iOS14持续更新的新概念,有兴趣的童鞋可以继续去https://developer.apple.com/news/?id=d9kd3m7g 看一下Session和Video,我这里只提到了部分更新,其实WWDC19 20 关于CollectionView的改造还是比较多的。总结出整体的大趋势是 去TableView化、推动DiffDataSource和支持更复杂的布局样式。

官方demo:

https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/implementing_modern_collection_views

相对于性能监控,布局的复杂带动的是动画的复杂,卡顿、慢、内存泄漏的情况可能会一定程度的突出,而布局的复杂和数据源的局部更新对于用户行为的获取的也要求更高,需要实时逐个层级的获取,才能获取准确的用户行为的内容。特别是去TableView化的趋势,这样来看UICollectionView将会成为以后自定义UI的主流。

全文参考https://xiaozhuanlan.com/topic/7685190234和https://xiaozhuanlan.com/topic/1254097836

2.PencilKit

WWDC 2019引入了另一个有趣的框架PKCanvasView。现在可以在iOS 13上使用。PencilKit使开发人员可以轻松地在其应用程序中集成绘图画布视图和工具包。

PencilKit可让您轻松快捷地将手绘内容整合到iOS或macOS应用中。 PencilKit为iOS应用程序提供了一个绘图环境,该环境可以从Apple Pencil或用户的手指中获取输入,并将其转换为您在iOS或macOS中显示的高质量图像。该环境附带了用于创建,擦除和选择线条的工具。

具体可以参考https://www.jianshu.com/p/0cfe5eebbb6a,是SwitchUI里面的一个库,

这里有个细节,框架中的PKCanvasView是可以进行绘图的内部区域。用户可以在此处绘制所有艺术作品和涂鸦,而PKCanvasView支持Catalyst,虽然不支持工具选择器,但可以看出对于苹果对于“手绘”的目标,这里对于屏幕的响应在用户行为上报的地方已经有所涉猎,但大范围的绘图仍是一个考验,特别是在卡顿方面的监控,是不是与用户的感知相一致,也是一个需要研究的问题。

参考https://xiaozhuanlan.com/topic/0378415692

3.Metal

Metal 自2018年开始成为了苹果全线系统的 GPU 编程的默认推荐,OpenGL API开始被全线 deprecate。Metal 各种Debugger已经比较全了。WWDC20专门讲解了如何使用Xcode12中的Metal调试和性能优化工具找到图形问题

Discuss WWDC20 Session 10605 - Gain insights into your Metal app with Xcode 12

其实2018年开始,instrument里面就新增了Game Performance工具,来查找图形渲染的性能问题,具体使用可以参考https://xiaozhuanlan.com/topic/3971586402

当然,这一次的内容还有很多,包括app的移植、运行、调试、优化,这个系列对于图形、动画、游戏类的app还是挺多帮助的。

这一次用xcode来查看更多的问题,可以对于图形、动画、游戏类的app对于外发版本前发现性能问题有很大的帮助,也有助于专项性能的发布前测试,不过这里跟代码的强相关性是一直存在的,从专项侧更多是“教”会开发同学自主debuger,而sdk方面可以在资源上报上做些文章,看看能不能动态的获取相关告警信息。

4.Catalyst

Catalyst是能够将iOS应用程序引入macOS的基础架构,这些年,很多的iOS的app开始尝试跨平台开发,事实上,Catalyst也在不断的改进,今年也将更多iOS的库或者对应的功能加入到Catalyst中,甚至引入了macOS上不存在的框架,从而可以更轻松地将应用程序引入Mac Catalyst,而不必在为Mac编译时有条件地排除代码,目前的目标(macOS Big Sur或更高版本)是:iOS代码可以与不支持AR的iOS设备完全一样地工作。

今年的API增加了Catalyst对在iOS中处理物理键盘事件的支持,这对设备的用户行为上报是个利好消息,此外,tvOS的焦点引擎API现在可用于Mac Catalyst中的应用程序,UICollectionView和UITableView允许选择跟随键盘焦点。等等,这对于移植的程序和用户行为监控,性能数据监控也是要面对的内容

5.WWDC20 10091 Write tests to fail

这里是讲如何做好单元测试的地方,由于这块代码是业务代码强相关,需要开发者自己进行撰写,这里不仅做了讲解,还对一些功能进行了演示,十分推荐iOS的同学学习,特别是做业务代码时,对于不确定的行为,有比较大的帮助。

参考https://xiaozhuanlan.com/topic/8632549071

6.WWDC20 10214 - 移植 Mac app 到 Apple Silicon

怎么说呢,apple放弃intel后,以后的设备都将用自研 Apple Silicon ARM 芯片,特别是mac端,故如何为 Apple Silicon 重新编译 MacOS App,如何构建通用架构 App,以及让这些 App 启动更快,性能更好并支持平台未来发展是需要我们关注的,这里apple给出了一个移植用例,可以作为一个通用参考。

参考https://xiaozhuanlan.com/topic/8024365197

7.corelocation

在今年的 WWDC 中,该 session 主要介绍了 Core Location 的一些新变化。WWDC20 10660 - What's new in location里面对于定位授权,精确度都进行了细分,现在用户可以从两个维度上指定他们希望授予 App 位置访问权限,一是 “什么时候”,二是“多少”。用户可以通过授权执行各种操作,例如先在 Reduced 的情况下授予使用权,然后将其升级为 Full,甚至进行诸如将授权更改为 Always,然后再次将精度降级为 Reduced 的操作。

这里对于性能数据监控上来说是需要注意的点,

首先,CLLocationManager的类方法被弃用了,被替换成一个属性。

同时引入了一个新的属性CLAccuracyAuthorization,是一个枚举类型,指定位的精确度。.fullAccuracy是 iOS 14 之前版本的默认值,代表高精度。.reducedAccuracy是新增的,代表低精度。 locationManagerDidChangeAuthorization 替换了旧的代理回调方法。

每当authorizationStatusaccuracyAuthorization属性值发生更改时,就会调用此新方法。

具体可以参考https://xiaozhuanlan.com/topic/0675943128

wwdc19里面其实也有一些改变,建议一起看,参考https://xiaozhuanlan.com/topic/4209567831

8.WWDC20 10659 - Introducing StoreKit Testing in Xcode

Sandbox 环境终于可以享受跟正式环境一样的手动取消自动订阅,不用新建沙盒测试账号就能重新体验首购优惠,退款,升降级等操作了。这样会让银行等APP在线下进行很多的用例测试,很多性能也会提前暴露出来,这地性能监控来说是比较好的事情

参考https://xiaozhuanlan.com/topic/1950472863和https://www.jianshu.com/p/cd6c90bd55e5

9.WWDC20 Session 10076 - Diagnose performance issues with the Xcode Organizer

这个工具已经有很长时间了,但很多工程师并不喜欢用,感觉准确度不高,但wwdc一直在推荐,既然在推荐我们还是要看一看,这一次更新了关于滑动卡顿的内容和硬盘读写的内容,特别是一些指标,可以对于性能监控有一个概括的帮助。

参考https://xiaozhuanlan.com/topic/9823657014

10.Swift

最后,事实上,这一次的WWDC介绍了大量的Swift的内容,这里没有涉猎,网上有很多相关的内容,可以看出Swift早晚会转正,而且内容会更加完善,例如App Clip只在Swift上支持,有兴趣的同学可以看https://xiaozhuanlan.com/topic/2804537169

最后,可以参考https://blog.csdn.net/fzhlee/article/details/106954425 速览wwdc20的内容

0 人点赞