# 老司机 iOS 周报 #150 | 2021-03-08

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

## 新闻

### 🐢 [Flutter 2 正式发布](https://mp.weixin.qq.com/s/tJe2ScLgKWFTybpBtDl2TA)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 2 发布了，这次 Flutter 团队为大家带来了成吨的新功能以及更稳定的性能。通过 Flutter 2，你可以使用相同的代码库为五种操作系统构建原生应用: iOS、Android、Windows、macOS 和 Linux；以及为 Chrome、Firefox、Safari 和 Edge 等浏览器打造 web 体验。Flutter 甚至可以嵌入到汽车、电视和智能家电，为环境计算提供最普适、可移植的体验。小编汇总一些重大的功能，供大家速览:

- Flutter web 支持，且达到了稳定版
- Flutter 2 对于桌面、可折叠和嵌入式设备上的支持
- Dart 健全的空安全稳定版
- Flutter 多实例支持
- 新工具: Flutter Fix
- 新 Widget: Autocomplete、ScaffoldMessenger 等

这波 Flutter 官方团队简直输出爆炸有木有, 所以小编另推荐几篇 Flutter 2 相关的文章辅助阅读:

- [无限可能 | Flutter 2 重点更新一览](https://mp.weixin.qq.com/s/EzS3dtpZB_i9p358qqlBpg)
- [Flutter2.0重磅发布！带你一文打尽Flutter Engage](https://mp.weixin.qq.com/s/qy6ZdZmULOgwBEiqT4yGew)
- [What’s New in Flutter 2](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65)
- [【译】Flutter 2.0 正式版发布，全平台 Stable](https://mp.weixin.qq.com/s/rqf4tJR23Yzf3L3J5JY3Qw)

## 文章

### 🌟 🐢 [从预编译的角度理解 Swift 与 Objective-C 及混编机制](https://mp.weixin.qq.com/s/gI9vL1KlHuMzMoWWf2tnIw)

[@享耳先森](https://github.com/iblacksun)：相信不少 iOSer 对于编译器如何将你的源码编译成可执行文件一直都是一知半解，本文从编译器预编译阶段的如何查找头文件开始，深入剖析项目中使用到的技术和各种参数的作用，由此来指导开发者如何进行混编。

### 🌟 🐢 [深入剖析 JavaScript 编译器/解释器引擎 QuickJS - 多了解些 JavaScript 语言](https://mp.weixin.qq.com/s/sKP1Svn8r8z_VEIlbUcxTg)

[@JonyFang](https://github.com/JonyFang)：本文着重介绍了 QuickJS。为了更有助于读者理解 QuickJS，作者在详细介绍和剖析 QuickJS 之前，先引入聊了聊 JavaScript 的背景及 QuickJS 作者的背景；在这之后，会针对 js 语言的一些特性来看这些特性在 QuickJS 是如何解释执行和优化的。相信本篇技术文能够帮助读者加深对 js 语言的理解。

### 🐕 [Hacking native ARM64 binaries to run on the iOS Simulator](https://bogo.wtf/arm64-to-sim.html)

[@老驴](https://www.weibo.com/6090610445)：现在有很多同学已经用上了 M1 的开发机了，但是在实际开发中会发现依赖的 SDK 并没有更新对 ARM Mac 原生支持，这会导致在模拟器里编译运行 App 的时候，会继续用 Rosetta 2 的方式来运行。本来就介绍了如何在不改动依赖 SDK 的情况下，在 M1 Mac 上以原生模式来跑。

### 🐢 [How Apple’s Upcoming Two-Step/Two-Factor Enforcement Could Affect Your fastlane Experience](https://www.joshholtz.com/blog/2021/02/17/apples-2fa-with-fastlane.html)

[@极速男孩](https://github.com/ztlyyznf001)：苹果在 2021 年二月强制要求所有登录 App Store Connect 开通两步验证或者或者双重认证，这对我们常用的 CI 工具 fastlane 产生了一定的影响，本文主要讲述了这个新规定是如何对 fastlane 产生影响，并给出了一些解决方案和工具。

### 🐎 [XCFrameworks caveats](https://kean.blog/post/xcframeworks-caveats)

[@Damien](https://github.com/ZengyiMa)：XCFramework 是 Xcode11 中提出的一个新特性，是由 Xcode 创建的一个可分发的二进制包，它包含了 framework 或 library 的一个或多个变体，因此可以在多个平台上使用。本文作者通过为自己的项目制作 XCFrameworks 过程中所遇到的问题，并且给出对应的解决方案，通过文章，可以让大家在打包 XCFrameworks 少走很多弯路。

### 🐕 [在线教室 iOS 端声音问题综合解决方案](https://mp.weixin.qq.com/s/yFNb0zvPtEjHAtED7-jT0w)

[@AidenRao](https://weibo.com/AidenRao)：在线教室场景下，很多功能都需要播放声音，包括课中音视频直播、课后回放、webview 内嵌课件声音（包括音频、视频、音效）、课堂音频、课堂视频、课堂游戏声音、音效声音等。除此之外，教室内还包括很多需要声音录制的功能，包括连麦、跟读、集体发言、聊天语音输入、语音识别等。

教室内这些功能存在各种组合，且对 AVAudioSession 的设置要求存在差异，而 AVAudioSession 又是一个单例，如果没有一个统一管理的逻辑，很容易就出现设置混乱的问题。

文章通过底层原理的分析与实际项目经验，从代码规范、问题兜底、问题报警梳理出一套可行的解决方案。

### 🐕 [函数节流（Throttle）和防抖（Debounce）解析及其iOS实现](https://juejin.cn/post/6933952291142074376)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：对于部分 iOS 开发人员来说，函数节流（Throttle）和防抖（（Debounce）这两个专业名词可能会比较陌生。对于连续调用的函数，尤其是触发频率密集、目标函数涉及大量计算时，恰当使用 Throttle 和 Debounce 可以有效提升性能及系统稳定性。作者详细阐述了 Throttle 和 Debounce 的概念及二者间的区别，同时封装开源库 [HWThrottle](https://github.com/HighwayLaw/HWThrottle)，该库有以下特点：

- 未使用任何 runtime API，全部由顶层 API 实现
- 每个业务场景需要使用者自己定义一个实例对象，自行管理生命周期，旨在把对项目的影响控制在最小范围
- 区分 Throttle 和 Debounce，提供 Leading 和 Trailing 选项

### [Apple M1X benchmark leak](https://www.cpu-monkey.com/en/compare_cpu-apple_m1x-1898-vs-apple_m1-1804)

[@老驴](https://www.weibo.com/6090610445)：在苹果发布 M1 之后，也有很多人在期待 M1X 和 M2。现在 M1X 的跑分已经出现在跑分网站上了，有一部分参数也已经泄露。目前看起来 M1X 是一颗 8 大核心 4 小核心的 12 核心处理器，单核性能和 M1 几乎一致，多核性能因为大核心数量翻番得到翻倍，TDP 保持在 35W。在这样的功耗表现下能和 Intel 11700K 多核性能几乎一致，算是非常夸张的了，要知道就算是 PL1，11700K 也要 125W，PL2 更是高达 251W。所以，M1X 的能耗比可以说是非常夸张了。

## 代码

### [AR_100Days](https://github.com/satoshi0212/AR_100Days)

[@老峰](https://github.com/gesantung)：WWDC2017 苹果发布了ARKit，基于它就可以实现 AR 比较强大的虚拟增强功能。作者 [Satoshi](https://github.com/satoshi0212) 以 Demo 的形式每天分享一种 AR 效果，目前已经更新 45 个，对 ARKit 感兴趣的读者可以参考学习。

## 赞助者

虚位以待..

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 iTDriverr 哦~**

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们开通了公众号，每期发布时公众号（LSJCoding）会推送消息，欢迎关注。

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