# 老司机 iOS 周报 #264 | 2023-10-23

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

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

## 文章

### 🌟 🐎 [云音乐如何「搭」出新首页](https://mp.weixin.qq.com/s/rZzpXrU3T_0gbKhpM0M4dA)

[@JonyFang](https://github.com/JonyFang)：本文介绍了云音乐如何通过可视化搭建系统支撑新版首页这样的核心场景，提出一套基于性能、动态化和精细化运营角度的解决方案。文章还探讨了动态化能力的重要性、各种动态化方案的能力和性能表现、针对不同业务诉求做出合适选择的必要性。

### 🌟 🐕 [【iOS】一段防护代码引发的内存风暴](https://mp.weixin.qq.com/s/zgwciJibBxyrA_wT2-w3QQ)

[@Cooper Chen](https://github.com/cjlcooper)：本文详细描述了腾讯音乐在一次防护代码导致的 OOM 问题上进行排查的过程，不仅详细解释了内存分析问题从基建到详细手段的步骤，也从另一个侧面说明了 Runloop 和 Autoreleasepool 的关系。值得一提的是，这个 OOM 问题的原因是 CF 不同版本在 __CFRunLoopDoObservers 里面遍历 observer 的实现方式不同导致，采用数组方式的高版本系统会出现上述的 OOM 问题，这对于安全气垫相关需求开发同学有着极高的参考价值。

### 🌟 🐢 [Swift Parameter Packs](https://paul-samuels.com/blog/2023/09/29/swift-parameter-packs/)

[@享耳先森](https://github.com/iblacksun)：Swift 5.9 已经发布，除了广为人知的 `Macros`，还有一项比较少人提到的是 `Parameter Packs`，本文介绍了 `Parameter Packs` 的三种使用场景，如想更深入的理解 Swift 5.9 的更新，建议阅读另一篇：[What’s new in Swift 5.9?](https://www.hackingwithswift.com/articles/258/whats-new-in-swift-5-9)

### 🐕 [Xcode 15以下版本调试 iOS 17 设备](https://developer.apple.com/forums/thread/730947?answerId=758061022#758061022)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：这是在 Apple 开发论坛上讨论的，关于无法使用 Xcode 14.x 版本调试 iOS 17 设备的问题。最终找到一个行之有效的可行路径。先在终端中运行 `defaults write com.apple.dt.Xcode DVTEnableCoreDevice enabled`，然后重新启动 Xcode 14.x，iOS 17 设备将显示在 Xcode 中，进而可以像往常一样运行和调试应用程序。

### 🐎 [Changes to URL string parsing in iOS 17](https://augmentedcode.io/2023/10/02/changes-to-url-string-parsing-in-ios-17/)

[@Damien](https://github.com/ZengyiMa)：在 iOS 17 系统中，URL 类中的 init(string:) 方法的行为和 URLComponents 的解析 URL 方法进行了对齐，使其解析行为发生了变化，新版本将会产生对无效字符进行编码，然而这一行为在 iOS 17 以下是不存在的，如果大家对 URL 类中产生的结果较为敏感，建议确认一下变化是否对当前的 App 是否有预期之外的影响。

### 🐎 [A New Approach to Testing in Swift](https://forums.swift.org/t/a-new-approach-to-testing-in-swift/67425)

[@kemchenj](https://kemchenj.github.io/)：Swift 团队于近日发布了 swift-testing 预览版，旨在替代 XCTest 成为新的官方测试框架，将 Swift 的特性以及这些年测试框架的发展应用到这个新的库里。

XCTest 作为 Apple 平台的测试框架，最早在 1998 年编写并且大量使用 Objective-C 的动态特性，包括动态消息传递，NSInvocation 和 Objective-C Runtime 等。

当 Swift 诞生时，也顺理成章地继续沿用 XCTest，对 XCTest 进行了一系列拓展以便支持 Swift，但这始终是一个 1998 年编写的框架，并且与 Objective-C 重度耦合，很多功能与 Swift 天生冲突，所以需要一个全新的框架作为继任者。


### 🐎 [直播流⻚⾯内存优化⽅案](https://mp.weixin.qq.com/s/RzOpU_50WIZjUUNuKOBShA)

[@JonyFang](https://github.com/JonyFang)：上下滑过程中高清直播背景图带来的内存问题相关优化，有类似诉求，解决方案可做参考。

### 🐎 [Android 和 iOS 渲染架构差异对比，孰胜孰负？](https://mp.weixin.qq.com/s/5s11skxtI5FHVTa3ZuqQ7g)

[@Crazy](https://github.com/jiyan135960)：本文是一篇科普类文章，主要对比了 Android 与 iOS 两个系统在绘制原理上的区别。文章开篇先简单的讲解了 SurfaceFlinger 和 backboard 的区别，通过对比两种渲染方法后引出 OpenGL 与 Metal 和 Vulkan 的区别，并简单的介绍了关于 OpenGL 的实现与缺点。文章的内容相对简单，没有很多的实现逻辑与长篇大论的代码，只是让大家简单的了解下双端绘制逻辑上的不同。

## 代码

### 🐕 [SwiftUIViewDebug](https://github.com/Kyle-Ye/SwiftUIViewDebug#swiftuiviewdebug)

[@老峰](https://github.com/gesantung)：SwiftUIViewDebug 是 SwiftUI 调试工具库，可以使将调试信息编码为 Swift.Data，然后转换为 Swift.String，最后以可读的 JSON 格式来展示视图信息。

### [swift-macro-testing](https://github.com/pointfreeco/swift-macro-testing)

[@kemchenj](https://kemchenj.github.io/)：由 PointFree 开发的一款 macro 测试库，对比 SwiftSyntax 提供的测试函数提供了更多功能，例如更丰富的诊断信息，自动填充测试用例的 fix-it 等等，对于 macro 的编写和测试都有非常大的帮助。

## 内推

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

具体信息请移步：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）
