# 老司机 iOS 周报 #132 | 2020-10-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) 提出。

## WWDC20

本周在周报公众号上我们推送了 5 篇 WWDC20 内参专栏内的文章，每篇都很精彩！

- [iOS 性能优化：使用 MetricKit 2.0 收集数据](https://mp.weixin.qq.com/s/cbP0QlxVlr5oeTrf6yYfFw)
- [iOS 持续集成：更完备的 App Store Connect API](https://mp.weixin.qq.com/s/KnryMnySoOXvf8K7kQVwmA)
- [iOS 性能优化：优化 App 启动速度](https://mp.weixin.qq.com/s/h3vB_zEJBAHCfGmD5EkMcw)
- [Universal Links 新变化：让触达更广更快](https://mp.weixin.qq.com/s/mnZDKVk_0B60PnX_nSzFpA)
- [HealthKit 的新增功能](https://mp.weixin.qq.com/s/sa0yWgawgfHco9_7dQ5wyg)

## 新手推荐

### 🐕 [Overriding UserDefaults for improved productivity](https://www.avanderlee.com/xcode/overriding-userdefaults-launch-arguments/)

[@AidenRao](https://weibo.com/AidenRao)：应用内的 UserDefaults 是一个易于访问的数据存储，用于保存状态，统计信息和其他与应用程序相关的数据。我们可以通过配置启动参数覆盖 UserDefaults，无需修改代码，更改 UserDefaults 默认值，提高开发效率。

### 🐕 🚧 [Setting default values for NSUserDefaults](https://sarunw.com/posts/setting-default-value-for-nsuserdefaults/)

[@红纸](https://github.com/nianran)：接上篇 UserDefaults 描述，我们可以通过 `register(defaults:)` 函数进行设置相关 key 的初始值，register 的设置仅会在 key 对应的 value 为 nil 的情况下才会进行设置，值得注意的是 register 并不会写入磁盘，仅仅只是运行时赋予了初始值。

### 🐎 [UIButton 状态新解](https://mp.weixin.qq.com/s/nD-HV-gkKJr1MWU_agwkyg)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：UIButton 作为日常开发的常用控件，系统为我们提供了相当丰富的功能以及可定制性。本文从单一状态，到组合状态，到自定义状态层层深入了介绍了 UIButton 的状态在日常开发中的应用。只用状态来驱动 UI 一直是程序员开发中的美好设想，本文算是从一个基本控件上给出了实现参考。

### 🐎 [Flutter 组件的事件传递与数据控制 | 开发者说·DTalk](https://mp.weixin.qq.com/s/mO2lT_s1s5a94KeirPpeVg)

[@邦Ben](https://weibo.com/linwenbang/)：Flutter 开发始终绕不过状态管理，这篇文章使用最基础的代码讲解了一下如何合理的进行传递数据和事件。非常适合入手的时候看下。

文章也简单总结了：

- 改变自己 state 的数据，setState 向 child 传递新数据
- 接受 child 的事件回调
- 向 child 更新目标数据，child 监听数据的变化，更加细节的改变自己的 state
- 向 child 传递 controller，全面控制 child 的 state


### 🐕 [Debugging on iOS 14 with Xcode 11](https://hybridcattt.com/blog/debugging-on-ios14-with-xcode-11/)

[@J_Knight_](https://github.com/knightsj)：文章分享了能让 iOS 14 在旧版本的 Xcode 上运行的方法，以及将调试器附加到正在运行的应用程序的方法。另外也结合了代码和截图分享了在没有添加调试器的情况下查看变量的方法。

## 文章

### 🌟 🐕 [iOS main in Assembly](https://suelan.github.io/2020/08/18/20200817-ios-main-in-assembly/)

[@五子棋](https://satanwoo.github.io)：首先这是一篇全英文的博客，这就很棒啦。其次作者通过分析 iOS 中的 main 函数，来逐步深入其本质是如何实现的。在剖析过程中穿插了一些基本的汇编知识，是一篇比较好的入门实践文章。

### 🌟 🐕 [Crash Reporting with MetricKit](https://www.chimehq.com/blog/metrickit-crash-reporting)， [Crash Reporting with MetricKit, Part 2](https://www.chimehq.com/blog/metrickit-crash-reporting-part-2)， [iOS 性能优化：使用 MetricKit 2.0 收集数据](https://mp.weixin.qq.com/s/cbP0QlxVlr5oeTrf6yYfFw)

[@老驴](https://www.weibo.com/6090610445)：三篇关于 MetricKit 的文章，让你一次读懂 MetricKit。今年 WWDC 上，苹果把去年引入的 MetricKit 升级到了 2.0，主要新增了三种指标：CPU 指令、滚动卡顿和应用程序退出。MetricKit 作为苹果官方支持的 Metrics 工具链，也在不断的迭代完善中，相信未来，一定会在 iOS 中，有更重要的地位。

### 🌟 🐕 [初探 Objective-C/C++ 异常处理实现机制](https://mp.weixin.qq.com/s/4Rcaee6kwWmrS3v_M9y0KQ)

[@Leo](https://github.com/leomobiledeveloper)：异常处理是语言的重要特性，Objective C 和 C++ 也不例外。日常开发中我们更多的会关注如何捕获和处理异常，很少会关注异常底层的实现原理。本文从 C++ 异常出发，从汇编和 llvm 源码的角度进行了探索和思考，介绍了 Objective C 和 C++ 的异常实现机制，除了内容上干货很多，分析的思路也值得借鉴。

### 🐕 [Podspec 文件分析](https://mp.weixin.qq.com/s/CBkO-UfiPTMY5drIX_ZhKQ)

[@JonyFang](https://github.com/JonyFang)：在前面期的 [Podfile 的解析逻辑](https://mp.weixin.qq.com/s?__biz=MzA5MTM1NTc2Ng==&mid=2458324199&idx=1&sn=3886bbbcef3640bf97e16fcec34b451f&chksm=870e03feb0798ae84ab4b5dab26dfbe8ebbac0bca8491493fa4919f6069bfef58cd04df5ab34&scene=21#wechat_redirect)中，作者以 Xcode 工程结构作为切入点介绍了 Podfile 背后对应的数据结构，剖析了 Podfile 文件是如何解析与加载，及最终如何进行工程构建。本篇介绍了 CocoaPods-Core 中的另一个重要文件 Podspec。

内容结构：

- PodSpec 配置及CoC规则
- 介绍 spec 核心数据结构
- spec from json
- spec from ruby
- 实践创建一个 pod

### 🐎 [Apple’s use of Swift and SwiftUI in iOS 14](https://blog.timac.org/2020/0927-state-of-swift-ios14/)

[@邦Ben](https://weibo.com/linwenbang/)：这篇文章主要是分析了 iOS 14.0 系统中使用有多少内置程序在使用 `Swift`（注意：只要用到一行 Swift 也会被计算）。

iOS 13.1: `Swift` 141 个， `SwiftUI` 5 个。
iOS 14.0: `Swift` 291 个， `SwiftUI` 43 个。

由此可见，Apple 内部推进 Swift 逐年增大，期望 Swift 的进一步发展。

### 🐕 [从渲染原理出发探究 Flutter 内存泄漏](https://mp.weixin.qq.com/s/wPxXUv58sM9Fu3WOmP4JPA)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): 内存的高低是评判一款app的性能优劣的重要的指标之一。如何更简单的帮助开发者分析、暴露且解决内存泄漏问题，几乎是每一个平台或框架、开发者亟需的一个的"标配"的feature。本文由闲鱼团队分享，从渲染树的角度去探寻flutter内存泄漏的方法。

###  🚧 🐕 [How iOS Apps Adapt to the various iPhone 12 Screen Sizes](https://hacknicity.medium.com/how-ios-apps-adapt-to-the-various-iphone-12-screen-sizes-e45c021e1b8b)

[@水水](https://www.xuyanlan.com): 在 2020 年 10 月的发布会上，苹果发布了四款 iPhone 12 机型：iPhone 12 mini、iPhone 12、iPhone 12 pro 和 iPhone 12 pro max。iPhone 12 和 12 pro 的屏幕分辨率完全相同，行为也完全相同。所以只有三个屏幕分辨率要考虑，作者列举了这几个机型以及之前的一些机型的标准缩放和显示缩放, 希望对你的机型适配有所帮助。

### 🐕 [Swift deinit is (sometimes) not called for throwing or failable initializers](https://www.jessesquires.com/blog/2020/10/08/swift-deinit-is-not-called-for-failable-initializers/)

[@EyreFree](https://github.com/EyreFree)：当 `init?()` 失败返回 `nil` 或抛出异常时，`deinit` 并不会被调用。本文对 Swift 中这一关于 `init` 与 `deinit` 的边缘情况进行了介绍，并对这一设计的历史原因和设计初衷进行了讨论。

## 音视频

### 🐕 [“A huge year for SwiftUI” a WWDC20 special with Josh Shaffer and Eliza Block](https://www.swiftbysundell.com/podcast/76/)

[@老驴](https://www.weibo.com/6090610445)：今年苹果在 SwiftUI 上发力不少，iOS 14 当中像 Widget 这样的新功能只能用 SwiftUI 来实现，苹果想要通过这样的方式来推广 SwiftUI。这期，就有来自苹果的 Josh Shaffer 和 Eliza Block 来参与讨论 SwiftUI 今年的改动和 SwiftUI 的未来。

> @[alfredcc](https://github.com/alfredcc) 推荐

## 赞助者

[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): 是一款 iOS 开发调试辅助工具，提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能，在实际工作中能极大提升开发效率和幸福感！

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

## 内推

> 阿里巴巴淘系端智能团队招人，主要的工作是 MNN 业界知名推理引擎 / AR 美妆、渲染系统及框架设计 / AI 配套软件设施 / 服务端推荐系统。
> Android / 渲染 / CV 算法 / 服务端 都缺人。
> 坐标杭州北京，不 PUA，机会大，多劳多得，来就一起干，有意者加 V 号：satanwoo。

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