# 老司机 iOS 周报 #167 | 2021-07-19

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

## 新手推荐

### 🌟 🐢 [Develop Apps for iOS](https://developer.apple.com/tutorials/app-dev-training/)

[@EyreFree](https://github.com/EyreFree)：苹果官方 iOS 开发教程终于来了，原来苹果没有忘记！此教程预计需阅读 12 小时左右，介绍 Xcode 的基础用法以及如何利用 SwiftUI 和 UIKit 两个框架来开发 iOS 原生 App，渐进式的代码演示，通俗易懂，非常适合初学者。

* 推荐人：[Keith](https://twitter.com/KeithBirdKTH)

### 🐕 [使用 Swift 提高代码质量](https://juejin.cn/post/6984768684250120222)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：文章首先简单介绍了 Swift 的类型安全等特性，接着列举了一些容易忽略却较为有效的代码实践以及性能优化方案，例如 `` 减少方法动态派发 ``、`` 避免随意给予可选值默认值 ``、``protocol 添加 AnyObject`` 等等。如果团队计划投入 Swift，不失为一份大家可以参考的编码规范的最佳实践。  

## WWDC 21 内参本周更新

### [【WWDC21 10030】高级 Web 内容开发](https://xiaozhuanlan.com/topic/5637428091)

[@LittleSmart](https://github.com/LittleSmart): Web 应用作为互联网内容的重要组成部分，近些年随着 Web2.0 概念的蓬勃发展和包括 WebAssembly、WebGL2.0 等技术的演进，Web 应用在很多场景下已经具备和原生相媲美的性能，Apple 在过去的一年中为 Web应用带来了哪些改进，Safari 和 Webkit 又新添了一些怎样有趣又好玩的功能呢，让我们跟随 WWDC21 一起来探索一下吧～

### [【WWDC21 10053】优秀 Mac Catalyst App 的品质](https://xiaozhuanlan.com/topic/9324781605)

[@OneeMe](https://github.com/OneeMe): Catalyst 这项技术是苹果于 2019 年的 WWDC 上推出的新技术，其目的在于让开发者能够很快的将一个 iPad App 转换成一个能够跑在 Mac 上的 App。三年来的积累也给这项技术带来了足够丰富的特性。那么，面对 Catalyst 中丰富的各种能力，如何才能让我们所创建的 App 在 Catalyst 下有更好的体验呢？让我们来逐一看看苹果工程师给我们的建议吧！

### [【WWDC21 10122】图表的无障碍支持进阶](https://xiaozhuanlan.com/topic/7904561328)

[@Ckitakishi](https://github.com/Ckitakishi): 今年，Apple 带来了全新的音频图表（Audio Graphs），以此为契机，本文将围绕图表无障碍化的基础知识，现状和新特性展开讨论，旨在为正在探索图表无障碍访问的你点亮一盏明灯。

### [【WWDC21 10276】使用相机进行键盘输入](https://xiaozhuanlan.com/topic/0281395647)

[@LinusLing](https://github.com/LinusLing): 我们在日常生活中使用 iOS 应用程序时，常常对那些非数字文本的输入感到很头疼，比如发票，活动传单，还有酒店房间的大活页等。幸运的是，iOS 15 出了一个新功能，可以让你使用相机从周围的世界直接捕获文本，不再需要自己在键盘打字输入了。本文将探讨使用相机进行键盘输入的内容过滤方式以及原理，从而帮助开发者开发相应场景的功能，从而让用户在使用应用程序时获得更流畅、更愉快的体验。

## 播客

### [WWDC21 瞎谈：Swift 支棱起来了吗？](https://www.xiaoyuzhoufm.com/episode/60ef7aababf61dc037c4a96a)

[@没故事的卓同学](https://github.com/lacklock)：我们终于录上了一期技术播客，本期播客中我、四娘、老驴三人谈了谈对 Xcode cloud 的看法，也谈了 Swift 的异步和并发的新特性。欢迎大家收听、评论、订阅。本期节目在苹果播客、网易云音乐、QQ 音乐、汽水儿、喜马拉雅中也有上线。

## 文章

### 🌟 🐕 [西瓜客户端埋点实践：基于责任链的埋点框架](https://mp.weixin.qq.com/s/iMn--4FNugtH26G90N1MaQ)

[@Barney](https://github.com/BarnyZhao)：本文深入浅出，从一个基本的收藏点击埋点切入，对比分析了常见的透传埋点，全埋点的优劣，最后引出基于责任链的埋点介绍。

文中的关键信息总结如下：
1. 埋点的背景介绍，经典消费场景分析。
2. 以收藏场景为例，通过伪代码分析对比透传和全埋点的优劣。
3. 基于责任链的埋点框架介绍
	- 优点：侵入性小、关注点分离
	- 缺点：理解成本、无强制约束

### 🐎 [Experience of using VSCode as a Swift IDE](https://forums.swift.org/t/experience-of-using-vscode-as-a-swift-ide/50271)

[@Keith](https://github.com/KeithBird)：上周我们介绍了码农批量下岗项目 Copilot，该项目还在测试阶段就已经让无数程序员大呼 woc。解放全 GitHub 的项目自然少不了 Swift 代码的投喂，虽然 Copilot 目前只可在宇宙 IDE - VS Code 中使用，但支持多平台一直是 Swift 服务端团队 [SSWG](https://swift.org/sswg/) 的目标之一。[Experience of using VSCode as a Swift IDE](https://forums.swift.org/t/experience-of-using-vscode-as-a-swift-ide/50271) 一文介绍了目前在 VS Code 写 Swift 的优缺点和对未来的展望。至于如何进行部署，可以参考官方的 [IDEs/Editors with Swift Support](https://github.com/swift-server/guides/blob/main/docs/setup-and-ide-alternatives.md)，和非官方但更加通俗详细的 [iOS Development on VSCode](https://medium.com/swlh/ios-development-on-vscode-27be37293fe1)。值得一提的是，尽管目前 Copilot 只对 Python、JS、Go、Ruby 等网红语言才有最完美的支持，但在少有人用 VS Code 开发 iOS 的情况下，其对 Swift 的支持依然十分惊艳。最后，因此对人类失去信心的同学可以复习王垠的「[人工智能的局限性](https://www.yinwang.org/blog-cn/2017/04/23/ai)」，重拾改一辈子 bug 的无产阶级觉悟。

> 由 [@Keith](https://github.com/KeithBird) 推荐并完成简评

### 🐕 [听说你想写个 DNS 服务器 - 数据包](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486555&idx=1&sn=a1e7e018a549ad155cfad6eb4b135e3e&chksm=cf558393f8220a852fdd90d0919981239d2bbe0266f511ffd27ecbde6e972399b24fdeaec9b8&token=1949232915&lang=zh_CN#rd)

[@J_Knight_](https://github.com/knightsj)：本文作者开始了一个新的系列来讲解如何用 Swift 语言来实现 DNS 服务器。作为本系列的开篇，本文主要介绍了 DNS 数据包的结构（包头和包体数据），各个部分的字段定义，布局信息以及介绍了如何通过抓 DNS 数据包来解析 DNS 相关数据的方法。

扩展阅读：

- [听说你想写个 DNS 服务器 - 数据写入](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486681&idx=1&sn=daebc908f4fe22c6d773f1e4e38fa350&chksm=cf558311f8220a07af12fe2a0956fd76ddff0006162ebb983b1795eb201bbe11c3a8456ebced&token=540344501&lang=zh_CN#rd)

### 🐕 [Improving Platform Channel Performance in Flutter](https://medium.com/flutter/improving-platform-channel-performance-in-flutter-e5b4e5df04af)

[@Damien](https://github.com/ZengyiMa)：本文是 pigeon 的作者 Aaron Clarke 带来的精彩好文，Aaron Clarke 通过减少在 Dart、C++、ObjC、JVM 之间信息传递中发生的多余 copy 优化，来提升 Native 与 Flutter 通信的性能。最终取得的效果在老设备上 15% 的提升，新设备上获得了 42% 的性能提升。并在文章最后给出了一些优化建议，如果对性能要求高场景，可以使用 BasicMessageChannel 和 FlutterBinaryCodec 并且配合自己实现 encode & decode，通过这个组合来提高 Flutter 和 Native 之间的性能。

## 摸鱼周报

[@摸鱼周报 #18](https://mp.weixin.qq.com/s/JsGmu7pzYLI3Svrmk5i2cA)：第十八期摸鱼周报来啦，一起看看本期概要：

本期话题：什么是暗时间，来源于刘未鹏的《暗时间》。

Tips 内容用一张详细的思维导图总结了 Fastlane 几乎所有的常见方法。

面试解析围绕 block 的变量捕获机制展开说明了 block 的一些用法和面试高频考察点。

优秀博客带来了几篇编译优化相关的文章。

学习资料带来了一个从 0 设计计算机的视频教程，偏电路一些；还有 Git 和正则表达式的文字教程。

开发工具介绍了两个代码片段整理应用：SnippetsLab 和 CodeExpander。


## 代码

### [Hammer](https://github.com/lyft/Hammer)

[@Smallfly](https://github.com/iostalks)：[Hammer](https://github.com/lyft/Hammer) 是一款模拟交互事件的 Swift 开源库，支持模拟触摸，iPad 手写笔，键盘输入。它能很好地用于 UI 自动化测试，尽可能替代一系列的人工操作。有兴趣的同学可以了解一下。

## 赞助者

虚位以待..

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

## 内推

> 杭州网易云音乐社区团队招聘高级/资深 iOS 开发工程师，包含云音乐动态，MLog 视频，评论，播客，云圈，音视频编辑等多条核心业务。负责音视频社区生产分发建设，打造良好的社区互动氛围。我们保持将最新技术引入，提升开发效率，带给用户更好的体验。联系方式：简历发送至 iostalkboy@gmail.com。

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