# 老司机 iOS 周报 #105 | 2020-03-16

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

## 新闻

### 🌟 [WWDC20  改成线上举行](https://developer.apple.com/wwdc20/)

[@享耳先森](https://github.com/iblacksun)：受新冠疫情影响，苹果宣布一年一度的  WWDC 大会改为线上举行，具体日期及形式还未定，只指明将在六月举行。

## 新手推荐

### 🌟 🐕 [UIAlertController with Function Builders](https://felginep.github.io/2020-03-10/uialertcontroller-function-builders)

[@AidenRao](https://weibo.com/AidenRao)：Function Builder 是 Swift 5.1 的新特性，在 Swift 的基础上构建自己的 DSL 的语法。文章基于 Function Builder，创建简单且易读的 UIAlertController API，包括基础的 Function Builder 实践，条件语法，以及通过创建一个辅助函数，在 Function Builder 中实现 for 循环。

## 文章

### 🌟 [打破重重阻碍，Flutter 和 Web 生态如何对接？](https://mp.weixin.qq.com/s/eL02zPLFbTOXm1vS6UEA4g)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Flutter 在 2019 几乎已经成为了跨端开发的代名词了，其中其官方团队在下半年宣布的 Flutter Web 更是让其火热的势头更进一步，让大家看到了一个大统一的远景。本文是手淘技术对 Flutter 对接 Web 的一个深度解析，从 what，why，how 三方面娓娓道来，最终结论: 不要对接！不要对接！不要对接！

### 🌟 🐕 [Fluttify](https://fluttify.com/#/)
**系列文章：**
- [Flutter 插件开发必备 原生 SDK -> Dart 接口生成引擎`Fluttify`介绍](https://juejin.im/post/5dc65fa2f265da4d23759cec)
- [如何利用 Fluttify 开发一个新的 Flutter 插件](https://juejin.im/post/5e06faa651882512416a7630)
- [Fluttify 输出 Flutter 插件工程详解](https://juejin.im/post/5e19306c6fb9a02ff67d3780)
- [Fluttify 编译器原理介绍](https://juejin.im/post/5e67321751882549717d8de7#heading-1)

[@红纸](https://github.com/nianran)：Fluttify 是一个可以为原生 SDK 生成 Dart 接口的一个工具。工具解决了一些插件开发过程中带来的类型安全，编码繁琐等痛点。主要原理通过语法解析生成器 [ANTLR](https://www.antlr.org/) 产生树状分析器解析出 JSON 格式的中间文件，再利用中间文件和工程模板生成对应的 Dart 接口以及目标工程。

如果你对于 **ANTRL** 想了解更多推荐：[JSPatch Convertor 实现原理详解](http://blog.cnbang.net/tech/2915/)和[从 antlr 扯淡到一点点编译原理](https://awhisper.github.io/2016/11/18/%E4%BB%8Eantlr%E5%88%B0%E8%AF%AD%E6%B3%95%E8%A7%A3%E6%9E%90/)
> 推荐人：[@yohom](https://github.com/yohom)

### 🐎 [Testing Push Notification on iOS Simulator from Xcode 11.4 Beta](https://medium.com/flawless-app-stories/testing-push-notification-on-ios-simulator-from-xcode-11-4-beta-2fdd91d67bff)

[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1)：从 Xcode 的 11.4 beta 版本开始支持在 iOS 模拟器推送。作者介绍了两种方式来实现在 iOS 模拟器的推送：
1. 使用命令行：``xcrun simctl push booted test_push_notification.apns``
2. 通过拖拽 apns 文件到模拟器的方式来实现推送。

通过以上两种方式，开发者不需要使用真机，也不需要推送证书，更不需要使用 APNS 服务就可以实现推送，非常方便。

### 🐎 [Flight rules for Git](https://github.com/k88hudson/git-flight-rules/blob/master/README_zh-CN.md)

[@JimQ](https://github.com/waz0820)：这是一篇 Git 急救指南，所谓"飞行规则"，即用来指导问题出现后的应对之法。不像官方指南以罗列功能为主，本指南多以常见问题为小标题，然后给出该问题的具体解决步骤，非常适合就病投医，对症下药，且有中文版本。

### 🐕 [Introducing Swift Crypto](https://swift.org/blog/crypto/)

[@EyreFree](https://github.com/EyreFree)：Swift Crypto 是一个新的 Swift 系统库，它对 Apple CryptoKit 的 API 进行了出色的封装。这个新的库提供了跨平台的解决方案，无论部署在什么平台上，Swift 开发人员都可以访问这些 API，以实现一系列通用的加密操作。只需要 `import Crypto` 就可以获取所有 CryptoKit API，在编写跨平台加密代码时非常有用。本文对该库进行了简单介绍，感兴趣的朋友可以了解一下。

### 🚧 🐎 [The Nested Closure Trap](https://medium.com/flawless-app-stories/the-nested-closure-trap-356a0145b6d)

[@Satanwoo](https://github.com/SatanWoo)：Block / Closure 导致的循环引用想必大家在日常在开发中已经有了很深的体会。作者从 Swift 嵌套的闭包入手，提及了在多层嵌套中可能出现的内存泄漏场景。感兴趣的朋友可以用作一个补充知识漏洞的文章，时刻提示自己。

### 🐕 [设计模式（Swift 5.0 实现）](https://github.com/Binlogo/Design-Patterns-In-Swift-CN)

全面的 Swift 5.0 示例实现的设计模式，结合概念理论与代码示例可以更好地理解设计模式的实际应用。源项目为英文，此为中文整理翻译版本。

### 🐕 [使用 protocol 和 callAsFunction 改进 Delegate](https://onevcat.com/2020/03/improve-delegate/)

[@老驴](https://www.weibo.com/6090610445)：喵神的新作。这篇文章也是之前喵神的小专栏的[文章](https://xiaozhuanlan.com/topic/6104325798)的后续。

本文主要是通过 Swift 5.2 中最近新加的特性来完善之前的 Delegate Pattern 方案。有兴趣的同学不妨新老两篇文章一起读哦。

## 工具

### [CocoaHub](https://cocoahub.app/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=email&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B445)

[@xuyanlan](https://www.xuyanlan.com)：挺不错的一个 iOS 资讯 App，而且仅看 Feed 简介的话不用翻墙哦，[CocoaHub 下载链接](https://apps.apple.com/app/id1467755462)。

## 代码

### 🐕 [SwiftCurrency: Type-safety and algorithms for working with money in Swift.](https://github.com/peek-travel/swift-currency)

[@极速男孩](https://github.com/ztlyyznf001)：Swift Currency 是一个在 Swift 中来表达 [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 的一个货币的库。这个库是一个类型安全的，并支持文字表达，文字插入和数学表达式等对货币的操作。

### 🐕 [Time: Building a better date/time library for Swift](https://github.com/davedelong/time)

[@莲叔](http://aaaron7.github.io/)：做过时间管理、日历等 App 的同学一般都会有一个同感，即系统提供的日期相关的 API 着事不怎么友好，尤其是涉及到时区的考虑，往往都非常容易采坑。Time 是一个纯 Swift 实现的日期 API 集合，提供了 SwiftPM 的方式接入。提供了一种“讲人话”的方式来操作日期和时间，比如可以简单的针对不同的时区生成 clock 对象，并能够轻而易举的从 clock 对象中拿到年月日，时分秒等信息。不用写很多 boilerplate code。有相关需求的同学可以尝试一下。

### [YMHTTP](https://github.com/zymxxxs/YMHTTP)
[@张嘉夫](https://github.com/josephchang10)：`YMHTTP` 是一个适用于 iOS 平台，基于 [libcurl](https://curl.haxx.se/) 的 IO 多路复用 HTTP 框架，其 API 设计和行为与 NSURLSession 保持高度一致。因为 YMHTTP 是基于 libcurl 进行封装，所以有着较高的定制性，目前的版本与 NSURLSession 在 API 保持高度一致的同时拓展了 DNS 的能力（包括 SNI 的场景）。

### [Swift Argument Parser](https://github.com/apple/swift-argument-parser)
[@xiaofei86](https://weibo.com/xuyafei86)：近日苹果开源了由 Swift 实现的 ArgumentParser。它用于解析命令行参数，具有直观、易用、简洁、安全的特点，是一个很出色的解析器。目前 ArgumentParser 的 star 数已达 1k。苹果还推荐了两个 ArgumentParser 在 Swift 项目工具中采用的示例：
1. indexstore-db：一个包含两个命令的简单实用程序。
2. swift-format：使用了一些高级功能，例如自定义选项值和隐藏标志。

## 内推

老司机周报团队联合知识小集和 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）
