一文带你读完WWDC21核心(新)技术点

·  阅读 1885
一文带你读完WWDC21核心(新)技术点

一年一度的WWDC又来了,一起来看看今年又有哪些值得关注的技术点吧~

附赠食用指南:

一:足不出Xcode,体验一站式开发?集成Xcode Cloud的Xcode满足你的一切开发需要(Xcode Cloud Beta现在限时免费,感兴趣的小伙伴可以去官网申请)

二:async/await,Structured concurrency,Actors如何让Swift异步编程更安全便捷?

三:Swift Playgroud让iPad重回生产力,在iPad上开发应用的时代来了!

四:Focus模式,别让通知分散你的注意力!通知新增的四种干扰等级了解一下?

五:如何让你的Widget更容易被用户看到? 答:做个更大的Widget

六:有了Shareplay,让团建不再被距离局限!

(温馨提示:本片内容来源自WWDC21:Platforms State of the Union

想了解更多WWDC2021内容的小伙伴,可以阅读我以下文章,欢迎多多交流和指正

检测和诊断内存问题

APP终极性能生存指南

Xcode Cloud

试想一个一站式的iOS开发体验,在Xcode中提交代码后,自动在云端编译并且测试,接下来开发者只需根据Xcode上显示的测试结果改进代码,当一切准备就绪,就会自动将应用分发到各平台的TestFlight中...,为了实现这样流畅的开发体验,Apple将开发流程中所涉及到的所有环节,都集成到了Xcode中。

温馨提示:Xcode Clould目前限时免费,大家可以在官网申请Beta版权限

1.png

  • 原有的开发流程

    • 各个环节

      Coding -> 测试 -> 整合 -> 分发 -> 改进

      这里的整合指的是功能分支合到主干分支的过程。

      2.png

    • 痛点

      每个环节依赖不同的工具,而环境切换的过程往往会中断我们编写代码的思路

  • Xcode Cloud

    一个负责持续集成和分发服务的工具

    • 优势:

      • 内置在Xcode,无需切换工作上下文;
      • 提交Commit后,自动在云端编译;
      • 灵活且可扩展,支持集成其他CI系统;
      • 数据安全,保证源码、密钥安全。
    • 工作流:

      • 选中项目

        3.png

        4.png

      • 确认工作流

        5.png

      • 授权访问源代码

        6.png

      • 连接App Store Connect

        7.png

      • 查看结果

        8.png

        • 左侧导航器会根据项目的分支名进行分组

        • 右侧详情页会显示所有动作的状态

          9.png

      • 增加新的工作流

        10.png

        • 设置触发编译的条件

          • 方案一:分支上每次代码变更时触发

          • 方案二:Pull Request分支上每次代码变更时触发

          • 方案三:对标签(Tag)进行修改时触发

            11.png

        • 选择Xcode的版本

          12.png

        • 添加Action

          13.png

          • 添加UI Test

            14.png

        • 查看Action运行结果

          15.png

          • 可以使用Xcode Cloud通过UI Test过程中的截屏查看运行过程

            16.png

  • 分支整合

    • 在Xcode中管理Pull Request

      17.png

    • 在当前编译的条件下,Xcode Cloud会自动构建和测试所有Pull Merge分支上的新Commit

    32.png

    • 还可以快速定位至评论中所涉及到的代码位置

      点击左侧栏中带有信息标识的类名,点击可以直接定位到对应的位置,并查看评论

      18.png

      19.png

  • 分发

    • 云端自动签名

      开发者无需关心描述文件和密钥等事项

    • 支持多平台 TestFlight自动分发(包括Mac版)

  • 改进

    • 在测试过程中,Xcode Organizer可以在几分钟内收到TestFlight用户的反馈信息,开发者可以根据用户描述的信息对代码进行改进

      20.png

Swift

异步

  • 理解asymc/await

    await表示当前调用者正在等待异步函数的结果

    比如:完成一次舞蹈演出需要三个 异步步骤:演员热身、工作人员从仓库找出道具、搭建舞台,完成这些演员才可以登台演出。

    • 原有嵌套式写法(伪代码):

      func prepareForShow {
        // 演员热身
      	danceCompany.warmUp {
          // 工作人员从仓库找出道具
      		 self.crew.fetchStageScenery {
              // 搭建舞台
      		 		self.setStage {
                // 登场演出
      		 		  dancers.moveToPosition
      		 		}
      		 }
      	}
      }
      复制代码
  • 使用async/await的直线排列式写法:

      func prepareForShow() async throws -> Scene {
      	let dancers = try await danceCompany.warmUP(duration: .minutes(45))
      	let scenery = await crew.fetchStageScenery()
      	let openingScene = setStage(with: scenery)
      	return try await dancers.moveToPosition(in: openingScence)
      }
    复制代码
  • 结构化并发(Structured concurrency)

    再比如:完成一次舞蹈演出需要三个 异步步骤:演员热身、工作人员从仓库找出道具、搭建舞台,完成这些演员才可以登台演出。其中演员热身工作人员从仓库找出道具、搭建舞台可以同时进行

    • 创建并发子任务

      func prepareForShow() async throws -> Scene {
      	async let dancers = try await danceCompany.warmUP(duration: .minutes(45))
      	async let scenery = await crew.fetchStageScenery()
      	let openingScene = setStage(with: await scenery)
      	return try await dancers.moveToPosition(in: openingScence)
      }
      复制代码
  • actors

    • actor

      actor StageManager {
      	var stage: Stage
      	
      	func setStage(with scenery: Scenery) -> Scene {
      	}
      }
      复制代码

      以前通过串行dispatch queue进行属性互斥访问的方式,由于需要管理很多冗余代码,很容易引入额外的竞争机制,从而出现问题, 而将actor作为一级构造嵌入到Swift里,可以底层设计层面避免了这种情况的发生。

  • MainActor

    函数会同步到主线程执行

      @MainActor
      func display(scene: Scene)
    复制代码

小结:async/await让异步代码写的更自然,结构化并发让代码更容易理解,actors用来构建安全的共享状态

Swift Playgrounds

现在在iPad上也能用Swift Playgrounds开发app了

21.png

  • 在iPad上可以直接发布应用到TestFlight

    22.png

Focus

  • 通知

    原有的通知无论优先级如何,都会以相同的方式堆积在我们的屏幕上,完全看不出哪一条通知更重要

    • 现在通知可以归类成四类干扰等级

      • Passive

        无声且不会唤醒设备,下一次拿起手机时显示,用于时效性不强的通知

      • Active(同之前默认的通知类型)

        带有音效和触感反馈,同以往的通知一样

      • Time Sensitive

        这一等级的通知会马上推送给用户,用户不点击会停留在锁屏页上一段时间,用于马上需要读取的通知

      • Critical

        即使设备静音,也会播放声效,只有关系到健康和安全的重大通知,才能设置成这一等级,且设置时需要用户授权

      除此之外,还有一种特别的通知:

      • 消息类型通知(信息或者通话)

        如果你开发的是通信类APP,可以告诉系统,这是消息或者通话类型的通知,系统会自动调整通知的样式和运行方式,以便人们更好的查看消息

    • 通知摘要

      为了避免人们错过一些通知,同时帮助用户能在自己想要的时间查看通知,系统提供了一种新的通知展示样式 --- 通知摘要,用户可以使用通知摘要,在选择的时间来集中查看推送

      23.png

      • 消息类型:只展示Passive或Active类型的通知

      • 通知摘要的顶部有两个轮播位置

        • 轮播位通知选取规则:
          • 带有大缩略图的通知会比没有大缩略图的通知,优先入选
          • 默认情况:推送最多的APP会优先得到推荐,当然用户可以在此基础上个性化定制摘要
    • 等级调整

      系统根据用户和APP通知的交互行为,推荐用户将其调整为合适的干扰等级

      • 如果用户经常在专注模式使用某APP

        系统会建议将该APP调整为专注模式时允许接收通知

        24.png

      • 如果用户经常与某APP的Time Sensitive通知进行交互

        系统会建议将改APP的通知等级调回为Active

        25.png

      • 如果某APP不断发送通知,用户却没有反应

        系统会建议将这个APP发送的通知静音

        26.png

  • 小结

    • 通过设置通知相关性分数和合适的缩略图,使通知占据摘要顶部的轮播位置
    • 思考APP的通知最适合哪一干扰级别
      • 例如:如果是聊天软件,应该使用最新的User Notifications API来告诉系统来自APP的消息和来电通知
    • 使用最新的Focus Status API,在APP里显示用户的专注模式状态

Widget

通过Widget的新特性让你的APP更好用、且更容易被用户看到

  • 使用iPad上的超大尺寸小组件

    27.png

  • 通过Intents框架让Widget自动加入到智能堆叠小组件中

    28.png

SharePlay

人们聚会时,除了聊天以外,分享体验也很重要,SharePlay Kit的出现正是为了帮助人们在难以相见的时候,依旧保持紧密联系。

29.png

  • 入口

    • FaceTime
    • iMessage

    让人们在视频聊天的同时,共同进行一项活动,比如:共享视频播放、共享画布。

  • 共享视频播放

    30.png

在视频APP里采用Group Activities和AVPlayer同步,从而可以快速集成这一功能。

  • 共享画布

    基于Group Activities,将笔画发给FaceTime群组中的每一个人,从而实现协同绘画

    33.png

小结:只需要让APP实现Group Activities,就可以实现基于FaceTime的共享体验

分类:
iOS
标签:
分类:
iOS
标签: