# 老司机 iOS 周报 #237 | 2023-03-20

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

## 文章

### 🐕 [How to make an interactive picker for a Swift command-line tool](https://www.polpiella.dev/how-to-make-an-interactive-picker-for-a-swift-command-line-tool/)

[@Cooper Chen](https://github.com/cjlcooper)：Swift 相较于 Javascript 等语言，处理用户输入的库总是不足，本文主要介绍了作者受 Javascript 工具 Nate Moore 的 clack 启发，如何为 Swift 命令行工具制作交互式选择器工具的思路和过程，另外作者将继续记录迁移该工具的过程，为有意向向 Swift 命令行增加更多能力的同学提供参考。

### 🐎 [淘宝 widget 链路方案总结](https://mp.weixin.qq.com/s/ZSt--YspkI4GHqbGCasvLQ)

[@Damien](https://github.com/ZengyiMa)：widget 是 Apple 推出的小组件功能，其意在希望 App 能一目了然地显示重要的内容，让用户可以快速访问你的 App 以获取更多详情，本文来自淘宝技术团队，阐述了从静态 widget -> 动态 widget -> 用户自定义布局完整的一套生态的演进过程，和各阶段的思考。

### [手工打造 HTML 解析器的那些事](https://medium.com/zrealm-ios-dev/%E6%89%8B%E5%B7%A5%E6%89%93%E9%80%A0-html-%E8%A7%A3%E6%9E%90%E5%99%A8%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B-2724f02f6e7)

[@红纸](https://github.com/nianran)：ZMarkupParser 是作者开发的 HTML 转 NSAttributedString 仓库。本篇介绍了其实现过程，其中包括代码解析、语法标准化、转换抽象树、MarkupComponent 转换、解析 MarkupSyle、转换 NSAttributedString 等。文章提供了详细的代码实现和实例演示，对于 HTML 解析器实现由兴趣的读者来说，该篇文章可以作为入门参考资料。

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

### 🐕 [What's new in Swift 5.8](https://www.hackingwithswift.com/articles/256/whats-new-in-swift-5-8)

[@zoeGuo](https://github.com/zoeGuo)：文章对 Swift 5.8 更新的每个 proposal 分别做了简单解释和介绍。小编选出几个比较感兴趣的做了简单总结：
- SE-0373 Lift all limitations on variables in result builders：取消结果生成器中对变量的所有限制。
- SE-0376 Function Back Deployment：增加了一个新的 @backDeployed 属性，一定条件下可以在旧版本的框架上使用新的 api。
- SE-0365 Allow implicit self for weak self captures, after self is unwrapped：weak self 在 unwrapped 的情况下可以被捕获为隐式调用的 self，那这种情况下我们就可以将闭包中的 self 删除了。
- SE-0274 Concise magic file names：看起来是只简化了文件名，但其实对于 Swift 编译器产生的二进制文件大小影响不容忽视，作者在这里建议大家仔细阅读 Swift Evolution 关于这一变化的描述。
- SE-0375 Opening existential arguments to optional parameters ：Swift 5.7 开始允许我们使用协议调用泛型函数，但只能使用不可选入参，在 Swift 5.8 中支持了可选入参。

文章中有代码示例以及更详细的说明，还提到一些其他的更新内容，有兴趣的读者可以阅读原文了解更多。

### 🐢 [All about LeakSanitizer](https://maskray.me/blog/2023-02-12-all-about-leak-sanitizer)

[@老峰](https://github.com/gesantung)：LeakSanitizer (LSan) 是一种内存泄漏检测器，它拦截内存分配函数，默认情况下在退出时检测内存泄漏。本文介绍了其用法：Standalone (-fsanitize=leak)、AddressSanitizer (-fsanitize=address)、AddressSanitizer (-fsanitize=address)，实现原理概述，运行时选项，漏报，STW 以及其他类似工具等内容。

### 🐕 [网易云音乐开源全链路埋点方案-曙光埋点（dawn）](https://mp.weixin.qq.com/s/XRy4ajwAHGjOai7qERYjyw)

[@JonyFang](https://github.com/jonyfang)：曙光埋点是一套全链路埋点方案，从埋点设计、到客户端三端(iOS、Android、H5)开发、以及埋点校验 & 稽查、再到埋点数据使用，目前已经广泛应用于云音乐各个主要 APP，它集自动化埋点与全链路追踪等特点于一身，解决了传统埋点的痛点，兼顾了开发效率与埋点数据的高精度特点。好在是开源的，感兴趣的开发者可以通过源码细剖下实现细节。

### 🐕 [iOS 云音乐 APM 性能监控实践](https://mp.weixin.qq.com/s/nGLgQfq8k3pzxUaTZa8uNQ)

[@Barney](https://github.com/BarneyZhaoooo)：本文详细介绍了云音乐 iOS APM 的实战经验，展现了较多细节与思考。

- **堆栈聚合**
- **监控**
- **CPU 高消耗**
- **Jank 卡顿**
- **ANR 卡死**
- **内存异常**

### 🐕 [关于 App Store 苹果商店价格的那些事（历上最全版）](https://juejin.cn/post/7205562168358895671)

@[ChengzhiHuang](https://github.com/ChengzhiHuang)：本文内容详实，通过 App Store 价格的历史 、App 本地化的价格和购买限制、App Store 调价的影响和应对方案 三个方面来对苹果的定价策略等进行了阐述，十分推荐一看。

## 摸鱼周报

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

* 本期话题：App Store 的定价机制升级扩展；四位女性开发者与 App Store 的故事
* 内容推荐：推荐近期的一些优秀博文，涵盖结构化并发、开发者故事、开发经验分享、Swift Builtin 函数等方面的内容
* 摸一下鱼：Planning for AGI；GPT4 发布；stable-diffusion-webui 尝试；一个 Alfred 插件 AJTools；苹果新版定价解读

## 内推

重新开始更新「iOS 靠谱内推专题」，整理了最近明确在招人的岗位，供大家参考

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

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