# 老司机 iOS 周报 #318 | 2024-12-30

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

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

**周报编辑组又来新人啦~** 

欢迎 [阿权](https://github.com/bqlin) 加入老司机技术，就职于字节剪映团队，喜欢音视频和图像处理，做过许多翻译和 WWDC 内参，热爱摇滚与爵士。喜欢文艺喜欢电影，曾经幻想诗与远方，却囿于昼夜、厨房与爱。

**希望 阿权 的加入也能为大家带来更多元化的内容输出！**

## 文章

### 🐕 [Calling Hidden Swift Functions](https://www.emergetools.com/blog/posts/calling-hidden-swift-functions)

[@AidenRao](https://weibo.com/AidenRao)：这篇博文介绍了在 Swift 中调用隐藏函数的方法。Swift 中有 6 种访问级别，从 open 到 private。但是，用 Swift 编写的 Apple 框架（尤其是 SwiftUI）包含供其他 Apple 框架使用但不供第三方应用程序使用的 API。文章探讨了如何在自己的代码中调用这些函数以使用隐藏功能。

### 🐕 [Be careful wrapping a throwing function in a Task](https://www.swiftwithvincent.com/blog/be-careful-wrapping-a-throwing-function-in-a-task)

[@Barney](~https://github.com/BarneyZhaoooo~)：本文讨论了在 Swift 中将抛出函数包装在 `Task` 中时需要注意的事项。直接在 `Task` 中调用抛出函数可能导致不如预期的行为，因为 `Task` 默认会捕获并处理错误。作者举例说明了如何正确使用 `Task` 来执行抛出函数，并提供了实现的最佳实践，以确保错误被适当地处理。同时，文章还强调了在并发编程中理解错误处理的重要性，帮助开发者避免引入难以调试的问题。适合希望深入了解 Swift 并发特性与错误处理的开发者。

### 🐎 [Enhance Xcode Previews with Unit Test Coverage](https://www.emergetools.com/blog/posts/unit-test-xcode-previews/)

[@DylanYang](https://github.com/Dylan19Yang)：本文介绍了如何利用单元测试加强 Xcode Previews 能力的可靠性。Xcode Previews 是一个非常方便的开发工具，但是它在有些时候也非常脆弱，如果有人在一个 view 上添加了 `@EnvironmentObject` 标志，所有调用到这个 view 的 preview 场景如果没有注入这个变量就会发生 crash。在代码量较少时还能及时发现，但是在一个庞大的项目中，view 的层级很深的话很难完全覆盖到所有需要修复的 preview 场景。而借助一个三方的 SnapshotPreviews 框架，它能够自动帮助我们在运行时查找所有实现了 PreviewProvider 的 preview 并添加到单元测试中进行执行。这样可以非常轻松的确保我们的 preview 都能成功运行了。

## 代码

### MetalLibraryArchive

MetalLibraryArchive 是一个 Apple 的 metallib 的逆向库，可以解析出 metallib 的 library 类型，目标平台和包含的所有函数。

函数的信息包含了：

- 函数名
- 函数类型 - 例如 vertex/fragment/kernel 等等
- Metal Shading Language 的版本
- 函数的 bitcode 等效表达式（底层使用 llvm-dis）
- 函数源码（如果 metallib 包含了源码的话）

另外也提供了一个[在线的 demo](https://yuao.me/MetalLibraryExplorer/)，对于想要逆向 Metal 的朋友来说是非常有用的工具。

## 音视频

### 🐎 [为什么 C 口数据线越来越乱？](https://www.bilibili.com/video/BV1j7zzYGEp9/)

[@极速男孩](https://github.com/ztlyyznf001)：苹果在 2023 的 iPhone15 中首次才用了 USB-C 作为数据线，不少用户会发现在有些 Android 的充电线在 iPhone 上无法实现快充或者无法充电。这个视频主要介绍了 USB-C 协议这些年来的混乱的标准和不同公司使用的各种快充协议。

## 内推

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

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

## 关注我们

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

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

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