# 老司机 iOS 周报 #95 | 2019-12-16

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

## 新闻

### 🌟 🐢 [Flutter 1.12 重磅发布：支持 Web 与 macOS](https://mp.weixin.qq.com/s/-ZNHZWoNZj1P9dcAIRpbyg)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：随着 [Flutter Interact](https://mp.weixin.qq.com/s/EEIwryZaQh3uEv5vzTHZ5Q) 的落幕，Flutter 1.12 稳定版本如期而至，此次不仅完成了成吨的 issues 修复 (关闭了 5303 个 issue，合并了来自 484 个贡献者的 5950 个 PR)，而且带来诸多新功能和优化.

- 增加了对 Android App Bundles 和 iOS 13 的支持
- 改进后的 Add-to-App
- Dart 2.7 Release
- Flutter 1.12 的 master、dev 和 beta 频道都提供了改进的 Web 支持
- macOS 支持
- 新版 [DartPad](https://dartpad.dev/)
- [Hot UI](https://github.com/flutter/flutter-intellij/wiki/HotUI-Getting-Started-instructions)
- [Layout Explorer](https://flutter.dev/docs/development/tools/devtools/inspector#flutter-layout-explorer)
- 🌟多设备调试
- 还有更多新功能和社区插件等你探索...

### 🌟 App Store Connect 的部分功能将于 12 月 23 日 - 27 日暂停使用

一年一度的美国长假又来了，App Store Connect 已经正式向所有开发者推送节假日安排，时间段是 12.23-12.27。

> App Store Connect：请确保您的 App 为最新版本，以准备迎接假期。App Store Connect 在 12 月 23 日 - 27 日（太平洋时间）期间不接受新 App 和 App 更新，因此请提前处理任何与发布相关的计划、提交和审批事宜。其他 App Store Connect 功能将不受影响。

## 文章

### 🌟 🐕 [Lightweight API design in Swift](https://www.swiftbysundell.com/articles/lightweight-api-design-in-swift/)
[@zvving](https://github.com/zvving)：
> - 强大、灵活、易用？在 API 设计过程中你更在意哪一点？或者说，该如何把握这三者间的平衡？
> - 面对 Swift 诸多新特性，我们会困惑：都能实现功能，我为什么要知道这些特性？

本文尝试通过两个技术方案的设计变迁，回答上面的问题：（请留意每次设计变迁要解决的问题及其所带来的优劣）
1. 协议（强大功能与灵活性） -> 带参枚举（更加易用） -> Self 为返回类型的静态方法（摒除 enum 带来的弊端，更灵活易用）
2. 数组参数 -> 可变参数(更易用灵活) -> 提供 group 实现（向后兼容）-> 新场景（展示灵活性）

就像文中所说，我们的最初目标是让 API 更易用，而更易用也能带来更易组合、灵活性更高的副产品。

事实上， **在实践过程中，建议首要设计目标定义为（对使用者）易用，其次是（可预期的灵活性），最后才是功能强大。** 因为迫于问题领域的业务需要，功能强大是最容易并且一定会达成的目标。

以易用性为目标，要在两个方向上持续前进：一是在业务领域不断深入思考问题本质，定义简明扼要的抽象；二是在『API 设计的工具箱』中选用最合适的工具，在提供强大功能与可预期的灵活性的前提下（记住这是一定可达成的），尽可能提升易用性。

如果仅限于用类和协议抽象，设计时可用的手段将捉襟见肘。你手中『API 设计的工具箱』更丰富，就能有更多手段达成易用的目标。熟练掌握 Swift 语言特性，相信你能设计出更易用的 API。

### 🐎 [用故事说透 HTTPS](https://mp.weixin.qq.com/s/MfvUuitrF8MN16nxyZNB8A)

[@J_Knight_](https://github.com/knightsj)：本文作者通过漫画故事的方式介绍了 HTTP 的不安全性，并讲解了 HTTPS 的几个概念：对称加密、非对称加密，数字证书以及数字签名，而且模拟了中间人攻击的场景，生动形象，易于理解。对 HTTPS 不熟悉的朋友可以阅读此文帮助理解。


### 🐎 [The Advanced Guide to UserDefaults in Swift](https://www.vadimbulavin.com/advanced-guide-to-userdefaults-in-swift/)

[@老峰](https://GesanTung.github.io/)：本文主要介绍了 UserDefaults 的基础概念以及内部实现细节，如何使用 Swift5 中 Property Wrapper 和 UserDefaults 实现类型安全的键值存储；如何使用观察者模式监听 UserDefaults 的值变化。


### 🐕 [iOS 图片内存优化](https://juejin.im/post/5ddc8258518825734f2b8eb2)

[@EyreFree](https://github.com/EyreFree)：本文介绍了作者对 iOS 平台上的 HEIF 图片格式使用过程中的性能问题进行优化的经验，结合实践针对 HEIF 图片加载过程中的内存暴涨和 CPU 高占用原因进行了分析，并给出了自己的解决方案，有遇到类似问题的朋友可以参考。

### 🐕 [Quick tip: clearing your app’s launch screen cache on iOS](https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html)

[@Jimq](https://github.com/waz0820)：iOS 13 Launch screen 的缓存机制有所改变，当我们想动态改变 Launch screen 时会发现并不能看到自己想要的效果，作为 Xcode 的资深用户，我们莫逆于心，使出清缓存、重启真机/模拟器、重启 Xcode、删掉 App 的手法，但可能还是不能如愿，那么试试这篇文章里的方法吧，或许可以缓解痛苦，起码作者[推文](https://twitter.com/_inside/status/1204102470999400449)(🚧)下面一伙人是这么认为的。

### 🐕 [如何对 iOS 启动阶段耗时进行分析](https://www.jianshu.com/p/c0c4f19d317f)

[@五子棋](https://satanwoo.github.io)：网上关于 App 启动优化的文章已经不计其数，但是这篇来自戴铭的文章对启动优化问题进行了很充分的定义。从问题分析 - 纬度联系 - 如何执行 - 优化维持等多个角度对优化所涉及的知识点进行了完整的描绘。同时文章提供了大量资料和工具来帮助大家更好地完成启动优化，是一篇不可多得的佳作！


## 工具

### [Pecker](https://github.com/woshiccm/Pecker)

[@张嘉夫](https://github.com/josephchang10)：`pecker` 是用来自动查找无用代码的工具，基于 [IndexStoreDB](https://github.com/apple/indexstore-db.git) and [SwiftSyntax](https://github.com/apple/swift-syntax.git)，可以检测无用类、结构体、枚举、协议、函数、别名以及运算符。目前有五种规则，分别是 `skip_public`, `xctest`, `attributes`, `xml`, `comment`，可以禁用不需要的规则。

### [NativeConnect](https://nativeconnect.app/blog/official-launch/)

[@anotheren](https://github.com/anotheren)：`NativeConnect` 是一款为 macOS 开发的 App Store Connect 原生桌面工具，相比直接使用游览器访问，它更加快捷。它采用工程化的设计，交互逻辑类似于 Xcode，方便你把项目分享给工作伙伴。目前支持应用元数据、用户评论的管理。

## 代码

### [Diagnostics](https://github.com/WeTransfer/Diagnostics)

[@老驴](https://www.weibo.com/6090610445)：`Diagnostics` 是一个帮助开发者诊断用户反馈信息的库。它可以快速集成入 App，自动生成邮件格式，添加包含系统日志在内的附件，甚至可以过滤日志中的敏感信息。在大公司的大型项目中，一般都有专门的组来完成这样的支持，而这样的开源项目，则可以帮助个人开发者或是小项目，快速轻松补全反馈功能。

### [超甜的 Swift 初始化语法糖 - Then](https://github.com/devxoul/Then)

[@水水](https://www.xuyanlan.com): Swift 初始化语法糖开源库，让你的代码更简洁。实现超简单，对实现感兴趣的朋友可以看看哦~

## 程序员的副业

> 让我们来探索一下 Coding 以外的世界，看看程序员除了在 996 之后还会在做点什么？

团队成员 [@J_Knight_](https://weibo.com/1929625262/profile?topnav=1&wvr=6) 从去年年末开始了自己的股票和基金的投资之旅，用部分的业余时间学习投资理财方面的知识，从今年年初到现在的股票收益超过40%，基金收益超过20%；并在今年下半年开设了个人投资理财公众号「复利维他命」：该公众号主要分享理财，股票和基金投资的相关知识和实战经验，以及相关书籍的读书笔记。

![](https://fuli-blog.oss-cn-shanghai.aliyuncs.com/id/qrcode-258.jpg)

在这里分享他在上个月发布的一篇文章： [我为什么把投资作为自己的一项兴趣爱好](https://mp.weixin.qq.com/s/Vrp0DZssNb4vkiF04rlBBw)。这篇文章总结了他在这一年之内投资股票和基金的心得和体会，以及为什么把投资理财作为了自己的一项兴趣爱好的原因。本文对还没有开始投资股票和基金的朋友会有一些启发；对已经开始投资股票和基金的朋友可能也会有一定的借鉴意义。


## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们开通了公众号，每期发布时公众号（OldDriverWeekly）会推送消息，欢迎关注。

![](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）


