# 老司机 iOS 周报 #180 | 2021-11-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) 提出。

## 新闻

### [macOS 版 TestFlight 正式发布](https://developer.apple.com/cn/news/?id=0bemba6j)

[@Parsifal](https://github.com/ParsifalC)：TestFlight 正式支持 macOS 应用 分发了，规则总体与 iOS 版 TestFlight 差不多，总共 10000 个测试名额，支持分组等功能。另外，由于 Mac Catalyst 的存在，在 macOS 的 TestFlight 上体验 iOS App 的或许也会是一项新的分发尝试方向。

## 新手推荐

### 🌟 🐕 [GitHub - twostraws/Unwrap: Learn Swift interactively on your iPhone.](https://github.com/twostraws/Unwrap)

[@Barney](https://github.com/BarneyZhaoooo)：Unwrap 是一款开源的 Swift 应用程序，可以通过 100 节核心课程，或是运行代码进行实践，来更高效快速的学习 Swift。

### 🐕 [Xcode 中代码注释编写小技巧](https://juejin.cn/post/7020590213361565726)

[@老峰](https://github.com/gesantung)：写好注释是每一个程序员的一个基本素养，本文介绍了使用 Xcode 为 Objective-C&Swift 代码添加以及修改注释的小技巧。

## 文章

###  [Flutter 图片库高燃新登场](https://mp.weixin.qq.com/s/TdTGK21S-Yd3aD-yZDoYyQ)

[@邦Ben](https://weibo.com/linwenbang)：看这篇之前可以先看下[闲鱼Flutter图片框架架构演进（超详细）](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247485142&idx=1&sn=b416f1d0c8f3fd2077075441154df090&scene=21#wechat_redirect)，了解一下闲鱼之前对图片的一些优化，逐步递进更容易理解，闲鱼在基于原有的外接纹理优化的前提，继续尝试了 dart:ffi 的方式进行优化（dart:ffi 提供了同步调用 native c++ 层的能力，因为是直接调用，因此性能高于常规的 channel 调用），闲鱼通过外接纹理和 ffi 组合使用的方式，进一步优化了：

- 支持加载 ui.image，特殊场景可以使用
- 支持预加载
- 新增纹理缓存，统一图片缓存
- 支持模拟器
- 完善自定义图片类型通道
- 完善的异常捕获与收集
- 支持动图

结论：
- Texture 适用于日常场景，优先选择；
- FFI 更适用于：
    - flutter <= 1.23.0-18.1.pre 版本中，在模拟器上显示图片
    - 获取 ui.Image 图片数据
    - flutter 侧解码，解码前的数据拷贝影响较小

关于开源：
目前还没开源，文中说计划12月底开源，可以期待一下

参考链接：
- [dart:ffi 官方文档](https://dart.dev/guides/libraries/c-interop)


### 🐎 [工程实践 | 在 Flutter 中实现一个精准的滑动埋点](https://mp.weixin.qq.com/s/Q0HLJdqeRcYg6GKQQWq4CQ)

[@Damien](https://github.com/ZengyiMa)：埋点，为了对行为特征的数据进行量化分析、优化产品，我们常常需要在特定的时机上报数据埋点，而滑动埋点曝光埋点则是其中的一个高频使用场景。本文将会提供在 Flutter 中如何实现自动滑动曝光埋点实现思路，对此领域感兴趣的同学可以详细阅读此文章。

### 🐕 [Introducing Swift Distributed Actors](https://www.swift.org/blog/distributed-actors/)

[@xiaofei86](https://github.com/xiaofei86)：Actor 模型是一种适用性非常好的通用并发编程模型。它不仅可以应用于共享内存架构，更适合应用于分布式内存架构，解决地理分布型的问题。如今，Swift on Server 生态也迎来了 [Swift Distributed Actors](https://github.com/apple/swift-distributed-actors/)，一个面向服务器的完整集群库，用于即将推出的 Distributed Actors 语言功能。

Distributed Actors 是 Swift 并发模型演变的下一步，本文除了介绍这项新特性外，也通过 [SwiftNIO](https://github.com/apple/swift-nio)、[Swift Service Discovery](https://swift.org/blog/swift-service-discovery/)、[Swift Cluster Membership](https://swift.org/blog/swift-cluster-membership/) 等 Swift 生态搭建具备服务通信、服务发现等功能的服务集群 Demo 做功能演示。感兴趣的同学可以阅读原文持续关注。

### 🐕 [Flutter PlatformView 在闲鱼直播业务中的实践](https://mp.weixin.qq.com/s/u-nYmDm6doIMBoh8cTDzlQ)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：咸鱼直播的场景是 Flutter 套全屏的 Native 组件（通过全屏的 PlatformView ），特点是处于页面最上层且背景透明。需要解决“点击透明区域的时候让下层响应，点击非透明区域时 PlatformView 自己响应”的问题。

文章首先介绍了 PlatformView 的实现原理，即：通过 DelayingGestureRecognizer 延迟其他手势的响应，并将消息处理转发至 Flutter，遵循 Flutter 内部的优先级处理机制；如果应该由 PlatformView 响应，则由 ForwardingGestureRecognizer 进行转发，走熟悉的 iOS 手势处理。

因此咸鱼直播选择：在点击非透明区域时，在禁用 PlatformView 的两个手势，走 Native 手势处理；点击透明区域时，恢复 PlatformView 的两个手势，走 Flutter 内部处理。由此解决了全屏 PlatformView 的交互问题，有较大的借鉴意义。

同时，即使实际开发中不会选择这么使用 PlatformView，对 PlatformView 的源码剖析也很值得一读。

## 摸鱼周报

[@摸鱼周报 #32](https://mp.weixin.qq.com/s/6CyL0B6Zkf6KXRrfocohoQ)：第三十二期摸鱼周报来啦，一起看下本期内容概要：

* 话题：Mac 版 TestFlight 已经上线。
* Tips：介绍了关于中间层的一些概念，前后端之间的现状以及需要解决的问题等。
* 面试模块：能否向编译后的类增加实例变量？能否向运行时动态创建的类增加实例变量？为什么？
* 博客主题：Swift 关键字。
* 学习资料：来自字节跳动的 OKR 学习网站；一个关于 SwiftUI 的 Cheat Sheet —— Fucking SwiftUI。
* 开发工具：一个允许你在 App Store 上搜索 iOS 应用程序并下载应用程序包的命令行工具 —— ipatool。

## 工具

###  [PillowTalk - iOS/Lite](https://github.com/Co2333/mobilePillowTalkLite)

[@极速男孩](https://github.com/ztlyyznf001)：一个使用 SwiftUI 编写的在 iOS 上对 linux 中的 RPC 服务进行监控的工具。

## 音视频

### 🐢 [5G，华为，土耳其——我花了两个月，搞懂了5G背后的秘密](https://www.bilibili.com/video/BV1fq4y1g7hq)

[@zvving](https://github.com/zvving)：5G 技术中的极化码是一个非常复杂的通信概念，UP 主作为一个『通信小白』，暴肝三个月，梳理信息论、信道容量、香农极限诸多知识，在此基础上介绍极化码及其背后的故事。视频是在讲解 5G 技术，更是表述刨根问底、用平和心态长期坚持的科研精神，分享给每一位有好奇心的朋友们。

## 赞助者

虚位以待..

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