# 老司机 iOS 周报 #194 | 2022-03-07

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

## 新闻

### [Apple Park 传送门下周开启](https://mp.weixin.qq.com/s/9gsgkR6QW5o37ov4SltPmQ)

Apple Park 传送门定时开启，北京时间 3 月 9 日凌晨 2 点，欢迎准时来 [Apple 官网](https://www.apple.com.cn/apple-events/)看 Apple 特别活动直播，还有同步中文字幕可以开启。

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

### [探索物理空间音频引擎和游戏手柄](https://developer.apple.com/cn/accelerator/)

2022 年 3 月 10 日(报名截止 2022 年 3 月 9 日）

探索几何感知音频是如何帮助您的 app 构建复杂、互动和沉浸的音频场景。了解 Apple 的空间音频 API —— 物理音频空间化引擎（PHASE），以及它是如何使声音始终与您的体验保持一致 —— 帮助您在开发过程中创建空间声景和场景，而不是等到后期制作。我们还将向您展示虚拟和实体游戏手柄的最新改进，以及如何在您的 app 中支持手柄的分享功能。

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

## 文章

### 🌟 🐕 [音视频工程示例专栏](https://mp.weixin.qq.com/mp/appmsgalbum?)

第二篇 iOS 音频编码：[采集音频数据并编码存储为 AAC 文件](https://mp.weixin.qq.com/s/q4n1dYTjcJVJolX-Wrdr9Q)

第三篇 iOS 音频封装：[采集编码音频数据并封装存储为 M4A 文件](https://mp.weixin.qq.com/s/R86qnQAi2njr6k7tFvTF-w)

[@JonyFang](https://github.com/JonyFang): 本 Demo 包含的主要内容有：

1. 实现一个音频采集模块
2. 实现一个音频编码模块
3. 串联音频采集和编码模块，将采集到的音频数据输入给 AAC 编码模块进行编码和存储
4. 详尽的代码注释，有助于理解代码逻辑和原理

### 🐕 [探索 iOS 编码对包大小的影响](https://mp.weixin.qq.com/s/3Z_IFBpjwDTrB6ynu2bKcQ)

[@Smallfly](https://github.com/iostalks)：本文介绍了比较极致和新颖的包大小优化技术，文章从二进制、汇编指令层面分析 Objective-C 代码对包大小的影响。主要从三个方面进行了讲述：

1. 二进制层面分析 OC 代码对包大小的影响
2. 编码上优化包大小的 tips
3. 总结各种 tips 的收益

### 🐎 [Publishing DocC Documentation as a Static Website on GitHub Pages](https://www.createwithswift.com/publishing-docc-documention-as-a-static-website-on-github-pages/)

[@kemchenj](https://kemchenj.github.io/)：去年 WWDC 苹果发布了 Swift 专用的文档生成工具 docc，接近一年过去了，社区主流的库都没有采用这个工具，其中一个重要的原因是 docc 不支持生成静态网页，无法部署在类似 github.io 之类的服务上，必须有服务器支持才可以。

最近在社区的帮助下，docc 也加入了静态网页生成的功能，预计会跟随 Xcode 13.3 一起发布，这篇文章的作者就分享了如何使用 Xcode CLI 命令调用 docc 生成静态网页，以及最终的效果。

另外跟随 Xcode 13.3 发布的 SPM 预计也会加入 [Command Plugin](https://github.com/apple/swift-evolution/blob/main/proposals/0332-swiftpm-command-plugins.md) 功能，苹果官方也发布了[对应的 docc 插件](https://github.com/apple/swift-docc-plugin)，使用这个插件就可以在 CLI 里 `swift package generate-documentation` 一键生成文档。

### 🐕 [注解排列组合出启动任务 | ksp - 掘金](https://juejin.cn/post/7070887538444992526?share_token=7592be2d-eb07-4dd9-94ad-185665479303)

[@Barney](https://github.com/BarneyZhaoooo)：文章介绍了一种通过注解的排列组合优化启动任务的思路，让开发同学尽可能的对启动流程无感知。并提供了简单易懂的 demo。

- Ksp解析注解
- Task生成结合TaskGroup概念
- 拆分启动步骤
- 依赖注入
- Plugin

### 🐕[iOS 自动化测试驱动工具探索](https://mp.weixin.qq.com/s/8bq-Y0rrV9Pw93e8IQoUaQ)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：该文介绍了字节 iOS 自动化测试驱动工具 bdc 的探索过程及实现原理。解决了目前 Facebook 方案耗时长性能差，对真机不友好，无法在 Linux 上部署等问题，值得一读。

文章主要内容如下：
- 参考 Facebook 的 wda 实现了更高效的 XCTest 工具，在执行速度和稳定性获得大幅提升
- 通过研究 libimobiledevice 的原理，实现了调用 Xcode 自带工具集的能力
- 通过将进程名加入 testmanagerd 的白名单实现了在 Linux 上的 docker 化部署

### 🐕 [如何在 macOS Monterey 中成功编译 objc4-838 源码](https://juejin.cn/post/7068539803318353928)

[@Damien](https://github.com/ZengyiMa)：你是否想自己编译 Objc4 的源码？那就来看看此篇文章吧。本文会手把手教你如何在 macOS Monterey 中成功编译 objc4-838 源码，并且对编译错误会有详细的修复说明，可以跟着作者一步步在 macOS Monterey 中成功编译。

### 🐕 [Combining protocols in Swift](https://www.swiftbysundell.com/articles/combining-protocols-in-swift/)

[@anotheren](https://github.com/anotheren)：Swift 中协议的核心优势之一就是方便我们抹除原始类型，并定义统一接口进行交互。本文展示了几种不同的方法来组合多个协议的功能。编程并没有绝对的标准答案，不同方案都有各自的特点。协议默认实现、协议扩展、范型约束，你更习惯哪一种呢？

## 代码

### 🌟 [Flutter 图片库高燃新登场](https://mp.weixin.qq.com/s/irsf9550JcHrsd5l-V8BbQ)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 图片处理目前来说相对于原生而言，仍有不少的差距，尤其是在处理缓存方面。本期代码库推荐咸鱼出品的 Flutter 图片处理方案: PowerImage。该方案巧妙地将外接纹理与 FFi 方案组合，以更贴近原生的设计，解决了一系列业务和技术痛点，强烈推荐 👍

### [SwiftUIFlux](https://github.com/Dimillian/SwiftUIFlux)

[@老峰](https://github.com/gesantung)：Redux 是 JavaScript 的状态管理框架，SwiftUIFlux 一个非常简单的使用 Combine 为 SwiftUI 实现类 Redux 的状态管理框架，感兴趣的同学可以尝试。

### [Satin - A 3D Graphics Framework built on Apple's Metal](https://github.com/Hi-Rez/Satin)

[@老驴](https://weibo.com/u/6090610445)：最近随着元宇宙概念的火爆，3D 相关的技术也受到了大家的关注，有很多同学对 3D 引擎有很浓厚的兴趣，也想探究一下引擎的原理和实现。这个库就是一个 iOS 开发者基于 Metal API 写的一个引擎，作为学习 3D 相关知识来说，是个很好的材料。

## 摸鱼周报

[@摸鱼周报 #45](https://mp.weixin.qq.com/s/_N98ADlfQCUkxYjmH0SvZw)：第四十五期摸鱼周报来了，一起来看下本期概要：

* 话题：苹果公司宣布暂停在俄销售产品并关闭部分功能
* Tips：在 SPM 集成 SwiftLint
* 面试模块：Swift 的 weak 是如何实现的？
* 优秀博客：iOS项目中的脚手架/CLI介绍
* 学习资料：Swift 实现的设计模式
* 开发工具：nginxedit：Nginx 在线配置工具

## 内推

### 南京、上海、深圳 - 华泰证券 - 招聘 iOS/Android 高级、资深工程师

> 招聘要求和联系方式：https://www.yuque.com/iosalliance/article/cinmb2

### 杭州 - 淘宝 - 终端平台技术部 - 招聘 iOS/Android

> 招聘要求和联系方式：https://www.yuque.com/iosalliance/article/hszgat

### 其他

如果你想**找工作**，点这里：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）
