# 老司机 iOS 周报 #209 | 2022-07-18

![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)

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

### 🌟 [【WWDC22 10090】TextKit 2 新特性解读及适配方案](https://xiaozhuanlan.com/topic/5941762038)

本文基于 WWDC22 10090 - What's new in TextKit and text views 进行介绍，首先是对于 iOS 上文本系统发展的回顾，接着介绍了 TextKit 的核心设计原则，TextKit 2 相对于 TextKit 1 的优化点，及 TextKit 2 新特性的解读及适配方案。

### 🌟 [【WWDC22 10082】利用 Xcode 和设备上的检测工具排查卡顿](https://xiaozhuanlan.com/topic/9126308457)

今年 Apple 在开发各阶段中更新了一些帮助开发者定位卡顿的工具，借此机会笔者结合了本次更新内容与大家一同探讨分享卡顿的治理排查思路。

### 🌟 [【WWDC22 10083】减少手机电池消耗](https://xiaozhuanlan.com/topic/9602743158)

本文将介绍优化电量消耗的相关内容，主要分为 4 个主要模块，分别是基于暗黑模式、刷新率、后台任务、推迟非实时性任务的耗电量优化。

## 文章

### 🐢 [How necessary are the programming fundamentals?](https://swiftrocks.com/how-necessary-are-the-programming-fundamentals)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：作者以自身的经验总结并回答了：“我一个 iOS 开发为什么需要懂图论等理论知识”这个常见的问题，并列举了哪些开发更应该重视这块内容；同时总结了为什么现在面试中的八股文现象导致大家对理论知识如此反感；最后作者给出了一些如何正确地在面试中结合实际项目考察理论知识的方法，值得一读。

### 🐎 [SF Symbol Changes in iOS 16.0](https://hacknicity.medium.com/sf-symbol-changes-in-ios-16-0-70a80660ba79)

[@Smallfly](https://github.com/iostalks)：苹果在 [WWDC 2022: What’s New in SF Symbols 4](https://developer.apple.com/videos/play/wwdc2022/10157) 宣布了 SF Symbols 的更新，目前已经超过 4000 个符号，自 iOS 13 发布，已经更新了十个版本。新版本中重命名的符号是向下兼容的，需要注意的是重命名的符号，要使用老的名称才能在低版本生效。此次更新的内容主要有：

- 新增 698 个新符号图标
- 默认渲染模式支持 `monochrome` 和 `hierarchical`
- 新增 150 个高亮状态可变色（Variable Color）符号图标
- 重命名 24 个符号图标
- 支持更多本地化符号图标

### 🐢 [文本布局性能提升 60%，Inline Text 技术原理与实现 | Cube 技术解读](https://mp.weixin.qq.com/s?__biz=Mzg4MjE5OTI4Mw==&mid=2247494888&idx=1&sn=c358b190640934bf83f42993ac4992ac&source=41#wechat_redirect)

[@Leo](https://github.com/leomobiledeveloper)：Cube 是一个轻量级支付宝小程序引擎，具有体积小、启动快、内存占用低的特点。本文详细讲解了 Cube 引擎对文本相关能力增强细节。包括了对文字的宽高的测量与计算，排版和布局，在增强 CSS 能力的同时又可以提升布局性能，这些文字相关的能力（或者叫 Feature ）统一被称为 Inline Text。

目前在优酷 OTT 上 90% 由搭建平台产生的产物都默认开启了 Inline Text，使用了相关能力，提升布局的性能，由于协议页面的需求，开发者无需再使用 Javascript 进行分词更换颜色，直接使用引擎能力。

### 🐢 [淘宝iOS扫一扫架构升级 - 设计模式的应用](https://mp.weixin.qq.com/s/v3MWjZ4AcVxzVW6HfY9IiQ)

[@老峰](https://github.com/gesantung)：在日常开发中，经常会有老代码需要维护更新甚至重构，本文是手淘扫一扫针对旧业务进行架构升级以及设计模式在其中应用的的总结，全文包含如下内容:

- 扫一扫原架构
- 新架构设计模式：责任链模式、状态模式、代理模式
- 扫一扫新架构

### 🐎 [Generics in Swift explained with code examples](https://www.avanderlee.com/swift/generics-constraints/)

[@Damien](https://github.com/ZengyiMa)：泛型允许你编写通用且可重用的代码，避免重复，并且泛型在 Swift 标准库中无处不在。你会在 Swift 中使用泛型特性吗？如果你对此不熟悉，不妨来读读此篇文章，作者会从各个角度来深入介绍泛型的使用。

### 🐢 [SwiftUI Grid](https://sarunw.com/posts/swiftui-grid/)

[@Jimq](https://github.com/waz0820)：今年的 SwiftUI 新增了一些富有表现力的控件，比如 Charts、Grid，为我们制作相应功能的界面提供了非常趁手的工具。其中，Grid 是在二维布局中排列其他视图的容器视图，所谓二维布局即行列布局。Grid 不是简单的 VStack / HStack 嵌套，它会将行列的创建作为单个操作处理，集中而非孤立地处理行列及其内部的 Cells。借助 Grid，我们可以批量又不失灵活性地控制行列的宽高，Cells 的对齐、间距、合并或空白填充。本文图码并茂，详细地介绍了其具体功能和用法。

### 🐎 [How iOS 16 makes your app launch faster](https://www.emergetools.com/blog/posts/iOS16LaunchTime)

[@JonyFang](https://github.com/JonyFang): iOS 16 通过减少从磁盘加载的数据量，缩短了加载二进制文件所需的时间。在这篇文章中，作者主要介绍 iOS 16 中发生了什么变化，它到底快了多少，以及我们如何最好地利用这些新功能。

### 🐕 [Reverse Engineering SwiftUI’s NavigationPath Codability](https://www.pointfree.co/blog/posts/78-reverse-engineering-swiftui-s-navigationpath-codability)

[@AidenRao](https://weibo.com/AidenRao)：在一众开发者的呼吁声中，NavigationStack 成功取代 NavigationView 成为 SwiftUI 导航系统的主力。但在重新学习过程中，你是否对 NavigationPath 这个似乎有魔法的结构产生过疑问。它如何对不同类型的值进行类型抹除并存放在同一个数组容器中，同时又在取出值时恢复其类型信息以进行后续操作？[Point-Free](https://www.pointfree.co/) 试图通过逆向工程解答这一问题，并以此为契机打开 existential types 的潘多拉魔盒。

> 由 [KeithBird](https://github.com/KeithBird) 推荐收录

## WWDC22 内参更新

### 🌟 [【WWDC22 110429】探索 iOS 相机新特性](https://xiaozhuanlan.com/topic/0591234867)

本 session 主要是 iPhone 相机模块有关的新 feature 介绍，包括 AVFoundation 支持新的深度相机类型、更智能的人脸驱动 AF/AE、相机视频流的优化以及相机支持多任务处理等更新内容。

### 🌟 [【WWDC22 110359】Swift Package plugins 初探](https://xiaozhuanlan.com/topic/7316598402)

本文是 Swift 包新特性包插件的介绍文章。包插件可以做很多事情，比如代码格式化、代码扫描、自动生成多语言文件等等。通过本文介绍什么是包插件？包插件能做什么？包插件怎么用？让你对 Swift 包插件有个具体了解，可以上手开发自己的包插件。

### 🌟 [【WWDC22 110338】在 Now Playing 中展示播放信息与控制播放](https://xiaozhuanlan.com/topic/2819035467)

本文主要讲述在 Now Playing 中展示播放信息与控制播放。

### 🌟 [【WWDC22 110403】初见新框架 "Background Assets"](https://xiaozhuanlan.com/topic/3198024567)

Background Assets 是苹果在 iOS 16 中引入的新框架，目的是帮助用户减少 APP 使用时的等待时间，提升 APP 的整体使用体验，避免网速差、资源大等原因造成的用户流失。

### 🌟 [【WWDC22 10062】初见 Transferable](https://xiaozhuanlan.com/topic/7965203418)

CoreTransferable 是苹果今年新出的纯 Swift 的框架，提供了一种更 Swift、更声明式的方式来描述数据该如何被传输和共享。本文将介绍其核心的 Transferable 协议的实现方式，及其常见的用法。

### 🌟 [【WWDC22 10035】探索苹果地图新功能](https://xiaozhuanlan.com/topic/0698342715)

在过去十年里，‘苹果地图’持续修补漏洞、改进功能，从一开始依赖第三方数据到自己收集数据，一直在努力将其打造为世界上最好的地图应用。同时为开发者提供了两种将地图 App 整合到其产品中的方式，其中之一是 MapKit，可以让你将地图 App 整合到 iOS、iPadOS 或 macOS 的 App 中，这样你就能在 App 中显示地图或卫星图像、添加注释和悬浮窗、标注兴趣点、确定地图坐标信息等等。另外一个是MapKit JS，可为网站带来交互式地图，不只是添加注释、悬浮窗，还有搜索和导航等地图服务的界面。

在今年的 WWDC 中，苹果不仅带来了 MapKit 的新功能，还首次开放 Apple Maps Server API（苹果地图服务接口） 来帮助开发者构建性能更好的地图服务。

### 🌟 [【WWDC22 10052】What's New In SwiftUI](https://xiaozhuanlan.com/topic/3615907284)

本文介绍 WWDC22 中 SwiftUI 的更新，使用代码 + 图片的形式进行介绍，包括 SwiftChart， Navigation and windows， Advanced controls，Sharing，Graphics and layout 等主题内容的介绍。

## 摸鱼周报

[@摸鱼周报 #60](https://mp.weixin.qq.com/s/Sv3goAv198eXjmlVJsN1rw)：摸鱼周报已经到第 60 期了，大家可以看下本期概要：

- 本期话题：2022 Apple 高校优惠活动开启
- 本周学习：Swift 5.7 中的 opaque parameter 和 primary associated types
- 内容推荐： WWDC22 内参推荐
- 摸一下鱼：推荐收集到的各种图标网站
- 岗位推荐：上海 Espressif 招聘全栈工程师

## 关注我们

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

**关注有礼，关注【老司机技术】公众号，回复「2022」，领取 WWDC21 及以前的内参**

![](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）
