# 老司机 iOS 周报 #262 | 2023-09-25

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/262.png?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## 新闻

### [WebP 堆缓冲区溢出 安全漏洞](https://github.com/advisories/GHSA-j7hp-h8jx-5ppr)

23 年 9 月 12 日 Libwebp 公布了一个高危漏洞 [CVE-2023-4863](https://nvd.nist.gov/vuln/detail/CVE-2023-4863)，评级为 **Critical(8.8)** 。受影响方众多，包括 Chrome，Firefox 等浏览器；集成 libWebP 的客户端 APP，以及包括部分版本的 Electron、flutter 。列举部分受影响的组件：

- webP(< [1.3.2](https://chromium.googlesource.com/webm/libwebp/+/refs/heads/1.3.2))，推荐直接升级至 1.3.2 
- Electron(< 26.2.2/25.8.2/24.8.3/22.3.24)
- flutter(< 3.13.4)

由于漏洞已被公开，有被利用后攻击的风险（具体攻击方式不便展开），大家可以视项目情况进行升级。

## 文章

### 🐕 [iOS 点九图 NinePatch 解析](https://mp.weixin.qq.com/s/angyJag7AZntt2FLNCOuXw)

[@Barney](~https://github.com/BarneyZhaoooo~)：文章主要介绍了 iOS 点九图的应用实战。有原理介绍也有代码，是非常具体的实践，值得学习。

- 点九图制作生成。
- PNG 文件格式介绍和代码实践。


### 🐕 [开箱即用-移动网络 IPv6 浓度检测工具](https://juejin.cn/post/7278899547828224039)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：本文介绍了一款移动网络 IPv6 浓度的检测工具，旨在推动 IPv6 技术的广泛应用。本文详细说明了该工具的背景、使用方法，以及如何通过抓包和数据分析来评估移动应用的 IPv6 流量占比，进而指导网络改进工作。此外，本文还提供了其他诸如手机抓包、Safari 调试等检测方法，以帮助读者更好地理解和推广 IPv6 技术在移动网络中的应用。

### 🐎 [Shake to undo in a SwiftUI app](https://blog.thomasdurand.fr/story/2023-09-04-shake-to-undo-swiftui/)

[@zoeGuo](https://github.com/zoeGuo)：这篇文章介绍了如何在 SwiftUI 应用中实现"摇一摇撤销"的功能。作者从怎么在 SwiftUI 中使用 UndoManager ，到具体如何在 SwiftUI 中实现"摇一摇"手势，给予用户适当的提示保证数据不会被误操作丢失，以及监听 undo 操作的发生来正确处理逻辑，提供了使用 SwiftUI 实现"摇一摇撤销"功能的详细步骤和思路。作者最后展示了将所有这些逻辑和 UI 实现封装至一个可重用的修饰符中，整个功能的使用代码变得极其简洁。

### 🐢 [How to build an iOS Live Activity](https://medium.com/kinandcartacreated/how-to-build-ios-live-activity-d1b2f238819e)

[@anotheren](https://github.com/anotheren)：这是一篇新手向的文章，从创建、UI 展示、数据更新等各方面给出了如何构建你的第一个“ Live Activity ”(实时活动) 的全流程指导，是时候将实时活动加入你的应用了。

### 🐕 [Swift Macro: Revisited - The Strengths and Essence](https://wezzard.com/post/2023/08/swift-macro-revisited-the-strengths-and-essence-a5a4)

[@AidenRao](https://weibo.com/AidenRao)：这篇文章详细探讨了 Swift 宏的优势和本质。

- 通过在编译时转换程序员的代码来生成代码。具备类型检查和语法树检查能力，能够限定宏的使用场景，还可以明确宏接受的参数类型。
- 对于独立宏，它们可以影响使用处的控制流并共享词法范围。
- 对于附加宏，它们可以将现有成员变量，转换成另一种形式来扩展该类型，并通过添加访问器来重写属性。扩展内容不仅带来新的行为，而且共享扩展点的”命名空间”。还值得注意的是，向存储属性添加访问器也会将其语义从存储属性更改为计算属性。

相比 Swift 中现有的代码重用方法，Swift Macro 通过拥抱不同的设计理念，提高了语言的代码可重用性。

### 🐕 [Swift Macro: Revisited - Traps and Pitfalls](https://wezzard.com/post/2023/08/swift-macro-revisited-traps-and-pitfalls-1034)

[@邦Ben](https://weibo.com/linwenbang)：

该文章对 Swift 宏使用过程中会出现的一些陷阱问题进行了示例说明，例如：
- 宏里面如果包含了 return，在 for 循环里用，展开会直接 return 而不是继续执行
- 定义命名冲突，其他框架的 propertyWrapper 导致的冲突，或者是 lazy 都会冲突，重复访问等
- 语义冲突

解决方案文中也给了建议：
- 宏名字清晰，如果不允许在某个场景使用的话，可以写清楚
- 将宏扩展放在闭包内进行保护
- 引用其他库的时候尽量保证命名唯一
- 宏内部不进行定义变量
- 提供重命名的方法
- 提供 ignore 方法
- 提供对应的使用说明文档

展开后的问题和你在 OC 中用到宏也是会遇到类似的场景，大规模以及复杂场景使用的时候，尤其需要注意这类异常 case

### 🐎 [iPhone 15 Screen Sizes](https://useyourloaf.com/blog/iphone-15-screen-sizes/)

[@ChenghzhiHuang](https://github.com/ChenghzhiHuang)：本文总结了 iPhone 15 系列的屏幕信息，包括 StatusBarHeight、SafeArea、屏幕分辨率等。需要适配的同学可以自行翻阅。

## 工具

### 🐎 [Flutter 最优秀动画库「完全商业化」，Rive 2 你全面了解过吗？](https://juejin.cn/post/7275155682051145787)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Rive 动画在 Flutter 领域类似于 Lottie 在 iOS 和 Android 上的地位，同样提供了在线编辑器；当然了，Rive 也是支持全平台的，本文带你详细入手 Rive 动画，从制作到代码联动。

## 代码

### 🐎 [ExampleKit](https://github.com/toph42/ExampleKit)

[@Cooper Chen](https://github.com/cjlcooper)：这个开源工程提供了在 Swift Playgrounds 中创建自己的库并进行发布管理，其中详细介绍了如何创建模板、源控制等操作，这对于需要进行相同代码不同平台开发的开发者来说是一个实用的工具。

### 🐎 [SnapshotTesting](https://github.com/pointfreeco/swift-snapshot-testing)

[@J_Knight_](https://github.com/knightsj)：提供了一个开源的用于 Swift 开发的快照测试（Snapshot Testing）框架。除了支持对 UIView 进行快照以外， 还支持其他数据类型以及在不同设备型号上的快照。

## 内推

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

[北京] 百度网盘 - 基础架构 / 业务 - iOS/Android/FE

[上海 / 杭州 / 北京] TikTok - 短视频 - iOS/Android/TL

[广深] TikTok 直播 - 社交互动团队 - iOS/Android

[杭州] 淘宝 - 终端平台 - iOS/Android/C++

[广州] 微信公众号 - iOS

[北京] 快手 - 本地生活 - iOS

[上海 / 北京] MiniMax - iOS

[北京] 知乎 - 会员业务 - iOS

[上海] 扫描全能王 - iOS

[深圳] 手机 QQ - 终端架构 - iOS - T10/T11

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

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2023」，领取 2023 及往年内参**

![](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）
