# 老司机 iOS 周报 #191 | 2022-02-14

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

## 新闻

### [非公开 app 分发](https://developer.apple.com/cn/support/unlisted-app-distribution/)

AppStore 现在已经支持将不适合公开分发的 app 以非公开方式在 App Store 上发布，使其仅可通过直接链接发现。非公开 app 不会出现在任何 App Store 类别、推荐、排行榜、搜索结果或其他列表中。但可以通过 Apple 商务管理和 Apple 校园教务管理访问。面向特定组织、特别活动或调查研究的 app，或者用作员工资源或销售工具的 app，都非常适合进行非公开分发。

### [Apple Ads 现已支持自定产品页](https://developer.apple.com/cn/news/?id=ay7673lx)

![image](https://user-images.githubusercontent.com/11873526/153762704-e740d339-e78b-4f71-bb3e-9dafb4b454aa.png)

借助自定产品页功能，您可以创建多达 35 个额外的 App Store 产品页版本，以展示您 app 的不同功能、内容或促销活动。现在，自定产品页更与 Apple Ads 无缝集成，助您轻松地在 App Store 上针对不同受众群量身打造更好的广告版本。

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

### [探索 A15 芯片的 Metal 高级功能](https://developer.apple.com/cn/accelerator/)

2022 年 2 月 15 日（报名截止 2022 年 2 月 14 日）

通过本次演讲您将了解如何使用 Metal 和 A15 芯片提升 app 和游戏的性能。我们将介绍 Apple GPU Family 8 的最新 Metal 功能：如何运用低损压缩节省内存，通过稀疏深度和模板纹理深入研究复杂的阴影映射技术，以及借助 SIMD 混洗和填充指令更快地处理图像。

### [在您的 App 中构建隐私保护](https://developer.apple.com/cn/accelerator/)

2022 年 2 月 17 日 （报名截止 2022 年 2 月 17 日）

Apple 认为隐私是一项基本人权。我们将会带大家了解我们的四项核心隐私原则，以及您如何运用这些原则实现 app 特性和提升用户体验。探索您该如何在 app 中实现数据最小化、本机处理、透明度和控制权以及安全保护措施。

![2022 2 event qrcode footer](https://user-images.githubusercontent.com/11873526/153765863-59bb7dc3-b714-4374-83d5-9f2b2fda8774.jpeg)

## 新手推荐

### 🐎 [Combining protocols in Swift](https://www.swiftbysundell.com/articles/combining-protocols-in-swift/)

[@享耳先森](https://github.com/iblacksun)：`Protocol` 是 `Swift` 中非常重要的基石，可以实现代码复用。本文详细介绍了利用 `Protocol` 的 `Extension` 及 `Conform` 特性实现代码复用与隔离。

### 🐎 [Swift 演进之路](https://ming1016.github.io/2022/02/10/swift-evolutionary-path/)

[@老峰](https://github.com/gesantung)：本篇主要梳理了 Swift 1.0 ~ Swift 5.5 演进过程中各版本新增的特性，Codable、dynamicCallable、SPM，Async await，能够更加全面和详细了解 Swift 语言的发展，文章中提到的 Swift 各版本的语法示例代码，及本文内容都可以在 Swift 小册子里对应栏目里找到，Swift 初学者推荐阅读。

### 🐎 [Swift 子数组提取性能优化分析](https://mp.weixin.qq.com/s/5oZkKX03C4DBUcN16f9u3w)

[@xiaofei86](https://github.com/xiaofei86)：本文通过对 for 和 while 的对比，逐个赋值与 memcpy 的对比，以及不同编译选项 Optimization Level 的对比，得出在极限情况下提取 Swift 子数组的最佳性能方案。阅读原文了解各种方案选型的取舍。

## 文章

### 🌟 🐕 [如何监控 iOS 的启动耗时](https://ai-chan.top/code/launch-monitor/#hook-%E5%8D%87%E7%BA%A7%E6%96%B9%E6%A1%88)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：本文通过 IPC 方案监控用户的启动耗时，方案与[抖音通过 applicationDidBecomeActive:](https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247487757&idx=1&sn=a52c11f6a6f217bd0d3283de9b00c8bc&chksm=e9d0daefdea753f954cfcb15d5d0f90302a9f45ba06968377644ffe9e5757a69c5b0132d2c8b&scene=178&cur_album_id=1568330323321470981#rd)有些不同，理论上更接近真实用户体验。技术方案为通过 hook BSXPCServiceConnectionMessageReply 的 @selector(send) 实现。

本文主要内容如下：
- 介绍 iOS 的渲染机制 Render Loop
- 分析 Render Loop 中的 Commit 阶段
- 尝试 hook 系统 api 实现，初次的目标函数由于调用是由 b 直接跳转而失效，最终通过 hook send 方法得以实现

### 🌟 🐕  [超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术（附PPT和回放视频）](https://mp.weixin.qq.com/s/dFkGjCgZeXbYxsu3F40L-Q)

[@J_Knight_](https://github.com/knightsj)：本文整理了在今年1月22日下午举办的第三期字节跳动技术沙龙《抖音 iOS 基础技术大揭秘》的5个主题内容，分别是：
1. 《大型 App 开发架构演进及挑战》
2. 《抖音 iOS 自动化服务：容器化和规模化探索》
3. 《超级 App 构建效能提升 40%！JOJO，字节自研 iOS 构建系统》
4. 《抖音 iOS 体验优化：流畅性优化探索》
5. 《抖音 iOS 稳定性优化与探索》

对这些主题感兴趣的读者可以按需阅读，而且文章底部也有获取 PPT 和回放视频的方法

### 🌟 🐕 [音视频基础概念合集：148 个问题带你快速上车音视频](https://mp.weixin.qq.com/s/X1idBFp7T5zhnqPmYSbQDw)

[@JonyFang](https://github.com/JonyFang)：音视频是一个有一定技术门槛的垂直领域，对于刚开始接触音视频开发的同学，最头疼的问题应该是音视频纷繁庞杂的概念。本文通过 148 个问题带你快速了解音视频基础概念，对音视频开发感兴趣的 iOS 开发同学也许有用。

### 🐎 [WWDC NOTES](https://www.wwdcnotes.com/)

[@Smallfly](https://github.com/iostalks)：[WWDC NOTES](https://www.wwdcnotes.com/) 涵盖近十年 WWDC 视频的观看笔记，数量达上百篇，是一个开源社区驱动的网站。

推荐结合老司机周报出品的 [WWDC 内参](https://xiaozhuanlan.com/wwdc21)阅读。

### 🐕 [WebAssembly 2021 年回顾与 2022 年展望](https://mp.weixin.qq.com/s/aKNfdQIMC_uJ6Fx7SytdBA)

[@邦Ben](https://weibo.com/linwenbang)：该文对 WebAssembly 2021 年的发展做了归纳总结，以及对 2022 年的发展做了一些的预测。很多人可能对 WebAssembly 比较陌生，WebAssembly（缩写为 wasm）是一种使用非 JavaScript 代码，并使其在浏览器中运行的方法。这些代码可以是 C、C++ 或 Rust 等。它们会被编译进你的浏览器，在你的 CPU 上以接近原生的速度运行。目前还在发展阶段中，对 web 或者做跨端开发的同学可以多关注一下，未来没准 WebAssembly 的使用场景会更加宽泛。

参考链接：
[WebAssembly 开发者引导](https://www.wasm.com.cn/getting-started/developers-guide/)
[几张图让你看懂WebAssembly](https://www.jianshu.com/p/bff8aa23fe4d)

### 🐢 [深入剖析 iOS 编译 Clang / LLVM](https://xiaozhuanlan.com/topic/4916328705)

[@Damien](https://github.com/ZengyiMa)：本文深入且细致的介绍了 Clang / LLVM 编译器在构建一个 iOS 应用中各个流程所做的事情以及实现，从编译器的视角出发来阐述了编译过程的方方面面。对底层感兴趣的同学不妨一读。

### 🐎[Swift 汇编（一）Protocol Witness Table 初探](https://mp.weixin.qq.com/s/dvWVnU7ZWiSIvQZBhWXnSw)

[@kemchenj](https://kemchenj.github.io/)：这篇文章从汇编的角度去解析 Swift 里通过 Protocol Witness Table 派发函数的原理，感兴趣的同学可以看一看。

## WWDC 内参

### [为 Swift 和 SwiftUI 带来 Core Data 并发](https://mp.weixin.qq.com/s/ELsrzsUtMv-rdXyPAN3ERA)

@SZ: 今年 Core Data 上带来了大量的功能增强，其中包括使用了 Swift 并发的新 API。 这些变化改善了使用 Core Data 进行 Swift 和 Swift UI 开发的体验，简化了异步数据操作的程序，因此我们推荐大家学习并逐渐开始使用这些新的 API。

### [App Clip 新特性](https://mp.weixin.qq.com/s/q8eptavjMvp48oppJ8F3cA)

@昊泽: App Clip 是 WWCD20 的一大亮点，它提供了一种“即时使用”的方式，基于苹果提供的各种唤醒方式，让用户在特定场景下很方便地体验 App 内的核心功能。

现在一年过去了，世界各地的开发者开发出了各种优秀的 App Clip。同时 Apple 提供了一种全新的 App Clip Card 的展示方式，也一并完善和优化了本地体验，并提供了命令行工具来帮助开发者们生成轻应用码。
让我们一起来看看吧。

### [再谈 watchOS 的数据传输](https://mp.weixin.qq.com/s/2DyDCknWzbLoFrVhyqaCdw)

@Chars: 介绍 iCloud、Keychain、Watch Connectivity、Core Data 等这几种 Watch 支持的数据传输技术，简单说明它们的技术特点并进行优缺点比较。

### [watchOS 8 中的新特性](https://mp.weixin.qq.com/s/VppEWHOZO4nsOJU5oanIAg)

@kk: 第一段介绍了 Watch OS 8 中的很多新功能，包括 App 支持常亮显示,健康数据后台刷新等。第二段是代码编程环节，带领读者通过 Swift UI 构建了一个简单训练类应用。

## 代码

### [Cokile/TweaKit](https://github.com/Cokile/TweaKit)

[@JonyFang](https://github.com/JonyFang)：一个可替代 [SwiftTweaks](https://github.com/Khan/SwiftTweaks) 的轮子：

1. 使用 Property Wrapper 定义 tweak；
2. 原生支持 tweak 更多类型的值；
3. 精心设计的 UI；
4. 支持模糊搜索；
5. 支持 json 数据的导入导出；

## 摸鱼周报

[@摸鱼周报 2021年度汇总](https://mp.weixin.qq.com/s/KPCx5jq9vn46MKziBUP0yQ)：不知不觉摸鱼周报已经发展满一年了，回顾一下我们已经发布了非常多的内容。很多东西大家可能看完就忘了，但技术内容不比新闻，它基本不存在时效性，所以即使过去了一段时间，那些内容仍然是有价值，有生命力的。

我将各期内容按模块分类进行了整理，分为学习资料、开发工具、面试题，优秀博客，开发概念五个模块，然后整理成一个 PDF。PDF 可以点击链接外跳，这一点会比公众号阅读体验好很多。全部汇总完毕，字数将近 96000 字，共有 272 页，还是满满当当的。

## 内推

老司机周报团队联合知识小集和 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)

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

## 说明

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

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