# 老司机 iOS 周报 #205 | 2022-06-20

> hello，大家好，失踪了两期，老司机技术周报又回来了。我们没有跑路，只是最近两周都在忙 WWDC 的活动，实在没有精力抽出时间来整理周报 Orz...
>
> 第一个活动是 wwdc.playground，我们和 SwiftGG、T 沙龙一起举办了一次线上技术沙龙活动，没有赶上的可以先去「老司机技术」视频号看直播回放，稍后会写个总结文给到大家。这次活动一共累计全网有几万开发者关注，非常感谢大家的支持。
> 
> 另外一个就是[《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22)了，为了能超越往年的质量，今年我们组建了一个 30 人的审核团队[严控质量](https://xiaozhuanlan.com/topic/5639708142)，加上 wwdc.playground 前期事情特别多，所以总体进度比去年满了一些，希望大家可以理解一下 ~ 目前订阅价是 29.9（低于五折），欢迎大家前往订阅~ 后续会持续开始更新，预计会有 80 - 100 篇左右的文章。

![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 内参》

### 🌟 [【WWDC22 10127/10131】使用 RoomPlan 扫描创建参数化三维室内场景](https://xiaozhuanlan.com/topic/8127504396)

本文将主要聚焦于 Apple 的 AR/MR 新 API：RoomPlan 。全文共分为 3 个部分：

第一部分是 Apple 的 AR/MR 技术发展回顾，包括 RoomPlan 和 Object Capture 技术背后的原理简介。

第二部分是对 RoomPlan 技术的介绍，包括如何使用官方 API ，快速在您的 App 中使用 RoomPlan，以及如何通过数据 API 自定义 RoomPlan 的使用。

最后一部分是关于 AR/MR 应用设计实践的相关建议。

### 🌟 [【WWDC22 10025】VisionKit 的机器视觉方案，更智能的捕获文本与条码](https://xiaozhuanlan.com/topic/8205316479)

本文将与大家一同认识 VisionKit 中的 `DataScannerViewController`。通过简单的 Swift API 来实时的捕获视频源中的文本、条码。将展示如何控制程序捕获的内容，以及如何启用用户指导、突出显示等。

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

### [WWDC22 讲座集锦](https://developer.apple.com/cn/accelerator/)

2022 年 6 月 28 日至 29 日（报名截止 6 月 27 日）

「 Developer - 设计开发加速器」精选了 WWDC22 公布的最新技术，邀请 Apple 设计和技术布道师为中国开发者带来中文讲座集锦。通过本次活动您可以了解最新技术趋势、学习平台的最新功能，从而打造更为卓越的 App 体验。

**从本次活动开始，除特殊活动单独说明以外，加速器活动会开放给所有Apple Developer Program 成员（包含免费的用户）。**

![](https://user-images.githubusercontent.com/11873526/174491806-a2ca1010-dd77-4b19-9bcd-4ab690f736d8.jpeg)

## 文章

### 🐎 [聊聊 libffi 的调用流程](https://www.jianshu.com/p/4644b1584a1f)

[@xuyafei](https://github.com/xiaofei86) FFI (Foreign Function Interface) 是用来与其它语言交互的接口，是实现跨语言调用的主要方式之一。其通过直接将其它语言的接口内嵌实现更高的执行效率，而通过进程间通信 (IPC) 或网络通信 (RPC, RESTful 等) 则至少需要两个独立进程才能实现。

libffi 是 ffi 的主流实现方式，主要使用 C 和汇编实现，最常用作编译语言和解释语言实现之间的桥接技术。本文从 libffi 的调用流程出发，带大家了解 ffi_call 和 ffi_closure 是怎样帮助我们实现动态调用的。

###  [从响应式编程到 Combine 实践](https://mp.weixin.qq.com/s/b_q6R64xkq8Rl9EiIde4MA)

[@zvving](https://github.com/zvving)：响应式编程由来已久，苹果钦定的 Combine 正是 Reactive Streams 规范的一种实现。伴随着官方 SwiftUI 的推广，声明式布局+响应式编程也因其简洁、直观、易测、易重用的优势渐渐流行。本文正是字节跳动音乐团队在大项目中落地响应式编程的选型思考和最佳实践，非常值得参考。

### 🐕 [Swift 中的幻象类型(phantom types)](https://mp.weixin.qq.com/s/HLWu24LrfqSfbhd9x6Q_ag)

[@享耳先森](https://github.com/iblacksun)：`Phantom Types` 是一种编码技巧，让你可以利用 Swift 的强类型特性写出更安全的代码，本文介绍了一些可使用 Phantom Types 的场景及使用技巧。

建议结合下面文章一起阅读：
[Phantom Types in Swift](https://zhuanlan.zhihu.com/p/35696032)
[Swift tricks-Phantom Types](https://www.jianshu.com/p/72cd63cf9393)

> 推荐人：@Swift社区，本文翻译自 [swiftbysundell.com](https://www.swiftbysundell.com/articles/phantom-types-in-swift/)


### 🐕 [探秘 AutoreleasePool 实现原理](https://mp.weixin.qq.com/s/fcS6aiddSjeQSfjMY-8Oow)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：无论是 MRC 还是 ARC 时代，autorelease 最大的作用，是在大量创建对象的同时，通过修饰让内存得到提前释放，从而降低内存峰值。本文就旨在通过分析源码了解内部是如何实现的。

### 🐢 [节日献礼：Flutter图片库重磅开源](https://mp.weixin.qq.com/s/WnpDbDvEVNMj_96ulnuWkQ)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): 去年，闲鱼技术团队新一代图片库 PowerImage 在经过一系列灰度、问题修复、代码调优后，已全量稳定应用于闲鱼。相对于上一代 IFImage，PowerImage 经过进一步的演进，适应了更多的业务场景与最新的 flutter 特性，解决了一系列痛点. 

### 🐕 [Auto-generating, Auto-hosting, and Auto-updating DocC Documentation](https://blog.swiftpackageindex.com/posts/auto-generating-auto-hosting-and-auto-updating-docc-documentation/)

[@四娘](https://kemchenj.github.io/)：WWDC 21 推出了 docc 之后，逐渐成为社区主流的文档生成器，但接入时比较麻烦的是需要添加 docc 作为依赖，并且需要通过 GitHub Page 或者 Web 服务器进行部署。

Swift Package Index 为此提供了一个新功能，可以自动部署和更新你的 docc 文档，只需要在仓库内添加一个声明文件即可。

社区热门的 Kingfisher 也已经[采用了这种方式部署文档](https://swiftpackageindex.com/onevcat/Kingfisher/master/documentation/kingfisher)，[接入的 PR](https://github.com/onevcat/Kingfisher/pull/1948) 大家也可以拿来参考。

### 🐢 [ViewBuilder 研究](https://mp.weixin.qq.com/s/4TwfyhWHVjm3Dv-Vz7MYvg)

[@AidenRao](https://weibo.com/AidenRao)：作者通过上下两篇博文，对构建 SwiftUI 视图的 ViewBuilder 进行探讨。

[上篇](https://mp.weixin.qq.com/s/4TwfyhWHVjm3Dv-Vz7MYvg)将介绍 ViewBuilder 背后的实现者 —— result builders

[下篇](https://mp.weixin.qq.com/s/E6VKDbgKerFf0P20N1DsuA)将通过对 ViewBuilder 的仿制，进一步地探寻 SwiftUI 视图的秘密。

## 内推

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

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

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

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

## 关注我们

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