# 老司机 iOS 周报 #195 | 2022-03-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) 提出。

## 新闻

### [T 技术沙龙移动端技术实践（上海场）圆满结束](https://mp.weixin.qq.com/s/gjU6ejMRyG7Cqfr9271qsA)

2022 年 2 月 26 日，由老司机技术周报与 T 技术沙龙联合主办的移动端技术实践（上海场）在上海圆满落幕。此次技术沙龙邀请到了来自澳洲 REA Group 的 Jake Lin、“开源实验室”博主张涛、前阿里技术专家王宇分别以《MVI 模式在 Jetpack Compose 上的应用》、《基于 C++ 的 Android 真协程设计》以及《自制渲染引擎解决客户端复杂 UI 组件的实现》为主题进行硬核分享与实践探讨。

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

### [使用 SwiftUI 打造卓越体验](https://developer.apple.com/cn/accelerator/)

2022 年 3 月 24 日- 25 日(报名截止 2022 年 3 月 23 日）

欢迎参加为期两天的 SwiftUI 活动！通过本次活动，您将全方位了解 SwiftUI，包括 SwiftUI 的工作原理和控件使用，数据模型和视图的关联，容器布局和高阶渲染，以及使用 SwiftUI 打造多平台 app。此外，我们还邀请到社区内活跃开发者，来分享他们的 SwiftUI 实战经验。加入我们开启 SwiftUI 之旅！

![2022 2 event qrcode footer 2](https://user-images.githubusercontent.com/11873526/156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f.jpeg)

## 新手推荐

### 🐎 [What’s new in Swift 5.6?](https://www.hackingwithswift.com/articles/247/whats-new-in-swift-5-6)

[@Smallfly](https://github.com/iostalks)：Swift 5.6 引入了一波新的特性，本文通过示例重点介绍了几个比较有意思的，并预测在不远的将来 Swift 6 可能会带来一系列破坏性 API。

### 🐎 [Easier Code Review With Pre-Commit Hooks](https://digitalbunker.dev/supercharging-git-with-pre-commit-hooks/)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：本文介绍了 git 的 hooks 能力，并举例介绍了适合在 ``pre-commit`` 阶段做的检查，例如 文件名是否为纯 ASCII 字符，.xib/.storyboard 是否有 ambiguous constraints。但 hooks 文件不在 git 中保存，管理与同步困难，因此推荐了 [pre-commit](https://pre-commit.com/#intro) 这个工具通过 yaml 配置文件来拉取需要的hooks，确保保证 hooks 的同步，工具还预设了[很多选项](https://pre-commit.com/hooks.html)来开启能力，也可以找到别的开发贡献的 hooks。虽然工具名为 ``pre-commit`` 但也支持在各个阶段指定 hooks，功能相对完善。

## 文章

### 🌟 🐕 [快影 iOS 端如何实现 OOM 率下降 80%+](https://mp.weixin.qq.com/s/IvATFGU_bOph-WX5ZYLYew)

[@Leo](https://github.com/leomobiledeveloper)：OOM 的判定和优化一直是 iOS 上比较棘手的问题，快影充分利用自身架构的特点来采集和还原问题的上下文，实现了一套分析复现线上 OOM 头部问题的工具，基于这套工具 OOM 率大幅下降。文中技术方案的思路新颖，并且结合几个具体的案例做了深入的分析，干货很多，非常推荐阅读~

### 🌟 🐕 [iOS 高刷屏监控 + 优化：从理论到实践全面解析](https://mp.weixin.qq.com/s/gMxTq0_nmE-xW7GA3pkBJg)

[@Barney](https://github.com/BarneyZhaoooo) 本文介绍了新引入的 ProMotion 屏幕背后的机制，并且透过表象深入汇编本质，还落地了监控 + 优化的方案，让大盘滑动帧率 P50 从 80 上升至 112 左右，取得了不俗的业务收益。

- 帧率介绍
- 动态刷新率的表现形式
- 设备差异
- 解除 DisplayLink 的帧数限制
- 动态帧率的应用场景

### 🐕 [如何让云音乐 iOS 包体积减少 87MB](https://mp.weixin.qq.com/s/GTbhvzMA-W0ANlars7mKog)

[@水水](https://www.xuyanlan.com)：包体积优化是客户端开发的老命题了, 本文记录了云音乐从了解口径、分析、实践的过程。云音乐的包体积主要优化点如下：
- 资源
资源清理、资源整理、资源压缩、资源云端迁移、资源合并
- 二进制
无用代码检测、二三方库下线、动态库依赖裁剪
- 编译优化 - 参数
Asset Catalog Compiler Optimization、EXPORTED_SYMBOLS_FILE、Link-Time Optimization、GCC_OPTIMIZATION_LEVEL
- 防劣化

此前也有推荐过一些安装包瘦身的文章，一并贴出参考，希望对优化包体积感兴趣的读者可以根据自己的业务选择最适合自身 App 的方案。

- [iOS瘦身！一个让50%本地图片消失的方案!](https://juejin.cn/post/7053978539523047437)
- [App thinning checklist](https://oldoldb.com/2019/01/09/App-thinning-checklist/)
- [iOS 优化 - 瘦身](https://mp.weixin.qq.com/s/wDcYvea5dTq0dh0PBwRu4A)
- [On-Demand Resource 资源下发](https://www.xuyanlan.com/2018/12/07/%E8%B5%84%E6%BA%90%E4%B8%8B%E5%8F%91/)

### 🐕 [让工程师拥有一台“超级”计算机——字节客户端编译加速方案](https://mp.weixin.qq.com/s/0nU5DHX0GnEidoCtlCOaOg)

[@红纸](https://github.com/nianran)：该文介绍了字节在分布式编译、编译缓存上的部分实现原理。文中提到**跨任务缓存**和**索引缓存**的两种实现方案。并介绍了依赖分析的四种技巧，分别从消噪、索引、缓存三个角度进行了优化。同时采用了开源框架 goma 的代码，针对 iOS 项目的特性，优化了编译任务依赖解析。

### 🐎 [本地生活端智能架构设计与技术探索](https://mp.weixin.qq.com/s/vrHNhik_ijqs5KE_0YRI1A)

[@J_Knight_](https://github.com/knightsj)：本文介绍了本地生活业务对端智能的应用与探索。首先介绍了端智能的概念，特性以及发展趋势。然后结合本地生活的业务分享了其所应用的端智能技术架构。最后结合了具体的细分业务：用户特征，智能推荐和智能触达介绍了端智能在这些业务的具体应用。在文末也对端智能在本地生活的应用做了展望和期待。

### 🐕 [Native Network Monitoring In Swift](https://digitalbunker.dev/native-network-monitoring-in-swift/)

[@享耳先森](https://github.com/iblacksun)：对于 App 内的网络状态监控，大家常用的是 `Reachability` 或 `Alamofire` 内部的 `NetworkReachabilityManager`。本文介绍了基于 iOS 12 后 `Network.framework` 内置的 `NWPathMonitor` 实现的网络状态监控。

## WWDC21 内参

### [通过断点技巧让调试更高效](https://mp.weixin.qq.com/s/kv2dfh6L06RQghwkQupi1w)

[@PerTerbin](https://github.com/PerTerbin): 对于开发者来说都是及其重要的调试手段。本文将介绍 Xcode 中断点调试的技巧及 WWDC21 中苹果关于断点提出的新技术，学会这些技巧对于开发者来说都非常有必要，它能使我们的工作更加高效。

### [使用 Clang 静态分析器尽早发现 Bug](https://mp.weixin.qq.com/s/oGqTGgciaFIgMIKH96Ccng)

[@Sean](https://github.com/yangzai360): 本文包括了 [WWDC 2021 Session 10202](https://developer.apple.com/videos/play/wwdc2021/10202/) 中的全部内容，Clang 静态分析器于 2011 年就集成进 Xcode 了，十年多来，它的功能越来越强大。在 Xcode 中简单的一个点击就可以让它来帮助我们找到很多隐晦的 Bug。本文图文并茂地介绍了分析器的使用操作、Xcode 13 中新增的检查项目、在BuildSeting中的可配置参数，以及最后译者补充了静态分析的简介、Clang 静态分析器源码结构。期望通过使用它，让你的工程变得更健壮！

## 摸鱼周报

[@摸鱼周报 #46](https://mp.weixin.qq.com/s/8Wpfk9yxpjwaDXN7iXIcvQ)：第四十六期摸鱼周报来了，完整内容可以点击左侧链接，一起来看下本期摘要：

* 话题：苹果春节发布会，地表最强芯片 M1 Ultra
* Tips：如何在SwiftUI中显示二维码；如何将 JSON 字典编码为 JSONEncoder
* 面试模块：iOS 内存管理：Autorelease 细节速记
* 优秀博客：SwiftUI 进阶技巧
* 学习资料：KKBOX iOS/Mac OS X 基礎開發教材
* 开发工具：几款面向 iOS 开发的 UI 调试工具

## 内推

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

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

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

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

## 关注我们

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