# 老司机 iOS 周报 #219 | 2022-10-17

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

##  Developer - 设计开发加速器

### [Apple 面向开发者推出 Ask Apple](https://www.apple.com.cn/newsroom/2022/10/apple-introduces-ask-apple-for-developers/)

![Ask Apple](https://developer.apple.com/events/ask-apple/images/ask-apple-icon-array_2x.webp)

Apple 宣布推出 [Ask Apple](https://developer.apple.com/cn/events/ask-apple/)，这是一项全新的互动式 Q ＆ A 和一对一咨询（Office Hour）系列活动，为开发者提供更多机会与 Apple 专家直接交流沟通，获取洞见、支持与反馈。

开发者需要加入 Developer 计划，并且下载 Slack 参与交流互动（与 WWDC22 的 Digital Lounges 模式相似，当时参与过的同学应该对讨论中的丰富信息记忆犹新）。欢迎大家注册参加 Q & A 的[大量话题讨论](https://developer.apple.com/cn/events/ask-apple/questions-and-answers/)，例如灵动岛、SwiftUI、新平台和硬件的体验优化等。

同时还有中文开发者的 Office Hour 专场（共 4 场），时间也充分考虑到了国内开发者。
- 咨询设计布道团队（大中华区）
  - 10 月 21 日上午 10:00 - 12:00
  - 10 月 21 日下午 14:00 - 16:00
- 咨询技术布道团队（大中华区）
  - 10 月 21 日上午 10:00 - 12:00
  - 10 月 21 日下午 14:00 - 16:00

## 新手推荐

### 🐎 [Dynamic Island (and Live Activities): Quick start tutorial](https://nemecek.be/blog/171/dynamic-island-and-live-activities-quick-start-tutorial)

[@极速男孩](https://github.com/ztlyyznf001)：苹果在
Xcode 14.1 Beta 中带来了灵动岛的相关 API ，本文主要介绍了如何简单的利用新的 Live Activities 的 API 来创建一个自己的灵动岛。

## 文章

### 🐕 [CPU 是如何与内存交互的](https://mp.weixin.qq.com/s/SaaHKPnNUSvDkmwKtip3HA)

[@老驴](https://weibo.com/u/6090610445)：今年上半年 M1 Pro/Max/Ultra 在 GPU 上实际表现没有达成预期之后引发了很多人对 M1 系列芯片的进一步探究，后来 TLB 容量不足的问题也被发现。那什么是 TLB？CPU 又是如何去映射内存的？本文就从当今主流 CPU 架构出发，科普当今的 CPU 是如何管理使用 L1/2/3 缓存和内存的。

### 🐕 [Apple’s use of Swift and SwiftUI in iOS 16](https://blog.timac.org/2022/1005-state-of-swift-and-swiftui-ios16/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：iOS 16 刚刚发布,本文分析了苹果内置的应用程序使用 Objective-C、Swift、SwiftUI 以及 C 和 C++ 的占比。通过对比 iPhone OS 1 到 iOS 16 的各个系统，可以得出一些结论：

- Objective-C 是 iOS 的核心，被大多数应用程序直接或间接使用
- Swift 的使用在过去的 iOS 版本中迅速增加。今年 Swift 终于超越了 C++
- 多年来C++的使用稳定
- SwiftUI 开始引人注目，这是一个很好的迹象
- C正在缓慢但肯定地消失

### 🐕 [一文让你理清 PrimaryScrollController](https://mp.weixin.qq.com/s/1kLtGleY6BiC3bkV6YK83Q)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): 对苹果用户来说，大家基本都知道，iOS 手机应用有一个比较常见的功能：点击状态栏，列表就会滚动到顶部. 但是在 Flutter 的各种列表组件中并未带有该特性，本文教大家如何使用 PrimaryScrollController 来实现这一特性.

### [Where View.task gets its main-actor isolation from](https://oleb.net/2022/swiftui-task-mainactor/)

[@Damien](https://github.com/ZengyiMa): Swift 5.5 引入了 async/await 特性，苹果也为 SwiftUI 添加了 task 视图修饰器，以方便开发者在视图中使用基于 async/await 的异步代码，但是你知道 task 是如何获取自己所执行的线程吗？以及它和 MainActor 修饰词有什么关系？如果感兴趣不妨一读。

### 🐕 [Xcode 14.0 generates wrong concurrency code for macOS targets](https://oleb.net/2022/xcode-14-mac-concurrency-bugs/)
[@Cooper](https://github.com/cjlcooper):Mac 开发者在 Xcode 14.0 和 14.0.1 进行构建工程的时候可能会出现并发错误（concurrency bugs），因为 Swift 5.7 编译器在针对 macOS 12.3 SDK 时会生成无效代码。解决方案是在 Xcode 14.1 发布之前，使用 Xcode 13.4.1 构建工程。产生错误的原因如下：

- 因为实现了 [SE-0338](https://github.com/apple/swift-evolution/blob/main/proposals/0338-clarify-execution-non-actor-async.md) ，Swift 5.7 编译器的执行器跳跃点（executor hops）与 Swift 5.6 不同
- Swift 5.7 新增非官方属性 @_unsafeInheritExecutor，用于注释一些需要退出新规则的标准库函数，当编译器编译到该属性时，它会生成不同的执行器跃点
- 产生编译错误的原因是在 Mac 开发中，Xcode14 使用了 Swift 5.7 的编译器和 Swift 5.6 的标准库，后者不包含 @_unsafeInheritExecutor 属性
- Xcode14.1 和 macOS 13 SDK 发布后将会修复这个问题

### 🐢 [基于自建 VTree 的全链路埋点方案](https://mp.weixin.qq.com/s/FuL2zynvf1xGjg_RCZcc4Q)

[@Barney](https://github.com/BarneyZhaoooo): 本文详细介绍了网易云音乐技术团队自研的一套全链路埋点方案，从埋点设计、到客户端三端(**iOS**、**Android**、**H5**)开发、以及埋点校验&稽查、再到埋点数据使用。从设计到背后的思考和上线实践都有详细的说明，适合仔细阅读思考。

### 🐢 [虚拟内存 & I/O & 零拷贝](https://mp.weixin.qq.com/s/DMWfSxrbu4kgCh4JCQ4XIQ)

[@老峰](https://github.com/gesantung)：内存管理也是操作系统的核心功能之一，本文主要讲解了 Linux 系统下内存管理技术，是一篇不错的科普文，主要包含以下四部分：
- 虚拟内存: 地址翻译、高速缓存、加速翻译&优化页表
- 内核空间 & 用户空间：内核态与用户态
- IO：(同步)阻塞 IO、(同步)非阻塞 IO、IO 多路复用、网络 IO 模型、异步 IO
- 零拷贝：传统 IO 流程、mmap + write、写时复制

## 工具

### 🐕 [妙言 - 更适合工程师用的 markdown 笔记应用](http://miaoyan.app/)

[@水水](https://www.xuyanlan.com)：一个简洁好看的开源的 Mac Markdown 编辑器，没有任何多余的功能。使用原生 Swift 开发，轻量性能高，安全纯本地使用，具备语法高亮、黑暗模式、自动格式化、单独编辑、演示模式、图床等功能。也可以做为备忘录、归档使用，我个人还是比较喜欢的。

- 下载链接：http://miaoyan.app/
- 工具源码：https://github.com/tw93/MiaoYan

## 代码

### [Semaphore](https://github.com/groue/Semaphore)

[@Smallfly](https://github.com/iostalks)：`Semaphore` 是一种信号量管理类，它和 `DispatchSemaphore` 区别是不会阻塞线程，而是在 Swift Concurrency 框架下提供更细颗粒度的资源管理能力，例如支持对 Task 的挂起和恢复等。

### [响应式编程 Demo - RxStudy、GetXStudy](https://github.com/seasonZhu/RxStudy)

[@JonyFang](https://github.com/JonyFang): [RxStudy](https://github.com/seasonZhu/RxStudy)、[GetXStudy](https://github.com/seasonZhu/GetXStudy) 分别是基于 RxSwift/RxCocoa、GetX 框架的 Demo，可以结合两个项目，对比编程思路。

### [package-benchmark](https://github.com/ordo-one/package-benchmark)

[@xuyafei](https://github.com/xiaofei86)：package-benchmark 是一种用于轻松创建 “macOS 和 Linux 的 Swift 性能测试报告” 的工具。它既适用于主要关注运行时的临时小型代码片段（本着 Google [swift-benchmark](https://github.com/google/swift-benchmark) 的精神），也适用于更广泛的指标，例如内存分配、系统调用、线程使用等。

package-benchmark 支持本地使用和基准比较，用于单个开发人员的迭代工作流，但更重要的是，它很好地支持 GitHub CI 的集成。其提供的示例工作流用于在主分支和 PR 分支之间进行自动比较，以支持 PR 的强制性能验证（具有可定制的阈值），这也是该工具的主要预期用例。

## 摸鱼周报

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

* 本期话题：苹果 iOS / iPadOS 16.1 公测版 Beta 3 发布，为老款 iPad 支持台前调度
* 本周学习：排查修复 App Store 上架项目闪退问题
* 内容推荐：iOS 开发技巧及计算机基础内容学习
* 摸一下鱼：计算麦当劳套餐卡路里的营养计算器，可以模拟木鱼声音的软件，以及插图绘制软件

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

* 本期话题：十月份还有 One More Thing？Apple 新增 QA 活动；Swift 和  SwiftUI 在 iOS 系统中的使用情况。 
* 本周学习：在 iOS 16 中更改文本编辑器背景；解决 Cocoapods 导致的 Showing Recent Messages 问题
* 内容推荐：SwiftUI 好文推荐
* 摸一下鱼：推荐一款图片在线处理网站以及老地图查询网站；供摸鱼的迷宫生成器。


## 关注我们

我们是「老司机技术周报」，一个持续追求精品 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）
