# 老司机 iOS 周报 #188 | 2022-01-10

![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) 提出。

> 各位新年好呀！过去的 2021 年对于老司机周报来说发生了很多事情，我们也为此写了份 [年终总结](https://mp.weixin.qq.com/s/v-ZBo0uQjJWyBKvQqWK_TQ) 给到大家，非常感谢各位读者长期以来的支持与关注。这是周报的第 188 期，也是 2022 年的第 1 期，新的一年大家一起加油！

## 🌟 [App 加速器 - 线上活动](https://developer.apple.com/cn/accelerator/)

[@Damonwong](https://github.com/Damonvvong)：2022 年第 2/3 期「App 加速器 - 线上活动」来了！扫码即可报名~

### 在您的 app 中训练自定义 Core ML 模型

了解如何通过在您的 app 中动态训练 Core ML 模型来构建自适应和个性化体验。首先，我们将回顾您可以在本地创建哪些类型的模型，包括基于图像的任务 (比如风格迁移和图像分类)、音频相关的任务 (如自定义声音分类) 以及使用表列回归器。我们还将向您展示您的 app 如何学习人们的个人行为以构建更智能、更直观的功能。

### 使用 StoreKit 2 和 App Store Server API 为客户提供支持

了解如何使用 StoreKit 2、App Store Server API 和 App Store Server Notifications 为您的客户创造出色的应用内购买体验，并提供支持和退款。我们将探索实施方法，提供最佳实践，并和您一起实现如何进行客户管理和退款管理。

![image](https://user-images.githubusercontent.com/11873526/148687044-1daf6e8c-066c-423c-a849-c78bbb86af92.png)

## 新闻

### 🌟 🐢 [阿里自研标准化协议库 XQUIC 正式开源](https://mp.weixin.qq.com/s/OrvjikvYyqlHAzGamLmpsw)

[XQUIC](https://github.com/alibaba/xquic) 是阿里自研的 IETF QUIC 标准化传输协议库。XQUIC 是基于 IETF QUIC 协议实现的 UDP 传输框架，包含加密可靠传输、HTTP/3 两大块主要内容，为应用提供可靠、安全、高效的数据传输功能，可以极大改善弱网和移动网络下产品的用户网络体验。手淘图片、短视频等场景已经落地 GQUIC，并拿到了一定的网络体验收益。
XQUIC 是一个轻量、高性能、标准化的跨平台协议库，具有以下优势：
- 轻量性 - Android/iOS 双端的编译产物均小于 400KB
- 高性能传输 - 相对于内核态 TCP+HTTP/2 优化 20% 的网络请求耗时
- 标准化 - 实现了整套 IETF QUIC 标准协议，包含传输层、加密层、应用层协议栈
- 易用性 - 支持 Linux/Android/iOS/Mac 等平台，客户端可以通过 SDK 方式很方便地接入并使用、完善的文档（中文/英文对照）、demo 示 例和单测

### [Swift implemented in Swift](https://github.com/apple/swift/tree/main/SwiftCompilerSources)

[@kemchenj](https://kemchenj.github.io)：Swift 仓库近日添加了一个 Swift implemented in Swift 的项目，旨在使用 Swift 实现 Swift 编译器的部分功能。目前实现了 SIL 的桥接和部分简单的 SIL Pass，短期目标是将 SIL Optimizer 的功能改为使用 Swift 进行实现。

### [苹果“换芯”之路再起波折，M1 芯片功臣被英特尔挖走了](https://www.infoq.cn/article/wLXQeEayVLEdQSJyd6Eq)

1 月 6 日，苹果 Mac 系统架构总监 Jeff Wilcox 在领英上宣布，他将离开苹果，前往英特尔担任新职位。他将担任英特尔研究员和设计工程组的首席技术官的领导职位，专注于客户端 SoC 架构。Jeff Wilson 说，他计划与英特尔一起打造开创性的 SoC。

## 文章

### 🌟 🐕 [小程序容器首屏秒开优化实践](https://mp.weixin.qq.com/s/7qeBZZ1KusME_SO3_A4L9g)

[@Barney](https://github.com/BarneyZhaoooo)：本文介绍了饿了么 APP 小程序秒开的实践干货。

- 1、包和包信息（前置预请求、APP内预置、异步更新）
- 2、Render 创建、资源加载（前置预创建、资源前置分阶段预加载）
- 3、Worker 创建、资源加载（前置预创建、资源前置分阶段预加载）
- 4、首屏接口预请求（前置预请求）
- 5、首屏渲染（加载首屏快照）
- 6、Appx 框架（Appx2.0）
- 7、检测工具和数据验证

### 🌟 🐎 [Xcode13 自适应瀑布流 Layout 在 iOS15 上对 crash 的定位及修复](https://mp.weixin.qq.com/s/sdj5Ym186VkpxXwExIpC0A)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：本文介绍了排查特定构建环境，配上特定系统遇到的死循环案例。排查时作者逐步减少可能因素的过程较有学习价值。

同时也能看出本地开发环境与打包构建环境保持一致的重要性，推荐更快地适配新版 Xcode，如果确实有困难也应该设置 deadline，在 deadline 到来前集体完成升级。除了能减少维护多套打包资源，还能减少遇到兼容性问题排查的成本。

### 🌟 🐕 [Flutter 轻量级引擎实践与优化](https://mp.weixin.qq.com/s/n6rA0KyUSMGnnzG6Ij6edA)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 开发中一直以来在 View 角度的使用和展示都是棘手问题，在 Flutter 2.0 之后 Flutter Engine Group 功能得以改善，字节跳动端团队从 Engine Group 上解决 View 级别的使用实践出发，并针对 Engine Group 场景下做了大量优化：
- 入口参数配置
- 多引擎数据通信
- 数据更新同步
- 图片缓存共享
- iOSSurface 释放

### 🐢 [TCA - SwiftUI 的救星？](https://onevcat.com/2021/12/tca-1/)

[@zvving](https://github.com/zvving)：从 UIKit 到 SwiftUI，声明式布局、数据传递、状态管理都带来极大的变化，在复杂项目中，如何通过 SwiftUI 构建可组合、易维护、可测试的项目架构本身就是一件很有挑战的事，受 [Elm](https://elm-lang.org) 启发诞生的 [TCA (The Composable Architecture)](https://github.com/pointfreeco/swift-composable-architecture) 是可能的答案之一。

- 通过 Reducer 统一 Action 带来的 State 变化，调试、测试更友好
- 分割 Store/ViewStore：避免不必要的 view 更新，细粒度 view 有灵活的组合能力
- 跨 UI 框架能力：为 UIKit 到 SwiftUI 提供更稳妥的过渡路径
- 单个 Feature 有能力自由组合成为更大的 feature，这也是 Composable 名称的来源

[@onevcat](https://onevcat.com/tabs/about/)通过系列文章，用逐步完善的计数器例子介绍 TCA，目前已推出 [一](https://onevcat.com/2021/12/tca-1/)、[二](https://onevcat.com/2021/12/tca-2/)，更多精彩内容敬请期待！


### 🐕 [赵海平与张宏波谈编程语言](https://mp.weixin.qq.com/s/FI2WFOENBxgCbykvy9wBYQ)

[@莲叔](http://aaaron7.github.io/)：伴随着各个领域的技术体系的升级，编程语言一直在持续的迭代和发展。拿移动端来说，Swift/Kotlin 方兴未艾。竟还横空出世了 Rust，成为移动技术领域的新宠。服务端技术也一样，微服务的大火让 GO 也成为主流的服务端开发语言。本篇文章是两个在编程领域颇具名气的前辈针对时下流行的编程语言的设计背景、优劣势进行讨论，很有价值。其中也讨论到了编程语言设计的核心标准：解决当下面临的痛点问题。 这也能够帮助我们在学习语言的时候对于语法和最佳实践有更深刻的认识。

### 🐕 [Swift 在 58 安居客房产实践](https://mp.weixin.qq.com/s/xMhVbw2-z2sDQbF9I8_0uA)

[@xiaofei86](https://github.com/xiaofei86)：随着苹果对 Swift 的大力推广，越来越多以 Objective-C 为基础的老项目逐渐以混编的形式开始尝试 Swift。本文 58 安居客房分享了自己的产品率先从 Objective-C 向混编改造的经验，以及在改造过程中遇到各种问题的分析及解决过程。

## WWDC21 内参

### 🌟 [检测和诊断 App 内存问题](https://mp.weixin.qq.com/s/E80VEIJma66fj7BZy1cCeQ)

本 Session 讲解了如何使用 Xcode 检测和诊断内存问题。首先需要了解内存构成，内存占用对 App 的影响、以及一些常见的内存问题，最后学习使用一些工具来分析并解决内存问题。

### [iPhone 相机拍摄新变化](https://mp.weixin.qq.com/s/swzI8C1NHeDFQNBbkQQhUQ)

去年 Apple 对 iPhone 的相机升级是非常明显的，比如增加了 10-bit HDR 视频的拍摄，Apple ProRaw 的支持等。同时得益于 M 系列/A 系列芯片强大的算力，Apple 目前对于拍摄上的思考和提升更多走的是 [计算摄影](https://zh.wikipedia.org/zh-hans/%E8%AE%A1%E7%AE%97%E6%91%84%E5%BD%B1) 路线，而非在光学硬件上做大幅度提升。所以今年的 WWDC Apple 将相机的更多能力开放给开发者使用。

### [更好用的 sheet](https://mp.weixin.qq.com/s/AR3SH9ddgKAiBDOVuPPUug)

在 WWDC19 的 [Modernizing Your UI for iOS 13](https://developer.apple.com/videos/play/wwdc2019/224) 中，苹果介绍了 sheet 这种 present 视图控制器的方式。在 WWDC21 的 [Customize and Resize sheets in UIKit](https://developer.apple.com/videos/play/wwdc2021/10063/) 上，苹果介绍了对 sheet 展示方式的一系列优化，包括自定义视图大小、背景可交互等一系列新能力。让我们一起具体了解下吧 ~

## 工具

### [RegexLearn](https://regexlearn.com/zh-cn)

[@红纸](https://github.com/nianran)：RegexLearn 是一个正则表达的学习网站，与其他网站不同的是，它是一个游乐场，通过实践来学习和测试正则模型。

> 推荐人：[KeithBird](https://github.com/KeithBird)

### 🐎 [用 rust 实现苹果的 atos 工具，atosl-rs 发布啦](https://mp.weixin.qq.com/s/Oy9jXMnVMYF55nqUpN2WXQ)

[@Smallfly](https://github.com/iostalks)：iOS 符号解析是非常基础的需求，苹果在 macOS 平台上提供了 `symbolicatecrash`, `atos` 等工具。作者使用 Rust 语言实现了一个跨平台的解析工具 `atosl-rs`，并做了开源，有兴趣可以围观。

## 代码

### [Rainbow](https://github.com/onevcat/Rainbow)

[@享耳先森](https://github.com/iblacksun)：Rainbow 是 [@onevcat](https://onevcat.com/tabs/about/) 开源的一个控制台和终端日志输出库，可以给文字添加颜色、背景色、样式等信息，支持 Apple 和 Linux 平台。

### [CreateAPI](https://github.com/kean/CreateAPI)

[@Damien](https://github.com/ZengyiMa)：CreateAPI 是用 Swift 编写的 OpenAPI 规范生成代码的工具，它具备 4 大优势：

* 快速：在不到一秒的时间内处理 100K 行 YAML 的规范。
* 智能：生成的 Swift 代码看起来就像手写的一样标准。
* 可靠：在 100 万行公开可用的 OpenAPI 规范上测试，每次都能生成正确的代码。
* 可定制：提供大量的定制选项来完成各种精细化控制

## 音视频

### 🚧 🐢 [Springboard: the secret history of the first real smartphone (Full Documentary)](https://www.youtube.com/watch?v=b9_Vh9h3Ohw&ab_channel=TheVerge)

[@老驴](https://weibo.com/u/6090610445)：科技行业总有存在一些超越时代的产品，他们生不逢时，最后不一定会成功，甚至大部分都失败了，但是他们对行业的引导性让之后的其他人，最终在合适的时间，合适的地点，做出合适的产品。就比如智能手机，现在的代表是 iPhone，但是在 iPhone 之前，有一些公司已经做了一些对智能手机的尝试。Verge 做了一期纪录片，采访了当时最早那批坚信移动互联网革命的人，他们来自 Handspring，第一个做出了世界上真正意义上的智能手机：Treo 系列。Handspring 后来也被 Palm 收购，而当时 Handspring 坚信的移动浪潮也最终来临。

### 🌟 卖鱼桥分桥 - 老司机技术周报四周年纪念

[@Damonwong](https://github.com/Damonvvong): 上周受周报创始人 [@卓同学](https://github.com/lacklock) 之约，我和 [@Parsifal](https://github.com/ParsifalC) 一起做客了他播客节目「卖鱼桥分桥」，聊了聊关于老司机技术周报的一些背后的故事，如果你对我们的故事也比较感兴趣可以在闲暇之余听一下哈~

- [老司机技术周报四周年纪念（上）：成立、纳新、技术沙龙](https://www.xiaoyuzhoufm.com/episode/61d2baf2cb0f5d7d1b7ccc44?s=eyJ1IjoiNWViODA4Y2UwZGJlZDIyMjcyY2ViNzk4IiwiZCI6MX0%3D)
- [老司机技术周报四周年纪念（下）：主编交接](https://www.xiaoyuzhoufm.com/episode/61d442e0cb0f5d7d1b7ccca8?s=eyJ1IjoiNWViODA4Y2UwZGJlZDIyMjcyY2ViNzk4IiwiZCI6MX0%3D)

## 摸鱼周报

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

* 话题：我们启用了新封面
* Tips：Swift 中的预编译
* 面试模块：dyld 2 和 dyld 3 的区别；Objective-C 及 Swift 编译流程
* 优秀博客：包依赖管理工具
* 学习资料：从头开发一个迷你 Go 语言编译器
* 开发工具：git 资源库浏览工具 Tig

## 内推

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

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

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

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

## 关注我们

我们开通了公众号，每期发布时公众号（LSJCoding）会推送消息，欢迎关注。

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

公众号回复「WWDC」可以获取往年《WWDC 内参》，回复「PPT」可获取往期线下沙龙 PPT 材料。

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

## 说明

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

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