# 老司机 iOS 周报 #207 | 2022-07-04

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22)

> 上周一共更新了 19 篇文章，目前总共已经更新了 34 篇，每篇质量都非常高，由于篇幅问题，开头先推荐 5 篇可能大家更感兴趣的，其他的放到周报最后了~

### 🌟 [【WWDC22 10078】降低网络延迟：让你的 App 变得更快](https://xiaozhuanlan.com/topic/3108247569)

如何让 App 变得更快，对于开发者来说是一个永恒的课题。2021 年，苹果给大家分享了许多网络延迟优化相关的理论知识，而今年，苹果在去年的基础上，又为我们带来了这一篇颇具实战指导意义的分享，从客户端侧、服务端侧、网络协议侧三个方面入手提供了一系列行之有效的建议，帮助开发者们更好的分析和改善应用的网络延迟状况，从而让你的 App 变得更快。

### 🌟 [【WWDC22 110427】What's new in Xcode](https://xiaozhuanlan.com/topic/9706284531)

本文主要从 Xcode 14 功能上的更新以及体积性能的改进入手，通过简单 Demo 的演示，分享此次 Xcode 令人振奋的一些更新。本文将主要聚焦 Xcode 本身的性能优化提升、开发者效率提升以及其他新增功能这几个角度，通过对这些更新的了解，相信会对大家的日常工作开发有很大的帮助。

### 🌟 [【WWDC22 110362】快速链接：提高构建和启动耗时](https://xiaozhuanlan.com/topic/1509638472)

本 session 是由苹果链接器团队的首席工程师 Nick Kledzik 带来的关于如何实现快速链接的分享。主要介绍了苹果近期在静态链接和动态链接方面的一系列优化，同时帮助大家理解链接过程中的底层细节，让大家可以提升自己 App 的静态和动态链接性能。

### 🌟 [【WWDC22 110355】Meet Swift Async Algorithms](https://xiaozhuanlan.com/topic/8217965043)

本文通过阅读源码的方式，来深入理解苹果官方 Async Algorithms 实现逻辑。全文可以分为三部分：
- 第一部分介绍对于多个输入情况下，处理输入/输出结果的逻辑
- 第二部分介绍 Clock 协议，以及相关的使用方式和效果
- 第三部分介绍在 Clock 协议上实现的两个算法
- 第四部分简单的比较苹果实现的 Async Algorithms 和常见的面向过程框架

### 🌟 [【WWDC22 110351】使用 Swift 并发消除数据竞争](https://xiaozhuanlan.com/topic/8297064135)

本文主要回顾了在 Swift 5.5 中引入的 Sendable 协议和用法，同时介绍了 Swift 5.7 编译器中基于 Sendable 协议实现的边界检查，防止在任务切换或者 Actor 切换时造成的数据竞争。探讨了低级数据竞争( low-level data race )，也探讨了如何通过在 Swift 并发中实现事务原子性从而防止高级数据竞争( high-level data race )，同时讲述了如何在安全的并发环境中保持代码逻辑的执行顺序。

## 新手推荐

### 🐕 [iOS内存分析之Memory Graph](https://mp.weixin.qq.com/s/siwMWiSGcCyk-CVPcNjHMw)

[@老驴](https://weibo.com/u/6090610445)：Memory Graph 是 iOS 开发中经常用到的非常好用的工具。对于一些比较难 debug 的内存泄露类型的 bug 来说，可以做到事半功倍的效果。这篇文章介绍了怎么样使用 Memory Graph，也包括了内存泄露的分析的基础分析方法，如果你是刚接触 iOS 开发的话，不妨来读一读。

## 文章

### 🐎 [What Apple might do with distributed computing](https://rhonabwy.com/2022/06/01/what-apple-might-do-with-distributed-computing/)

[@Smallfly](https://github.com/iostalks)：本文针对 Swift 不断迭代的并发模型，提出了对苹果在分布式计算领域的发展设想。作者期望苹果系统的跨进程通信能力，能复用在跨设备通信上，来提高苹果设备的协作性。并例举了分布式计算能解决的两个现存问题，一个是 Siri 唤起多设备，设备不能统一化决策问题；另一个是 HomeKit 数据共享问题。

### 🐎 [Existential any in Swift explained with code examples](https://www.avanderlee.com/swift/existential-any/)

[@享耳先森](https://github.com/iblacksun)：在 Swift 5.6 中，[SE-335](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md) 引入了 `existential any`，Swift 5.7 对其进行了增强。本文详细介绍了 `any` 关键词具体用法、和 `some` 的差异及对性能的影响。

### 🐕 [如何持续突破性能表现？DX 性能优化策略详解](https://mp.weixin.qq.com/s/E-ep8vIQpIIMCUhGGxdS0Q)

[@Barney](https://github.com/BarneyZhaoooo) 本文介绍淘宝乃至整个阿里集团内广泛使用的 Native 动态化方案 DinamicX，一步步带我们揭开它的神秘面纱，文章干货比较密集，需要仔细品读。

- DX 现状
- 管线优化
- 渲染优化
- 离屏资源管控框架

### 🐢 [使用 LLVM](https://ming1016.github.io/2022/06/10/use-llvm/)

[@anotheren](https://github.com/anotheren)：来自戴铭的 LLVM 系列文章，目前已更新至代码真实使用情况的篇章，介绍了如何使用 LLVM 低成本地检查代码使用情况。如果你也需要检查代码的新陈代谢来控制包体积，不妨看看这篇文章。

### 🐎 [Some keyword in Swift: Opaque types explained with code examples](https://www.avanderlee.com/swift/some-opaque-types/)

[@Damien](https://github.com/ZengyiMa)： some 关键词是 Swift 5.1 的新特性，它的作用是允许你在不定义具体类型的情况下描述预期的返回类型，在 Swift 中可帮助简化代码并提高可读性。同时在 Swift 5.7 也引入了许多改进并且编译器也可以进行代码优化，本文作者细心整理了使用 some 的例子和注意事项，想必看了本文之后能对 some 的理解和使用更上一层楼。

### 🐎 [Dutter | 前车之鉴：聊聊钉钉 Flutter 落地桌面端踩过的“坑”](https://mp.weixin.qq.com/s/53pZQgDI642dWQPY2CdkiA)

[@老峰](https://github.com/gesantung)：本文主要介绍一下钉钉 Flutter 业务灰度过程中，在桌面端遇到并处理过的几个 FlutterEngine 层面的 Bug。具体包含以下内容：

Mac 端：

- FlutterEngine 退出之后内存泄漏问题；

- FlutterEngine shutdown 阶段死锁问题；

- 低版本 macOS OpenGL 析构阶段 Crash 问题；

Windows 端：

- Win7 设备渲染模块「Crash + 残影」问题；

- FlutterPlugin 注册阶段野指针 Crash；

- Flutter Window 可见性变化之后页面白屏。

《Dutter 系列文章》分享了钉钉在跨四端方框架的技术实践与踩坑经验，共分为上、下两篇，上篇内容可点击[《钉钉 Flutter 跨四端方案设计与技术实践》](https://mp.weixin.qq.com/s?__biz=Mzg4MDY0ODk0Ng==&mid=2247486687&idx=1&sn=f928b90fb1d3964970dc0c6b0d9f11f9&chksm=cf70bb42f80732549e87b91ca1ad72a758db06d890249c8ac47cfc86c2689556f8ba84d51946&scene=21#wechat_redirect)，感兴趣的小伙伴建议阅读。

### 🐕 [Flutter 渲染性能问题分析](https://mp.weixin.qq.com/s/PaJs948QvupKZ0umjT2vjA)

[@EyreFree](https://github.com/EyreFree)：Flutter 有很多优点，虽然它在渲染性能上有不少缺陷，但是某种程度上，某些缺陷也是为了实现更高层次的设计目标而不得不承受的结果。这篇文章就是对比 Web (Chromium) 和 Native (Android)，对 Flutter 的渲染性能问题进行深入分析，特别是分析惯性滚动性能糟糕的原因。并且提供了一些优化思路和优化结果的分析数据，对 Flutter 性能优化感兴趣的朋友不要错过。

### 🐎 [信息安全 | 互联网时代，如何建立信任？](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247484972&idx=1&sn=4f0d819e8ab9456bd2ee81942abb3f22&chksm=ceea4b8cf99dc29ad27798c860c9db89621d81497fb6a5d206ed0602d75cffbb1bfdbec5809a&token=2062691669&lang=zh_CN#rd)

文章从信息安全是什么说起，到为什么，到怎么做，脉络清晰，层层递进，最后还聊了一些相关的应用加深理解。

通过文章可以让读者回答并理解以下问题：

1. 信息传输一般使用对称加密+非对称加密，为什么？不能只使用其中一种吗？
2. 信息安全为什么需要数字签名？
3. 为什么签名前需要做哈希操作？
4. 信息安全为什么需要数字证书？

文章的终极目标是：当我们在遇到密码学相关问题时，不再恐惧和迷惑。

> 推荐人：[doubleLLL3](https://github.com/doubleLLL3)（公众号 Bo2SS）

## 工具

### Git 相关

- [lazygit](https://github.com/jesseduffield/lazygit)
- [约定式提交](https://www.conventionalcommits.org/zh-hans/v1.0.0-beta.4/)
- [git-cz](https://github.com/streamich/git-cz)

[@红纸](https://github.com/nianran): lazygit 是一款 GUI 化的 Git 终端交互工具，其界面简洁，通过快捷键就能触达各个指令功能，实属是键盘控的福音了~

约定式提交提供了一种提交 git commit message 的规范化里面，旨在提供「一种用于给提交信息增加人机可读含义的规范」，举例用 "feat(Person): Submit new parameters" 来提供人机可读的交互，**feat** 代表新功能 **(Person)** 则代表 Person 作用域，后面则是具体的提交说明。使用约定式提交，我们还可以利用 CI/CD 来自动化生成 CHANGELOG，包括我们 SDK 的 Release Note 都可以这么去做。git-cz 则是一款非常优秀的引导使用约定式提交工具。

## WWDC22 内参更新

### 🌟 [【WWDC22 10074】AppKit 框架的新特性](https://xiaozhuanlan.com/topic/5137426980)

AppKit 是 macOS 应用的核心框架之一。WWDC22 对 AppKit 框架的更新包括对设计语言的完善和平台一致性相关的演进。本文将介绍 AppKit 在 WWDC22 上的新特性和开发者的适配要点。

### 🌟 [【WWDC22 110344/10109】 Developer Mode 与 Notarization](https://xiaozhuanlan.com/topic/5760498231)

苹果作为隐私安全方面的先行者，一直致力于让用户能够下载到可靠和安全的应用，并确保用户和开发者的使用体验，试图在安全性和易用性上达到一个良好的平衡。
本文介绍的 iOS 方向的 developer mode 和 macOS 方向的 notarization 都是苹果基于这些原则的最新实践。

### 🌟 [【WWDC22 10041】Wallet 和 Apple Pay 的新功能](https://xiaozhuanlan.com/topic/6245091837)

本文通过回顾 WWDC 2022 了解 ``Wallet`` 和 ``Apple Pay`` 常规更新和新增的功能。其中常规更新包含：**无接触支付**、**Mac 同步 Apple Pay 功能**、**SwiftUI 新增 API**等功能，新增功能包含：**多商户支付**、**自动支付**、**订单跟踪**、**身份验证**等功能。最后更新了交通卡支持 ``Apple Pay`` 的城市和地区以及目前支持的设备，并提供相关 Demo 以供大家测试。

### 🌟 [【WWDC22 10003】初见 WeatherKit](https://xiaozhuanlan.com/topic/7104928536)

本文将介绍 Apple 新推出的 WeatherKit 天气服务。全文共分为四个部分：第一部分是介绍 Apple 平台中的天气 app。第二部分是介绍支持查询的天气数据集的具体指标。第三部分是介绍如何使用 Swift 和 Python 3 进行接入及接入注意事项。第四部分是总结和展望。

### 🌟 [【WWDC22 10075】结合使用 SwiftUI 和 AppKit](https://xiaozhuanlan.com/topic/4072968531)

本文以 macOS 版本的快捷指令应用（Shortcuts）为例，介绍把 SwiftUI 和 AppKit 结合使用的一些方式和注意事项。

### 🌟 [【WWDC 110371】 使用 Xcode 进行多平台开发的那些事](https://xiaozhuanlan.com/topic/8549720316)

本文将配合 Xcode 14 从以下几个方面讲述多平台项目从开发到上线的过程。

### 🌟 [【WWDC22 110345】 使用 Endpoint Security 保护 Mac 安全](https://xiaozhuanlan.com/topic/6541789230)

本文将主要聚焦于 Mac 的 EndPoint Security 功能的新特性。全文共分为 3 个部分：第一部分是介绍端点安全将取代之前的 kAuth 等 API 。第二部分是对 Muting 技术的介绍，包括如何使用官方 API 。最后一部分是关于 eslogger 可以提供更加丰富的端点安全事件。

### 🌟 [【WWDC22 10076】 将你的 iOS 应用搬到 Mac 上](https://xiaozhuanlan.com/topic/5912378064)

SwiftUI 可以跨整个苹果生态，Flutter 可以跨大多数主流平台，为什么我还要选 Mac Catalyst ？假如有一套已经基于 UIKit 实现的 iPad 代码想要迁移到 Mac 上的话，Mac Catalyst 将是你的不二之选。本文将为你介绍 iOS 应用迁移到 Mac 上的几种方式，并且展示了新系统中的新接口。

### 🌟 [【WWDC22 10007】 IAP 新特性](https://xiaozhuanlan.com/topic/3872506491)

本文结合 WWDC21 IAP 相关能力，对 WWDC22 IAP 相关新特性进行了梳理回顾。本年度苹果虽无 WWDC21 的大拆大建，但却进行了大量的小修小补。苹果对基础能力的补充，让 StoreKit 2 从可用变成好用。阅读本文，与我们一同探讨优化 StoreKit 2、App Store Server API 及 App Store Noitfications V2 的相关策略！

### 🌟 [【WWDC22 10155】ScreenCaptureKit：MacOS 上的高性能屏幕录制框架](https://xiaozhuanlan.com/topic/0458326917)

屏幕录制一直以来都是一个桌面系统需要提供的基本能力，可以应用到很多场景，例如：视频会议中的桌面共享、电脑游戏直播、远程桌面控制等。 今年的 WWDC 苹果新推出了一个 MacOS 上的高性能屏幕录制框架 ScreenCaptureKit。 ScreenCaptureKit 不仅通过提供更加易于理解的 API 来简化开发成本，还大大提升了屏幕录制的性能，以便 MacOS 用户可以获得更佳的使用体验。

### 🌟 [【WWDC22 10089】 What's new in PDFKit](https://xiaozhuanlan.com/topic/9204781563)

本文基于 WWDC17 Introducing PDFKit on iOS 以及 WWDC22 What's new in PDFKit 两个 Session 的内容梳理，先后介绍了 PDF 的简介、苹果在 PDF 处理中的发展历史、PDFKit 的基本内容以及 PDFKit 最新的特性。

### 🌟 [【WWDC22 10120】进化你的 Core Data Schema](https://xiaozhuanlan.com/topic/6074813952)

数据迁移是数据库绕不开的话题。在 Core Data 中，轻量迁移更是每一个使用者的必修课。本文将由浅入深的介绍 Core Data 轻量迁移的功能、局限与最佳实践以及迁移在 CloudKit 中的注意事项。

### 🌟 [【WWDC22 10077】验证码的替代者—私有访问凭证](https://xiaozhuanlan.com/topic/6437105829)

验证码技术一直被用于真实流量识别，虽然比较有效但是也给用户带来了一些不便，于是一些平台尝试收集用户隐私信息来精准识别用户。一向注重保护用户隐私的苹果则认为这种做法不可取，于是苹果带来了新的认证技术：Private Access Token。

### 🌟 [【WWDC22 10061】将多窗口引入 SwiftUI 应用](https://xiaozhuanlan.com/topic/3529016874)

本文将围绕构建 SwiftUI app 的多窗口进行讨论。 共分为 4 个部分： 
1. 介绍 SwiftUI 生命周期中的各种 scene types，包括几个新引入的 Window 和 MenuBarExtra；
2. 通过添加auxiliary scenes的方式将这些 scene types 组合在一起； 
3. 介绍一些为特定 scenes 打开窗口的新 API； 
4.介绍一些在 app 中自定义 scene 的方法。

## 摸鱼周报

[@摸鱼周报 #58](https://mp.weixin.qq.com/s/KwqFraJk40f9bEy0eKa8Kw)：第 58 期摸鱼周报来了，一起看下本期概要：

* 本期话题：在您的 App 中提供帐户删除选项
* 本周学习：如何配置合适的 ATS
* 内容推荐：WWDC22 推出的新技术和新内容（二番）
* 摸一下鱼：开启真·摸鱼模式，在线养金鱼；极客风的听歌网站，纯文字的音乐播放器；网页设计博物馆；Stack Overflow 年度调查。

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2021」，领取 2017/2018/2019/2020 内参**

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

🚧 表示需某工具，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
