# 老司机 iOS 周报 #101 | 2020-02-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) 提出。

## 新闻

### 🐎 [On the road to Swift 6](https://forums.swift.org/t/on-the-road-to-swift-6/32862)

[@xiaofei86](https://weibo.com/xuyafei86)：Swift 官方发布 Swift 6 未来方向：

1. 加速 Swift 生态发展
2. 优化开发体验（Compiler，Debugger，IDE 等工具）
3. 朝着为开发者赋能的语言前进（语言功能层面）

为此，将沿用 SSWG 的方式，在各个领域设立各自的工作组进行开发，并且 Core Team 也将进行人员调整，引入各个工作组的核心负责人。

Swift 6 目前有两个目标：

1. 加强并发的功能支持
2. 继续沿着 [Ownership Manifesto](https://github.com/apple/swift/blob/master/docs/OwnershipManifesto.md) 的计划推进，优化内存模型

这一次 Swift 6 不会有具体的时间安排，只会按照功能去公开各自的开发进度和时间表，当这些目标全都完成时就会 release Swift 6，在目标完成之前都只会按照周期 release Swift 5.x 版本。

## 新手推荐

### 🐕 [SwiftUI-官方教程翻译](https://github.com/WillieWangWei/SwiftUI-Tutorials)

[@zvving](https://github.com/zvving)：SwiftUI 已经公布半年了，开始逐渐有大批开发者尝试学习和使用。此项目翻译了共十篇官方的 SwiftUI 教程，在保留官方的文字内容、配图、代码外，还进行了细微的优化，推荐 Swift 新手参考。

> 推荐人：[@Willie](https://github.com/WillieWangWei)

## 文章

### 🌟 🐕 [一次让刷新控件好玩起来的尝试](https://mp.weixin.qq.com/s/TOWIpYWfxxtgHE6oYDEd4g)

[@zvving](https://github.com/zvving)：相信你也有过『手里拿着锤子，看什么都像钉子』的经历。

从学会 SpriteKit 能用在哪里？到下拉刷新游戏化『一本正经』的可行性分析，再到具体的代码实现。作者在创造需求的同时，提供了『严谨思考，细心实现』的样本。

看完本文，会让人手痒，也想学些新技术，再找个场景用起来。

### 🐕 [Library Evolution in Swift](https://swift.org/blog/library-evolution/)

[@老驴](https://www.weibo.com/6090610445)：Swift 编译器组的 Slava Pestov 在 Swift 官方网站上写了一篇关于 Swift 5.1 中 binary stability 相关的介绍。

在 Swift 5.1 中，Swift 引入了两项新功能：Module stability 和 Library evolution。前者可以让不同版本编译器编译的 Swift Module 同时在一个 App 中运行，而后者，则可让 binary framework 开发者在不影响老版本兼容性的同时添加新功能。

本文中，Slava 用了一些例子来介绍其中两个比较常用的 attribute：`@inlinable` 和 `@frozen`。 如果你在开发一些 framework 的话，不妨来读一读这篇文章。

### 🌟🐕 淘系专家带你初探端智能与MNN

[上篇](https://mp.weixin.qq.com/s/NUXVB4aK87keQD21wJx3Cw?from=timeline&isappinstalled=0&scene=2&clicktime=1580719278&enterid=1580719278)

[下篇](https://mp.weixin.qq.com/s/mj3_44pvQaXoWP9dW3R0tQ)

[@莲叔](http://aaaron7.github.io/)：MNN 的文章之前也陆续推荐过一些，不过比较偏技术细节。本次推荐的两篇相对来说更加 general 一些。从为什么要做端智能聊到为什么要用MNN。上篇侧重于讲解了为什么端上 AI 是未来的发展方向，同时对于端智能面临的挑战和未来的发展趋势做了一些总结。下篇则主要分享了 MNN 的优势以及工作流程。两篇文章适合对于端智能持观望态度的研发同学参考，对于已经入坑的，参考价值不大。

### 🌟🐢 [Static and Dynamic Callable Types in Swift](https://nshipster.com/callable/)

[@JimQ](https://github.com/waz0820)：上周 Xcode 11.4 第一个 beta 版给我们带来了大量有价值的更新，其中包括 Swift 比较受关注的两个新语法：[作为函数的 key path 表达式](https://github.com/apple/swift-evolution/blob/master/proposals/0249-key-path-literal-function-expressions.md) 和 [callAsFunction](https://github.com/apple/swift-evolution/blob/master/proposals/0253-callable.md) 。作者通过提供一些历史和理论背景，来帮助我们认识到新语法的真正价值点，以及 Swift 怎么把静态、动态可调用类型的版图一步步拼起来的。对于 Swift 不断并入的新提案导致“含糖量”逐渐增加的问题，作者也发出了“庐山不识真面目，只缘身在此山中”式的无奈之慨。

### 🐕 [WatchKit渲染原理以及SwiftUI桥接](https://dreampiggy.com/2019/12/10/WatchKit渲染原理以及SwiftUI桥接/)
Apple Watch 从发布以来，经过几次更新换代，目前已经成为市面上最受欢迎的可穿戴设备。Swift UI 是去年苹果新推出的 UI 相关框架。虽然 WatchKit 推出已经有一段时间了，但是相信多数同学并没有开发 Watch App 的经历，所以这两个对很多人相对陌生的技术如何结合开发，相信很多人对此会有兴趣。本文不仅介绍了 WatchKit 的渲染原理，还介绍了如何与 SwiftUI 进行桥接，值得好好了解下。

## 工具

### [ControlRoom](https://github.com/twostraws/ControlRoom)

基于 simctl，让你可以通过 GUI 来便捷地控制模拟器，例如发送推送通知，切换夜间模式等。

### [Sitrep](https://github.com/twostraws/Sitrep)

Sitrep 是 Swift 的源码分析工具，为你提供代码的高级分析：

- 你的类，结构体，枚举，协议和扩展的数量。
- 总代码行数，以及源码行数（减去注释和空格）。
- 列出最长行数文件，以及它们的源代码行数。
- 哪些内容被 import 以及 import 的频率。
- 你的项目中有多少个 UIView，UIViewControllers 和 SwiftUI 视图。

## 代码

### 🌟 🐕 [MLN —— 支持热更的移动跨平台解决方案](https://mp.weixin.qq.com/s/I4FRuC81AOgaNSEROrJVWw)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：MLN 是陌陌技术团队开源的移动跨平台开发框架，因其较低的学习成本、较高的人员效率、良好的性能、支持线上热更新等优势，目前在陌陌 App 中已全面替换 Weex，成为唯一在用的跨平台方案，并广泛应用于多种业务场景. MLN 优点良多：

- 包体积小，加载速度快，流畅度高(对比 Flutter/RN/Weex )
- 开发调试支持热重载，提升开发调试体验，节约时间成本
- 支持热更新，通过网络下载lua离线包即可实现热更新
- 提升开发效率，一套代码适应 Android 和 iOS 两端

## 音视频

### 🌟🚧 [iPlayground 2019 | 網路難，難於上青天 - 用部件化的方式簡化網路程式設計](https://www.youtube.com/watch?v=Xk4HZfW6vK0&list=PLJN8Q2M8xECkvIbNFM30Bu91qbN92SXND&index=14)

[@老峰](https://github.com/GesanTung): 视频是 [喵神](https://weibo.com/u/2210132365) 在 iPlayground 2019 的演讲，分享了 Line SDK 关于网络层的单一职责设计架构思路, 有兴趣的同学可以点这里看[源码](https://github.com/line/line-sdk-ios-swift/tree/master/LineSDK/LineSDK/Networking/Client)。


## 内推

> 杭州萧山微医集团招聘资深 iOS 开发工程师（Mac 方向）。微医集团是国内领先的互联网医疗方向独角兽企业，现招聘精通 Mac 端音视频方向研发工程师，参与音视频 SDK 的开发和维护，负责云会议客户端核心功能的设计开发和维护。有意向者发送简历至 zhangmw1@guahao.com，有投必回，实时反馈进度~

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

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

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

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

## 关注我们

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

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


