# 老司机 iOS 周报 #159 | 2021-05-17

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

## 新闻

### [Announcing the Swift Mentorship Program](https://swift.org/blog/swift-mentorship-program/)

> [知识小集](https://mp.weixin.qq.com/s/0B7kTL3UkvA_Nfpkzy7jUw)：近日，Swift 官方针对 Swift 社区的新贡献者，发布了 Swift 导师计划。这一计划旨在为成为 Swift 项目积极开源贡献者的开发人员提供帮助与支持，同时可以获得社区中经验丰富的贡献者的直接指导。
> 
> 参与计划的每位开发者都有机会与 Swift 社区中经验丰富的开发人员联系，并向他们学习。同时，根据自己的学习目标，开发者可以为 Swift 项目甚至 Swift 编译器项目贡献代码。社区会根据学习目标来匹配开发者和导师，并让他们一起在开源项目上合作 12 周时间。
> 
> 一方面，对于新贡献者而言，降低了贡献代码的准入门槛，不需要事先为项目做出贡献，同时能提升更多的技能；另一方面，对于导师来说，也是一个不错的增加领导技能的机会。对于双方而言，都是有益的。
> 
> 感兴趣的小伙伴们，特别是在校的学生朋友们，可以考虑加入这一计划，相信一定能从中受益匪浅。该计划的详情可点击原文链接查看。

## 文章

### 🌟 🐕 [LLVM Link Time Optimization](https://mp.weixin.qq.com/s/Th1C3_pVES6Km6A7isgYGw)

[@Leo](https://github.com/leomobiledeveloper)：Link Time Optimization，简称 LTO 是一种在链接期间对代码进行优化的技术，因为链接过程能看到应用程序的全貌，所以能做一些全局的优化来提高运行时的性能以及减小二进制的大小。本文是一篇 LTO 入门的佳作，作者不仅分析了实际场景下如何让 LTO 产生效果，还从原理的角度讲解了 LTO 是如何工作的，推荐阅读。

### 🌟 🐕 [XD to Flutter 2.0 现已发布](https://mp.weixin.qq.com/s/VWSzeQb_pV9EWXqdWuu51A)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：XD to Flutter 插件是一个功能强大、易于使用的工具，可将您的 Adobe XD 设计导出为简洁、有效的 Flutter 代码。您可以从自己的设计中复制特定视觉元素的代码，导出各种可再利用的 Widgets，甚至可以将一些视图整个导出，无论您是要使用它来复制某个构思精妙的渐变效果的代码，还是要导出完全响应式、参数化、交互式的 Widget，都非常简单。

### 🌟 🐕 [A站 的 Swift 实践 —— 上篇](https://mp.weixin.qq.com/s/rUZ8RwhWf4DWAa5YHHynsQ)

[@xiaofei86](https://github.com/xiaofei86)：经过不断迭代，Swift 如今已成 iOS 乃至苹果全平台首选开发语言，A 站也已经完全投入到 Swift 浪潮中，享受到 Swift 语言带来的舒适和高效开发体验。作为 A 站的 Swift 实践上篇，本文介绍了 Swift 的技术背景，A 站使用 Swift 的架构演进过程，以及对最新框架 SwiftUI 和 Combine 等技术的选型。大家可以关注“快手大前端技术”公众号，下篇内容会详细介绍混编和 Swift 动态性。

### 🐢 [自由、开源及其敌人 —— RMS事件簿](https://mp.weixin.qq.com/s/Q3DDYYiGbJJREii7ZPBuMg)
[@zvving](https://github.com/zvving)：无论你身处大厂还是创业团队，不可避免，我们大量的工作要用到开源项目。除了不同开源协议对源码开放&商用的已有约定外，你可曾想过：基于公司或个人的道德判断，你也许不能再使用部分开源项目。

[『开源项目是否需要考虑使用者道德』](http://esr.ibiblio.org/?p=8106)这一争论从未停止，而今愈演愈烈。
本文用罗列各方事件的方式，尽可能客观的描述围绕[RMS（Richard M. Stallman）](https://stallmansupport.org/who-is-richard-stallman.html)以及开源&[道德平权思潮](https://ethicalsource.dev/)讨论的纷争。

作为软件行业从业者，这纷争成因以及对开源社区的影响，值得我们每个人关注。

> 1. RMS是自由软件运动&GNU 的发起人，GCC、EMACS 作者
> 2. 值得参考的相关评论：[围绕RMS、开源、自由软件的两场“战争”](https://mp.weixin.qq.com/s/Kr0FzkpA-EHT51F7PVX76A)

### 🐕 [Monitoring for iOS with MetricKit: Getting Started](https://www.raywenderlich.com/20952676-monitoring-for-ios-with-metrickit-getting-started/)

[@J_Knight_](https://github.com/knightsj)：本文介绍了苹果官方提供的用于监控 iOS 程序的 MetricKit，该组件自 iOS 13 之后提供，在 iOS 14 也提供了新的 API。本文介绍了该组件的几个关键部分：

- MXMetricManager：核心管理类
- MXMetricPayload：封装了每日上报的数据
- MXDiagnosticPayload：具体的性能相关的信息
- MXCallStackTree：调用栈相关的信息
- MXAppExitMetric：APP 退出的相关信息（iOS 14提供）

最后也介绍了该组件在 Organizer 上的使用方法。

### [Flutter 状态管理: 使用 MobX](https://mp.weixin.qq.com/s/ken-UT3cmxc5aeWKkM-Lzg)

[@Damien](https://github.com/ZengyiMa)：众所周知，状态管理是每个软件项目都需要持续迭代更新的方向。在 Flutter 项目中，你可以使用 MobX 来管理应用中的各种状态，要在 Flutter 中高效地使用 MobX，需要遵循以下原则：
* 我们能访问任意状态中的可观察对象（即在我们应用运行过程中发生变化的变量）。
* 我们可以在 View 中展示这些状态，并响应 Action 意图。
* 我们可以修改状态，从而更新可观察对象以及相应的 View。

除此之外，本文还配套了详细的使用示例，使用 Flutter 的同学不妨一试。

## 代码

### [SwiftUI-Hooks](https://github.com/ra1028/SwiftUI-Hooks)

[@AidenRao](https://weibo.com/AidenRao)：作者基于 React Hooks 的思想，开发了一套 SwiftUI Hooks。SwiftUI Hooks 将状态和生命周期引入视图，而不必依赖于类似 @State 或 @ObservedObject 这些仅允许在视图中使用的元素。它还允许我们通过构建由多个钩子组成的自定义钩子在视图之间重用状态逻辑。此外，诸如 useEffect 之类的钩子也解决了 SwiftUI 中缺乏生命周期的问题。

### [Animatable - 使用 PropertyWrapper 实现动画代码复用](https://github.com/GodL/Animatable)

[@享耳先森](https://github.com/iblacksun)：`PropertyWrapper` 结合 `Codable` 实现 Model 的安全解析相信大家在使用了，作者利用 `PropertyWrapper` 实现了一个 CAAnimation 复用的库，代码非常简单，可以直接跳到 Github 浏览。

> 自荐：[GodL](https://github.com/GodL)

### [OverlayContainer](https://github.com/applidium/OverlayContainer)

[@JonyFang](https://github.com/JonyFang)：`OverlayContainer` 是一个 Swift 编写的 UI 库。它的作用是让一些场景下的界面开发变得更加轻便，例如在 Apple Maps、Stocks 或 Shortcuts 应用中看到的界面。

### [SwiftRegexDSL](https://github.com/kodlian/SwiftRegexDSL)

[@老峰](https://github.com/GesanTung)：在开发中我们经常会写正则表达式处理字符串，虽然每天都在使用和创建正则表达式，但是每次我们都必须依靠网络搜索和旧版文档。`SwiftRegexDSL` 提供了一种使用声明式结构化的 API 来使用正则表达式，它主要提供 match、range、replacingOccurrences 等字符串处理方法。

## 赞助者

虚位以待..

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 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）
