# 老司机 iOS 周报 #134 | 2020-11-02

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

## 新闻

### [苹果全新订阅服务通知现已在分发环境中使用](https://developer.apple.com/news/?id=an960mux)

[@Parsifal](https://github.com/ParsifalC)：苹果向开发者宣布，现已可在分发环境中使用新的订阅服务通知。苹果提供了用户订阅状态的实时更新通知，方便开发者更快了解自己服务的订阅情况。

## 新手推荐

### 🐎 [Deep Dive Into The Pubspec.yaml File](https://medium.com/flutter-community/deep-dive-into-the-pubspec-yaml-file-fb56ac8683b9)

[@邦Ben](https://weibo.com/linwenbang)：该文是 flutter pubspec.yaml 文件配置的详细介绍，如果刚接触的同学，可以进行了解一下各个配置项的作用。

## 文章

### 🌟 🐢 [Swift 发布并发功能的开发路线图](https://forums.swift.org/t/swift-concurrency-roadmap/41611)

[@四娘](https://kemchenj.github.io/)：并发功能在 Swift 社区一直呼声很高。终于，上周五开发组在论坛发布了开发路线图，其中的内容包括：

- [async/await](https://forums.swift.org/t/concurrency-asynchronous-functions/41619)
- [Task API 和 Structured Concurrency](https://forums.swift.org/t/concurrency-structured-concurrency/41622)
- [Actor & Actor Isolation](https://forums.swift.org/t/concurrency-actors-actor-isolation/41613)
- [Concurrency Interoperability with Objective-C](https://forums.swift.org/t/concurrency-interoperability-with-objective-c/41616)
- Async handlers

目前这些功能已经完成了初步设计，正在紧锣密鼓地进行实现，并且也在论坛里将草案发了出来，感兴趣的同学可以点击上面的链接查看并参与讨论。

另外值得一提的是开发组打算为此优化 Objective-C 的桥接，**OC 里基于回调的 API 在导入到 Swift 时会自动合成 async 版本，并且 async/await 支持向后部署**，开发组也在 GitHub 上[提供了 API 预览](https://github.com/DougGregor/swift-concurrency-objc/pull/1/files)。

### 🌟 🐢 [抖音品质建设 - iOS启动优化《原理篇》](https://mp.weixin.qq.com/s/3-Sbqe9gxdV6eI1f435BDg)

[@Leo](https://github.com/leomobiledeveloper)：抖音品质建设系列文章，不仅详细介绍了 iOS 13后的 dyld3 启动流程，还从编译期到运行时深度解读了影响启动速度的每一步，包含了很多抖音基础体验团队的深入研究沉淀，是一篇值得仔细阅读的文章。

### 🌟 🐎 [网易云音乐 iOS 14 小组件实战手册](https://mp.weixin.qq.com/s/gFd8fkJBkQd5RpFSD0P8Ig)

[@Damien](https://github.com/ZengyiMa)：苹果在今年的 WWDC20 上发布了小组件（WidgetKit），支持在 iOS、iPadOS 主屏幕展示动态信息和个性化内容，这极大增强了主屏幕上的交户内容，对 App 而言也带来了新的流量入口，本文展示了网易云音乐团队在开发适配 iOS 14 小组件上的工作细节，内容包括和主 App 数据通信、SwiftUI 页面编写、网络数据请求、Widget 数据刷新、点击跳转等等，对于正在开发和适配 Widget 的同学有很大的学习价值。

### 🌟 🐢 [他把闲鱼APP长列表流畅度翻了倍](https://mp.weixin.qq.com/s/dlOQ3Hw_U3CFQM91vcTGWQ)

[@JonyFang](https://github.com/JonyFang)：业务快速迭代过程中，App 长列表滑动流程度逐渐恶化，对用户浏览内容体验产生伤害。闲鱼 App 以 Flutter 和原生 Native 的混合工程存在，本篇分享了 Android 原生、Flutter 页面和优化思路。基于主流优化方案之上，闲鱼也做了一些不一样的优化。如基于用户体验为导向构建了流畅度指标；针对指标，自建流畅度检测工具，支持无侵入、跨平台、自动化；Android 显示 ViewDataUnbinder 组件在复杂业务逻辑中快速抽离 UI 操作；Flutter 修改 Flutter Engine 源码以支持列表 Element 的复用；Flutter 实现大 Widget 分帧上屏组件；Flutter 差值器算法优化。在我们自己项目的优化过程中，思路可以拿来作为参考。

### 🐎 [如何知道一个锁到底被哪个线程占用？](https://mp.weixin.qq.com/s/EUxx23NBsaPX2KG6HVG-cQ)

[@AidenRao](https://weibo.com/AidenRao)：在多线程环境下调试或定位问题时，有时我们会发现某重要线程被卡住在等待某个锁上，但具体是哪个线程或哪段代码拿了锁又无法一下看出来。几种常用的锁，其实都记录了 owner 信息，例如 pthread_mutex_t 结构体里有一个 \__data.\__owner 字段，通过简单的取偏移办法，就能在运行时定位到锁当前的 owner 线程。

### 🐎 [arm64e 架构简介——指针验签 ](https://mp.weixin.qq.com/s/a5e0T51kH9NIVKJpRyg4hQ)

[@SatanWoo](https://satanwoo.github.io)：arm64e 中一个很重要的特性就是 Pointer Authentication。通过对一些涉及指令跳转相关地址进行加签校验，可以有效的避免常见的返回值攻击等。不过本文的写的不是非常的具体，建议读者朋友自行搜索相关的资料进行深入了解。

### 🐕 [Useful (and Obscure) Foundation Types in Swift](https://medium.com/better-programming/useful-and-obscure-foundation-types-in-swift-4f2b2c42354e)

[@EyreFree](https://github.com/EyreFree)：苹果的 Foundation 库为开发者提供了很多 iOS 日常开发必需的东西，其中有一些数据类型大家平时用的比较少，但是了解它们可以帮助我们编写很多不必要的代码，比如本文介绍的 NSScanner、NSCountedSet、NSCache、NSOrderedSet、NSByteCountFormatter、NSDataDetector、CFBinaryHeap。

### 🐎 [客户端开发基础知识——写文件避“坑”指南](https://juejin.im/post/6885630755805626375)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：尽管写文件在客户端开发过程中是非常常见的操作，但是依然会时不时的遇到一些奇怪的问题。诸如读写文件不一致、写入过程内容丢失等。本文会对文件读写相关的几个 API 和其内部机制进行详细讲解，并对常见的几个问题一一解答。

### 🐕 [Keeping expansion state of OutlineDisclosures using NSDiffableDataSource SectionSnapshot on UICollectionView DiffableDatasource](https://crsantos.info/uicollectionviewdiffabledatasource-outline/)

[@老峰](https://github.com/Gesantung)：去年 Apple 给 UICollectionView 引入 Diffable Data source API，通过 Snapshots 可以高效更新 UI。 本文作者分享了在使用 UICollectionViewDiffableDatasource 实现展开收起效果过程中遇到刷新数据自动收起的问题，以及通过使用 SectionSnapshotHandler(available since iOS 14) 来处理的方案，有类似需求的同学可以参考。

## 工具

### [7 Essential iOS Developer Tools](https://medium.com/better-programming/7-essential-ios-developer-tools-6bbc8ce53675)

[@Parsifal](https://github.com/ParsifalC)：无论你是刚入门的小萌新还是有经验的老司机，这 7 款工具都能够帮助你提效。

- Swift Package Index：Swift 库的检索网站，已收录超过 3000 多个库，其对库的版本兼容等信息展示形式很清晰直观。
- Image Optim：图片压缩工具，可以有效帮助你进行 App 图片资源瘦身，另外周报曾经推荐过的 [Crunch](https://github.com/chrissimpkins/Crunch) 也很不错。
- SF Symbols：苹果官方维护的 SF Symbols 集
- Dribbble：在设计师群体中很受欢迎的一个展示自己作品的网站，如果想找一些非常酷炫的交互效果，这里是一个不错的选择
- Make App Icon：为你自动生成所有尺寸大小的 App Icon，如果你还没有 App Icon 又想自己设计一个，这里十分推荐周报编辑 [Joseph](https://github.com/josephchang10) 开发的 [图标设计器](https://apps.apple.com/cn/app/%E5%9B%BE%E6%A0%87%E8%AE%BE%E8%AE%A1%E5%99%A8-app-icon-maker/id1391581924)。
- ShotBot 3.0：App 市场图生成工具，拥有许多免费的模板和设备比例支持
- TermsFeed：各类协议生成器，App 审核必备。不过看情况很多项是需要付费的。

## 赞助者

[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS 开发辅助工具，提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能，在工作中能极大提升开发效率，Mac App Store免费下载！

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

## 内推

> 飞书业务的团队成员来自全球互联网顶尖企业，目前在北京、武汉、上海、杭州、深圳、广州和美国旧金山等均设有团队分支。高于行业平均水平的薪金待遇，六险一金、弹性工作、租 房补贴、免费三餐，你值得拥有！
> 简历发送至 hi@inico.me

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