# 老司机 iOS 周报 #96 | 2019-12-23

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

## 文章

### 🐕 [iOS 微信编译速度优化分享](https://mp.weixin.qq.com/s/-wgBhE11xEXDS7Hqgq3FjA)

[@J_Knight_](https://github.com/knightsj)：作者首先列举了调研过的，目前已有的编译速度优化方案，然后分享了微信使用的编译速度优化方案：

1. 优化头文件搜索路径
2. 关闭 Enable Index-While-Building Functionality
3. 优化 PB/模版，减少冗余代码
4. 使用 PCH 预编译
5. 使用工具优化头文件引入；尽量避免头文件里包含 C++ 标准库

而且在分享具体方案的过程中，还简单介绍了编译原理的知识，以及分析耗时的工具。对编译速度优化感兴趣的读者可以学习一下此文章。

### 🐎 [Flutter: 首个面向环境计算打造的 UI 平台](https://mp.weixin.qq.com/s/ItRWmXPKt81tKLLTWoJqEQ)

[@邦Ben](https://weibo.com/linwenbang)：文章中写道，在这个新兴世界中，大家关注的焦点也开始从单一设备转向环境——一个允许您随时随地获取服务和软件的环境。我们将其称为环境计算 (ambient computing)。

从这里我们可以了解到 Flutter 跨平台的决心和愿景。文章中大略总结了 Flutter 的近况，没了解过的可以看下，然后挑感兴趣的深入了解一番。

- Flutter 发布 1.12
- Flutter web 支持 beta 版
- 可以发布 macOS App
- Dart 2.7 发布
- Supernova / Rive / Adobe 等在设计与原型工具中，增加对 Flutter 的支持，还支持设计稿导出 Flutter 代码

### 🐕 [React Native 在美团外卖客户端的实践](https://mp.weixin.qq.com/s/9wv4uHg51EELU0yoIFQw8A)

[@looping](https://github.com/looping)：MRN（Meituan React Native）是美团研发团队基于 React Native 开源框架，并结合美团业务场景，定制化开发的一套动态化框架。

本文从接入 MRN 后应用的整体架构，业务开发在现有技术栈上的选型，动态化后对研发流程的变化，在运维上对业务可用性的监控以及使用 MRN 后对效率的衡量等方面的实践做了非常详尽的介绍。

如果有在建设动态混合开发方案，或对这块的工程化感兴趣的同学，推荐仔细阅读，从中还是能得到很多参考和启发的。

### 🐎 [Swift API Availability](https://nshipster.com/available/)

[@xiaofei86](https://weibo.com/xuyafei86)：本周 NSHipster 为你带来 `@available` 的详细用法，与 `#available` 的对比，以及在第三方 Framework、Swift Packages 中的使用建议。

### 🐕 [百度 APP iOS 暗黑模式适配的完美解决方案](https://mp.weixin.qq.com/s/QOPCCIC-PbmUtuq2XUS34g)

[@张嘉夫](https://github.com/josephchang10)：由于 Dark Mode 只支持 iOS 13 以上的系统，为了给全系统所有用户最好的体验，百度研发出了一套皮肤主题框架，不仅可以全系统支持 DarkMode，还可以扩展多套皮肤主题。本文主要从皮肤主题框架实现、色值表的管理以及配套工具链等方面详细的介绍了百度 App iOS 暗黑模式的适配。目前系统所有控件及其 Color 属性和 Image 属性均已支持这套皮肤主题框架，业务方只需使用简单的 API 设置 Color 和 Image，即可实现主题换肤。同时为了提升一键刷新所有视图主题的性能，采用了 NSHashTable 弱持有控件的方案，通过测试数据得出: 在上万个视图量级下， HashTable 性能是远远优于通知的方式。

### 🐎 [iOS 开发调试概览](https://www.cnblogs.com/kenshincui/p/11953536.html)

[@红纸](https://github.com/nianran)：本文是一个概览文章，简述 iOS 开发过程中，常用的一些调试手段。

1. 常用的一些 LLDB 命令，扩展介绍了一下 [chisel](https://github.com/facebook/chisel) 和 [lldb_commands](https://github.com/DerekSelander/LLDB) 两个 lldb 的扩展仓库
2. 常见的异常捕获方式。全局异常、EXC_BAD_ACCESS、Memory Leak
3. Xcode 自带的调试方法。条件断点编辑、UI Debugger、主线程检查等等
4. 第三方工具，[Charles](https://www.charlesproxy.com/) 网络调试工具和百宝箱 [WoodPecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12) 集网络沙盒等功能于一体的调试工具

> 注：推荐 [《Advanced Apple Debugging & Reverse Engineering》](https://store.raywenderlich.com/products/advanced-apple-debugging-and-reverse-engineering) 一书，从中你能了解到更加细节的调试方法

### 🐢 [iOS 项目技术还债之路《二》IAP 掉单优化](https://juejin.im/post/5df64beff265da33e97fcd2f)

[@anotheren](https://github.com/anotheren)：本文介绍了作者团队对于 IAP 的掉单优化，对于下单及验证流程进行了详细的分析，并介绍了优化后的实践方案。如果你也遇到类似的 IAP 问题，不妨一起讨论一下。

### 🐕 [亮剑 - Stinger 是如何在速度上吊打 Aspects 的](https://juejin.im/post/5df6e5c96fb9a016301d9255)

[@JimQ](https://github.com/waz0820)：如题，饿了么团队进行了一项卓越的工作，其开源的 AOP 库 Stinger 的执行速度比目前最具统治力的 AOP 库 Aspect 快了大约 20 倍。本文从基本原理对比、测试速度对比、源码分析对比、各项功能对比四个层面与 Aspect 进行了综合 PK，其言吊打，亦不为过。

### 🐢 [聊聊 Symbol](https://github.com/LeoMobileDeveloper/Blogs/blob/master/Compiler/unstanding-symbol.md)

在日常开发中，我们或多或少都应该接触过 Symbol ，而真正使用到它的地方可能并不多。其实 Symbol 在编译期和运行时都扮演了重要的角色，但了解 Symbol 、Symbol Table 等概念对我们在一些问题的定位甚至做程序架构都很有帮助。

### 🐕 [Objective-C Direct Methods](https://nshipster.com/direct/)

[@AidenRao](https://weibo.com/AidenRao)：Direct Methods 是 Objective-C 上新的方法调用机制(最早可能出现在 Xcode 11.x 上)，调用 Direct Methods 时，它直接调用其基础实现，而不是通过 objc_msgSend。由于 objc_msgSend 在优化上已经做了很多，Direct Methods 并不会有太大的性能优势。实际的优点：Direct Methods 是私有方法，并不能被外部访问，也可以防止被 Objective-C 运行时动态地调用。不过根据实现此功能的 [Pierre](https://twitter.com/pedantcoder/status/1197269246289444864) 所说，此优化的主要好处是减少了代码大小。

## 工具

### [PodfilelockToPng](https://github.com/Orange-W/PodfilelockToPng)

[@EyreFree](https://github.com/EyreFree)：便利小工具，通过 Profile.lock 快速生成项目库依赖关系图，由作者 [Orange-W](https://github.com/Orange-W) 自荐。同类工具还有 [pretty](https://github.com/octree/pretty)、[EFPodsAnalyzer](https://github.com/EyreFree/EFPodsAnalyzer) 等。

## 代码

### [SwipeCellKit](https://github.com/SwipeCellKit/SwipeCellKit)

[@老峰](https://GesanTung.github.io/)： UITableViewCell/UICollectionViewCell 侧滑组件 Swift 版，支持左右滑动、图标文字自定义、自定义拖拽动画等，可优雅的实现 Cell 侧滑事件。

### [flutter dart 私有仓库](https://github.com/bytedance/unpub)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：作用跟 Pod 私有库类似，作为公司内的私有备份还是很有必要的。同时包含了一个简单的搜索页面，强烈推荐。

### [推荐一款 Postman 的开源替代品： Postwoman](https://mp.weixin.qq.com/s/8viBJ46-5-POvMftNfY-Eg)

[@水水](https://www.xuyanlan.com)：大家都知道，Postman 是一个非常受欢迎的 API 接口调试工具，小编自己也用过哦~，它提供有 Chrome 扩展插件版和独立的 APP，不过它的很多高级功能都需要付费才能使用。而 Postwoman 是一个 Postman 的免费、快速且美观的替代方案，作为一款开源的 Postman 替代品，主打特性有如下一些：

- 轻盈，可直接在线访问；
- 简约，采用简约的 UI 设计精心打造；
- 支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法；
- 支持验证；
- 实时，发送请求即可获取响应。

有兴趣的朋友可以点击[Postwoman GitHub 项目官网](https://github.com/liyasthomas/postwoman)下载体验啦~

## 内推

> 字节跳动-视频（北京）团队收 iOS/Android/Flutter/服务端/前端/QA。初中高级开发+实习都可以哟。收到的每一份简历都会帮大家跟踪流程。简历发送至：silence007pp@bytedance.com  如果感兴趣可以加微信详细聊一下：LuaPlayer

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


