# 老司机 iOS 周报 #153 | 2021-03-29

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

## 文章

### 🌟 🐢 [IGListKit 源码解析系列 5 篇](https://dirtmelon.github.io/posts/iglistkit-first/)

[@JonyFang](https://github.com/JonyFang)：IGListKit 源码解析系列，共分为 5 篇。依次简介下每篇的概要内容：

1. IGListKit - 开篇
	- 对比简介 UICollectionView/UITableView;
	- 引出 IGListKit 的主要特征;
2. IGListKit 的基石 - IGListSectionController
	- 介绍 `IGListSectionController` 是如何和数据层进行绑定的;
	- 介绍 IGListKit 是如何通过 `IGListSectionController` 来进行扩展以支持多种特性;
3. IGListKit 的管理者 - IGListAdapter
	- `IGListAdapter` 作为 IGListKit 的适配器，对外提供相关的刷新接口及一些通用方法，对内负责管理 `IGListSectionController` 和 `UICollectionView`;
4. IGListKit 的数据处理 - Updater & Diff
	- 介绍 `IGListAdapterUpdater` 提供的批量&全部刷新机制的原理;
	- 描述 `IGListDiff` 的核心实现;
5. IGListKit - 完结篇
	- 介绍 `IGListCollectionViewLayout` 的实现;
	- 总结了 IGListKit 的开发历程，及库作者的一些经验总结;

### 🌟 🐕 [Flutter 2.0 下混合开发浅析](https://mp.weixin.qq.com/s/cX-PZZ1FqQm582JwVNm8Zg)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Flutter 的混合开发大多借助 flutter_boost 等三方库来完成， Flutter 2.0 给了我们更多的选择: FlutterEngineGroup。本文详细讲解了 FlutterEngineGroup 下的混合开发，强烈推荐。

### 🐕 [Flutter Web 在美团外卖的实践](https://mp.weixin.qq.com/s/GjFC5_85pIk9EbKPJXZsXg)

[@极速男孩](https://github.com/ztlyyznf001)：Google 现在已经将 Flutter Web 合入了 master 和 stable 分支，并在 Flutter 2.0 做了进一步优化。本文主要介绍了美团外卖在 Flutter Web 的探索，在 Flutter Web 基建和 Flutter Web 中的性能优化 , CI/CD 的方面的尝试。

### 🐎 [全局开启 iOS / mac 的 WebView 调试](https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w)

[@AidenRao](https://weibo.com/AidenRao)：Safari 有一个内置的前端调试器，可以调试 MobileSafari 和 Xcode 编译运行的 APP。通过 hook webinspectord 服务的 SecTaskCopyValueForEntitlement 函数，使我们可以在 mac 和 iOS 上，调试系统内置的 App 或者 App Store 下载的应用里的 WebView。对于分析客户端的 XSS、JavaScript bridge 相关的安全漏洞非常实用。

### 🐢 [如何编写高性能的 Swift 代码](https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst)

[@四娘](https://kemchenj.github.io)：Swift 官方仓库里的一份性能优化指南，从编译器层面讲述如何编写高性能的代码，让我们了解什么样的代码可以让编译器更好地进行优化，什么样的代码会在 Swift 里产生额外的性能消耗，在哪些情况下我们可以通过改写这些代码来减少这些消耗。

### 🚧 🐕 [Frameworks: embed or not embed that's the question](https://holyswift.app/frameworks-embed-or-not-embed-thats-the-question)

[@红纸](https://github.com/nianran)：在工程中配置 Framework 时，经常能够看到一个选项 Embed or not。本文作者将静态库和动态库配合这两种选项，4 种实验结果分别做了对比如下。

- 动态库 + Embed：动态库将在运行时链接，并且会有独立的 Framework 文件夹，独立于 App 的二进制文件
- 动态库 + Not Embed：App 会崩溃
- 静态库 + Embed：代码将在编译时进行链接，会有独立的 Framework 文件夹
- 静态库 + Not Embed：代码将在编译时进行链接，所有代码将会包含在 App 的二进制文件当中

此外，文末有一个 4 种集成方式包大小差异的简单对比，感兴趣的读者可以阅读一番。

### 🐎 [对于移动开发，人工智能的到来意味着什么？](https://mp.weixin.qq.com/s/Nt16lD-0KCpeC5ZEwxziQw)

[@莲叔](https://github.com/aaaron7)：端智能或许已经并不是移动开发领域的一个新鲜话题，各个公司和业务都开始逐步尝试并取得了一定的效果。如果你是一位对人工智能有兴趣但之前完全没有了解的移动开发，这篇文章可以指引你快速了解一个大概的全貌。文章首先从比较符合直觉的视角介绍了人工智能是什么，解决了什么问题，另外还给出了在移动开发目前的主流应用，是一份不错的入门介绍。

### 🐎 [iOS 基于 PGO 优化启动时间](https://juejin.cn/post/6942365945990447111)

[@Leo](https://github.com/leomobiledeveloper)：冷启动时候 Page In 会占据相当一部分耗时，Profile Guided Optimization (PGO)是一种简单易用的可以优化 Page In 数量，进而提高启动速度的技术，本文介绍了如何使用 PGO ，推荐阅读。

### 🐕 [SwiftUI 中的 Text 插值和本地化](https://onevcat.com/2021/03/swiftui-text-1/)
[@zvving](https://github.com/zvving)：SwiftUI 致力于提供简洁灵活的视图描述方式。拿最『简单』的例子`Text("I am \(someUser.name)")` 来说，你是否好奇：为 Text 设定内容的同时，如何支持本地化，以及各种更复杂的业务场景？
喵神也有同样的疑问，并带来抽丝剥茧两篇文章：详细拆解 SwiftUI 中本地化&文本差值的实现方式。不妨细读，帮助你写出知其所以然的 Swift 代码。
## 代码

### [isowords](https://github.com/pointfreeco/isowords)

[@老峰](https://github.com/gesantung)：isowords 是一款英语单词字谜游戏，作者客户端采用 SwiftUI、SceneKit 实现了模块化架构，服务端也以 SwiftNIO 实现，并且全部开源。对 SwiftUI、SceneKit、Swift for Server 感兴趣的同学欢迎学习参考。

## 书

### 🌟 [iOS Crash Dump Analysis, Second Edition](https://github.com/faisalmemon/ios-crash-dump-analysis-book)

[@Parsifal](https://github.com/ParsifalC)：这是一本对于理解 iOS Crash 机制非常有帮助的书，中英文版本均有。从什么是崩溃、崩溃如何发生、各种崩溃类型、可采用的工具、崩溃日志解读等等非常系统地为我们阐述了崩溃分析，填补了当崩溃发生时应用程序开发人员与开发平台之间出现的空白。本书讨论了涵盖 iOS、macOS、watchOS 以及 tvOS 等苹果主流软件系统，也包括了 OC 和 Swift 等主流开发语言。非常推荐反复阅读。

## 赞助者

虚位以待..

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