# 老司机 iOS 周报 #170 | 2021-08-09

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

**周报编辑组又来新人啦~欢迎黄骋志加入周报组织。骋志是我们这次杭州场线下沙龙的分享嘉宾，完成了 IAP 在西瓜视频上的落地，同时对跨端技术（Flutter & RN）均比较熟悉。希望骋志的加入也能为大家带来更多元化的内容输出！**

### 🌟 线下沙龙

[@Parsifal](https://github.com/ParsifalC)：我们正在周报公众号上陆续发布今年杭州场和上海场沙龙的分享文章、PPT 和视频等内容，欢迎大家继续关注（公众号回复**杭州**即可获取杭州场文章和视频）~

- [Flutter 混编工程的模块化架构设计实践 - Jackie](https://mp.weixin.qq.com/s/A2gYRPJ0u8TVXZyMtEArlA)
- [抖音创作工具防劣化实践 - Crespo](https://mp.weixin.qq.com/s/_c3y9KnbKS6VnqTb0AKRWg)
- [Async and Await in Swift 5.5 - 彭玉堂](https://mp.weixin.qq.com/s/DopuYyy479eSjgns3iaWaw)

### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21)

[@Parsifal](https://github.com/ParsifalC)：本周内参更新，6 篇高质量内容已经发布~

- @Sinno：[【WWDC21 10278】Core Haptics 初体验](https://xiaozhuanlan.com/topic/0382695741)
- @sunset：[【WWDC21 10267】一窥 Xcode Cloud](https://xiaozhuanlan.com/topic/2946158037)
- @土土Edmond木：[【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩](https://xiaozhuanlan.com/topic/4392718605) & [【WWDC21 10210】探索 Xcode 项目中构建配置的高级技巧](https://xiaozhuanlan.com/topic/3518046279)
- @Sean：[【WWDC21 10202】Detect bug early using static analyzer](https://xiaozhuanlan.com/topic/7125309684)
- @冬瓜：[【WWDC21 10253】使用 Swift 特性 Result Builder 定制 DSL](https://xiaozhuanlan.com/topic/9042736581)

## 新闻

### 🌟 [重要！与苹果工程师一对一咨询的机会~](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491606&idx=1&sn=15026f240a4597922aff0e2786473dfd&chksm=eaa17f1dddd6f60b43344e46cbc04cc8bc1d9c9c7f6c6e924abf5519b0670cee345367132f57&token=2123226571&lang=zh_CN#rd)

[@Parsifal](https://github.com/ParsifalC)：苹果官方的一对一咨询活动来啦！2021 年 8 月 17 日（周二）举办主题为 “Core ML 和 Create ML 的最新进展及更多”的在线研讨会。本次面向周报读者免费公开报名，扫码即可参与。苹果工程师一对一 30 分钟的咨询介绍，名额有限，报满即止。

![](https://user-images.githubusercontent.com/7930911/128632650-6ff4f45d-ae6f-405a-b361-aa1928c833a5.png)

## 新手推荐

### 🐎 [Flutter (able) 的单例模式 | Flutter 设计模式](https://mp.weixin.qq.com/s/hRvmbRcJlOj5iB1HqvUkog)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：单例模式，可以被称得上是诟病最多的设计模式了，objccn 中也有一篇[避免滥用单例](https://objccn.io/issue-13-2/)。但这并不是单例模式的错，而是使用单例的方式错误导致的。

本文给大家展示了利用 工厂构造函数 + 空安全语法 + 箭头函数 写出符合 Dart 特性的单例代码，可以做个参考。**真的还是少用**。然后引出了 InheritedWidget，相对于一般的单例，这是前端中比较通用的状态同步方案，如果衡量下需要一个全局统一的数据仓库，那就在 InheritedWidget / Redux / Angular 中挑一个吧。若不清楚 InheritedWidget 可以配合下方链接了解。

> [《Flutter 实战》 数据共享（InheritedWidget）](https://book.flutterchina.club/chapter7/inherited_widget.html)

## 文章

### 🌟 🐕 [脉脉 iOS 如何启动秒开 - 知乎](https://zhuanlan.zhihu.com/p/396550853)

[@Barney](https://github.com/BarneyZhaoooo)：本文是脉脉技术团队对启动优化的实践总结，从理论到实践相结合，适合从零了解启动优化。

关键点：
- App 是如何启动的
- 衡量 App 启动时间
- 核心方法分析
- 制定 App 启动优化方案
- 验证 脉脉 App 启动优化效果

### 🌟 🐕 [拿去吧你！Flutter 仿自如 App 裸眼 3D 效果](https://juejin.cn/post/6991409083765129229)

[@邦Ben](https://weibo.com/linwenbang)：该文模仿自如团队在 Flutter 上利用 Accelerometer (加速度传感器)、Gyroscope (陀螺仪)实现了视差形成的裸眼 3D 效果，看演示 Demo 效果不错，文章写的原理分析不错，也可以看一下自如团队 Android 端实现。

> [自如客 APP 裸眼 3D 效果的实现](https://juejin.cn/post/6989227733410644005)

### 🌟 🐕 [快手海外 Swift/ObjC 混编与二进制化工程实践](https://mp.weixin.qq.com/s/d-atu1J_gqd3-rM0UXAqbA)

[@JonyFang](https://github.com/JonyFang)：本篇主要记录了快手团队在 Swift/OC 二进制化混编实践过程中碰到的诸多问题及解决方法，最终的结果是：有效提高了编译效率。

整体的目录结构如下：

1. Swift/ObjC 混编背景介绍
2. 单 Target 混编
	- bridging header
3. 多 Target 混编
	- OC 组件 Clang module 化
	- 处理难以 Module 化的 Pod 组件
	- Swift 组件的二进制兼容
	- 二进制化混编
4. 实践中遇到的问题
	- Framework search path 与 Header search path 的冲突问题
	- Module 中使用宏的问题
	- FakeFramework 解决依赖关系与编译顺序的问题
5. 展望未来
	- 基础库规范适配处理
	- 规范公开头文件
	- 提高 Module 化组件占比

### 🌟 🐕  [浅析快手 iOS 启动优化方式——动态库懒加载](https://mp.weixin.qq.com/s/gNc3uK5ILbXsO8jB1O-jnQ)

[@Leo](https://github.com/leomobiledeveloper)：App 的启动速度与用户体验息息相关，启动速度越快，用户的留存率往往也会越高。对于 iOS 应用来说，其启动主要分为 main() 方法之前 (也称为 premain ) 和 main() 方法之后两个阶段。本文将要介绍的优化方式是动态库懒加载，即主要针对 premain 阶段进行优化。文中会重点介绍在动态库懒加载和启动代码动改静的实践过程中遇到的一些问题及处理方式。

### 🐎 [StaticString, and how it works internally in Swift](https://swiftrocks.com/staticstring-in-swift)

[@Smallfly](https://github.com/iostalks)：字符串是开发中比较常用的类型，Swift `String` 作为结构体，运行时在栈内创建字符串实例。对于不可变的字符串，频繁使用 `String` 类型，对栈内存和 CPU 来说是一种浪费。Swift `StaticString` 类型在 `String` 的基础上进行了优化，实现了字符串引用，本文简单的介绍了它在编译器层的实现原理。

## 摸鱼周报

[@摸鱼周报 #21](https://mp.weixin.qq.com/s/Hcd8CtkyqD8IXM0SbVJo-A)：第二十一期摸鱼周报来了，一起来看下本期概要：

* 本期话题源于看到的一个讲解身体机制的视频，人在危重的时候身体会有哪些反应。
* 关于 `UserDefaults` 的一些用法。
* 面试解析本期讲解 load 和 initialize 的一些知识点。
* 内存方面的优化，通常分为两个步骤：问题定位，利用 Instruments 中的 Leak，Allocation 进行分析。问题解决，解决特定内存问题或使用 mmap 方案进行优化。大家也可以带着问题去阅读相关文章。
* Open Source Society University：非常受欢迎的计算机科学自学教程，Swift Programming for macOS：用 Swift 开发 Mac 应用的一些示例介绍。
* Messier：一个 Objective-C 方法耗时监控的方案。


## 工具

### [cocoapods-TSPodfileTimeWatch](https://github.com/cxr0715/cocoapods-TSPodfileTimeWatch)

[@红纸](https://github.com/nianran)：这是一款开箱即用的 Cocoapods 插件，插件用于提供了 Cocoapods 中几项重要的耗时/磁盘占用指标（仓库下载耗时、仓库文件大小、Cache 文件大小、解压耗时、Git 版本差值），作者也很贴心的输出了 csv 格式文件。当小伙伴们需要 Cocoapods 相关的量化数据指标，做一些耗时跟磁盘相关优化的话，推荐可以使用此工具。

> 自荐：[Ke哀](https://github.com/cxr0715)，目前就于职手机 QQ，从事手 Q 基础开发

## 赞助者

虚位以待..

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