# 老司机 iOS 周报 #128 | 2020-09-14

![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

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

- [活用 Swift 类型推断](https://mp.weixin.qq.com/s/-kwz3m8SXOtSj36kZq3tlg)
- [Swift Package Manager 的里程碑](https://mp.weixin.qq.com/s/fLYOky-g6k0ridGEKwsU1A)

## 新闻

### 🌟 [Apple 特别活动 - 秋季发布会将于本周三凌晨举行](https://www.apple.com.cn/apple-events/)

[@Parsifal](https://github.com/ParsifalC)：苹果今年的秋季新品发布会将于本周三（北京时间 9 月 16 日）凌晨 1 点在 Apple Park 举行，与今年的 WWDC 20 一样，此次发布会依然采用了线上视频形式，国内用户可以在爱奇艺、哔哩哔哩、腾讯视频和新浪微博观看本次直播。根据一些媒体消息，本次发布会可能不会发布 iPhone 12，不知苹果是否能带来惊喜。

## 文章

### 🌟🐕 [如何提高代码质量](https://mp.weixin.qq.com/s/Dl7umd-Z3QuvOwzjmy3Z4w)

[@享耳先森](https://github.com/iblacksun)：高质量代码简单来说就是「好看和好用」，好看是指代码可读性好，容易理解、容易维护，别人接手了不骂你；好用则指代码健壮，不容易出错，机器跑着不骂你。即使出错，也容易定位，容易止损和恢复。

如何才能拥有高质量的代码，有两种途径：

- 第一种途径：先有好的设计--->然后用优秀的编码去实现--->再把优秀的编码风格延续下去
- 第二种途径：从糟糕的代码开始--->不断去重构，向优秀的设计方案和代码风格不断逼近--->再延续下去

本文重点从「途径一」的角度介绍如何能产生好代码，分别从规范、实践、度量及改进几个角度深入阐述，建议阅读。

### 🐕 [App Clip 离落地有多远？](https://gcsnnb.github.io/2020/09/10/App-Clip%E7%A6%BB%E8%90%BD%E5%9C%B0%E6%9C%89%E5%A4%9A%E8%BF%9C/)

[@JonyFang](https://github.com/JonyFang)：WWDC2020 引出了 App Clips，之前的《WWDC20 内参》已经介绍过[《App Clips 的配置及链接处理》](https://xiaozhuanlan.com/topic/5820361974)。截止这里，我们已经知道了 App Clips 所带来的利，如及时可用等。本篇从业务和技术两个角度，列出了 App Clips 真正落地可能会遇到的问题，度量的角度可以作为我们实际业务落地过程中的参考。

这里列出 App Clips 落地过程中值得思考的几点：

- 业务角度
  - 国内市场线下支付的支持
  - 国内小程序的竞争
  - 仅支持 iOS 14+ 用户
  - 虽然提供了多种唤起 App Clips 的方式，但触发的条件比较严苛。如 Clip Code 只能
    通过`系统相机`才能够唤起
  - 对于纯线上 App 最有利的唤起方式是通过 Safari，但操作路径步骤比较多
- 技术角度
  - 需要针对业务做代码拆分或做足够彻底的组件化
  - 10M App Clips 包大小的限制
  - App Clips 不支持后台处理活动。如`后台不支持网络请求`等
  - App Clips 的用户怎么和对应的 App 用户一样做到唯一标识和绑定
  - App Clips 支持唤起三方 App，但三方 App 不支持唤起 App Clips。所以会影响到三
    方登录、三方分享、三方支付的场景
  - 不支持企业包
  - CocoaPods 对 App Clips 的支持还不完善

### 🐕 [iOS 性能优化 - Allocations 分析内存分配](https://mp.weixin.qq.com/s/WqVZ1rFpYrvE8X-J0f35mw)

[@JonyFang](https://github.com/JonyFang)：开发过程中，我们有时会遇到内存分析相关的问题，本篇介绍了 Allocations 工具。Allocations 工具提供了几种内存分析的方式：

- Statistics
- Call Tree
- Allocations List
- Generation

通过上述几种分析方式，我们可以定位找出需要进行内存优化的代码块。阅读过程中可以配合作者提供的 Demo 进行手动分析操作。Demo 地址：[https://github.com/LeoMobileDeveloper/Blogs/tree/master/DemoProjects/iOS/AllocationsDemo](https://github.com/LeoMobileDeveloper/Blogs/tree/master/DemoProjects/iOS/AllocationsDemo)

### 🐎 [LeetCode Cookbook](https://mp.weixin.qq.com/s/qu_drrtR-dFtYk1xiiZ7UA)

[@Damien](https://github.com/ZengyiMa)：还在为如何提高算法能力苦恼吗？来看看霜神（一缕殇流化隐半边冰霜）的 LeetCode Cookbook 吧，精美的排版和简单易懂的题解帮助你的算法道路上披荆斩棘。

### 🐎 [Interviewing for an iOS Design System Engineer role at Spotify](https://dev.to/funmia/interviewing-for-an-ios-design-system-engineer-role-at-spotify-485l)

[@老驴](https://www.weibo.com/6090610445)：你是不是还在疑惑国内外互联网公司面试的区别？你是不是还在好奇海外互联网公司面试需要哪些技能？来，这篇来自一位 Spotify 工程师的经验总结文章可以让你一探究竟。

### 🐢 [Agora Talk 回顾 | 深入聊聊不一样的 Flutter](https://mp.weixin.qq.com/s/lo-jrMRKpfEr2s80BW61VQ)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：Flutter 自出道以来可以说是突飞猛进，因为它独特的底层设计和开发语言，但是作为一个跨平台框架它也是备受追捧和争议。

目前 Flutter 被吐槽最多的有以下几点：

- Flutter 嵌套恶心
- 使用 dart 不使用 js
- 混合开发比 RN 更麻烦
- 不支持热更新

但是 Flutter 也有自己独有的一些优势：

- Flutter 普及迅速
- 对 Web、Linux、Win 等平台也在快速推进
- 在 UI 兼容性和代码复用上表现优秀
- 对比其他跨平台框架性能更好

文中不仅详细介绍了 Flutter 的槽点和优势，还分析了 Flutter 世界中一些有意思的设定，比如 Widget 和 Element 的关系，组成 Dart 层渲染闭环的其他元素等。

### 🐢 [Flutter 1.20 下的 Hybrid Composition 深度解析](https://mp.weixin.qq.com/s/e4Eh3DLacBJv36bNIKIokg)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 在很早期的版本中就提供了 PlatformView 来解决 View 级别的 NativeVivew 和 Flutter 混合，但 PlatformView 不管从开发体验还是性能表现都有点儿差强人意。

在官方和社区不懈的努力下， 1.20 版本开始在 Android 上新增了 Hybrid Composition 的 PlatformView 实现，该实现将解决以前存在于 Android 上的大部分和 PlatformView 相关的问题，比如华为手机上键盘弹出后 Web 界面离奇消失等玄学异常。

[本文](https://mp.weixin.qq.com/s/e4Eh3DLacBJv36bNIKIokg)详细的讲解了 Hybrid Composition 接入和底层原理实现。

### 🐕 [Private APIs, Objective-C runtime, and Swift](https://medium.com/@victor.pavlychko/private-apis-objective-c-runtime-and-swift-ceaeefbb6e48)

[@四娘](https://kemchenj.github.io)：Foundation 里有一些 API 被标记为 `NS_SWIFT_UNAVAILABLE`，例如 `NSInvocation` / `NSMethodSignature`，由于它们不安全或者没办法很好地融入到 Swift 的体系里所以被标记为不可用。

但有时候我们面对平台 SDK 的问题，又不得不跟这些 API 打交道，那么此时在 Swift 里如何调用并且封装这些 API 就成了一个问题，这篇文章的作者就详细地介绍了他的解决方案：

```swift
let object = NSDate()
let objectPrivate = object as! NSObjectPrivate
let selector = Selector("description")
let signature = objectPrivate.methodSignature(for: selector)!
let invocation = NSInvocationClass.invocation(methodSignature: signature)
invocation.selector = selector
invocation.invoke(target: object)
var unmanagedResult: Unmanaged<NSString>? = nil
invocation.getReturnValue(&unmanagedResult)
let result = unmanagedResult?.takeRetainedValue()
print(result ?? "<nil>")
```

### 🐕 [iPhone 屏幕尺寸进化历程背后的 App 设计哲学](https://mp.weixin.qq.com/s/fRXCTfl_Ewt-XuOk0lSz9g)

[@张嘉夫](https://github.com/josephchang10)：从 2007 年发布的第一代 iPhone 到2019 年发布的 iPhone 11 系列，iPhone 的屏幕尺寸已涵盖 3.5 寸、4 寸、4.7 寸、5.5 寸、5.8 寸、6.1 寸、6.5 寸七种，传闻将于今年秋季发布的 iPhone 12 还会增加 5.4 寸、6.7 寸两种尺寸。随着时间轴的推移，iPhone 的屏幕尺寸已经变得越来越多，越来越复杂，一个 app 要适配所有的这些屏幕尺寸，在从设计、开发到推广的整个过程中都需要考虑诸多因素。在这 13 年间 iPhone 的屏幕尺寸是怎样一步步进化到此的？基于软硬一体的设计，屏幕物理尺寸的变化背后包含着怎样的进化规律？这些变化对我们朝夕相处的手机 app 又产生了什么影响？根据已有的进化规律，我们是否可以展望未来的 iPhone 还会走向何方？基于 iOS 14 Beta 中发现的新线索，我们又可以推断出 iPhone 12 的哪些更多信息呢？作者 Allen Chu 在这篇文章里对这些问题进行了探讨。

## 代码

### 🐎 [VAP](https://github.com/Tencent/vap)

[@EyreFree](https://github.com/EyreFree)：VAP（Video Animation Player）是企鹅电竞开发，用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点，且同时支持 iOS、Android、Web 平台。

- 相比 WebP、APNG 动图方案，具有高压缩率（素材更小）、硬件解码（解码更快）的优点
- 相比 Lottie，能实现更复杂的动画效果（比如粒子特效）

## 内推

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