# 老司机 iOS 周报 #82 | 2019-09-02

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

## 新闻

### 🌟 [苹果秋季发布会将在北京时间 9 月 11 日凌晨 1 点举办](https://mp.weixin.qq.com/s/EWItcscmIAhRsAoBRD70Qg)

一年一度的苹果秋季发布会的时间终于落定了，将于 9 月 11 日凌晨 1 点开始。你可以到 Apple 官网，也可以上腾讯视频、爱奇艺、优酷、哔哩哔哩等多个平台观看，不用到现场，通通都是前排的待遇。

杭州的朋友，还可以联系 Price Tag 的作者 [@61](https://weibo.com/liuyi0922) 同学，参与现在线下观影活动。边喝咖啡，边观看直播。[报名链接](http://t.cn/Ai8dWX2j)。

## 文章

### 🌟 🐢 [重磅！滴滴跨端框架 Chameleon 1.0 正式发布](https://mp.weixin.qq.com/s/kl9JwiS5_IHIZUAW-hPJBQ)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Chameleon (简写 CML ) 是滴滴开发团队历时三年打磨的一套跨端解决方案, 最近终于发布了 1.0 版本。CML 是一款真正专注于让一套代码运行多端的跨端框架，拥有业内先进的工程化设计，丰富的基础库，独创多态协议，提供标准的 MVVM 架构开发模式统一各类终端, 其能力堪称最强:

- 支持所有小程序、H5和客户端, 快应用的支持已经完成开发, 正在测试中
- 一套代码运行多端，并且高度一致
- 性能的极致体验, CML 团队在性能优化上多了许多工作, 包括包大小、各端加载速度、执行效率等等
- 生态化建设, 从组件库到调试工具都有官方标准产出, 并持续迭代
- 全方位能力加持, CML 拥有先进的工程化理念，整体开发、打包构建等流程非常高效
- 为降低原有项目迁移 CML 框架的成本，CML1.0 提供了以下两种优雅简洁的渐进式接入方案
  - CML1.0 能够将 CML 组件导出成各端组件，让你更自由地使用 CML
  - CML 已发布一款 webpack plugin：easy-chameleon，可直接在原有项目中集成 CML

CML 团队未来的规划中还有对 Native 跨端的支持, 比如 Flutter 和 React Native, 强的可怕。


### 🌟 🐕 [基于 Mach-O 文件的静态链接的分析](https://juejin.im/post/5d527867f265da03ed1946d2)

[含笑饮砒霜](https://weibo.com/chinafishnews/)：这是系列文章中的其中一篇。静态库链接是指自己的模块与静态库里的某个模块（用到的某个目标文件，或多个目标文件）链接成可执行文件。Mach-O 目标文件是源代码编译得到的文件，文件里有机器指令、数据，还有链接时候需要的一些信息，比如符号表、调试信息、字符串等，然后按照不同的信息，放在不同的“段”（segment）中。这篇文章解析了链接过程中空间与地址的分配，以及符号解析与重定位。其实动态链接比静态链接复杂的多，感兴趣的同学可以阅读该系列中的其他文章。

推荐阅读
- [MachO 文件结构分析](https://juejin.im/post/5d5275b251882505417927b5)
- [MachO 文件动态链接](https://juejin.im/post/5d5bbc426fb9a06ad3472cee)

### 🐕 [Code Review 最佳实践](https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666544605&idx=1&sn=56fe6b058f31d888e9df6509f97d06ca)

[@享耳先森](https://github.com/iblacksun): 作者认为 Code Review 是软件开发中的最佳实践之一：首先可以更好在团队内做到知识共享，其次可以有效提高整体代码质量，及时发现代码中可能存在的问题。作者还重点说明了 Code Review 应该怎么做，如果你团队中还没有实行 Code Review 或对 Code Review 有什么疑问，建议仔细读这篇文章。

### 🌟 🐎 [Xcode Hacks to Make Your Life Easier](https://medium.com/better-programming/xcode-hacks-cf32434cbc2)

[@老峰](https://github.com/GesanTung)：掌握一些常用的 Xcode 快捷键，可以帮我们高效的 Coding，本文作者就为我们总结了如下 Xcode 使用技巧：

- 快捷的通过 database model 创建 model：⌥ + Hold left mouse、⌘ and arrows、⌥ and arrows
- 快捷创建构造函数：^ + Enter
- 快捷 Debugging：e 表达式、 breakpoint enable、breakpoint disable、continue
- 快捷浏览源代码、文件：⇧ + ⌘ + O、⌥ + ⌘ + [、⌥ + ⌘ + ]

文章中附有视频讲述这些快捷操作技巧，感兴趣的读者自行阅读实践吧。

### 🐎 [The power of Environment in SwiftUI](https://mecid.github.io/2019/08/21/the-power-of-environment-in-swiftui/)

[@小非86](https://weibo.com/xuyafei86/)：Environment 是 SwiftUI 中独有的特性，本文从比较基础的角度，从对 Environment 的概念和使用技巧，到 Environment 的继承和依赖注入，都通过简单示例进行了讲解。且文章篇幅较短，比较适合快速阅读。

### 🚧 🐢 [A Swift YogaKit Guide to Flexbox](https://medium.com/swlh/a-swift-yogakit-guide-to-flexbox-fec74e1bffaf)

[@小非86](https://weibo.com/xuyafei86/)：Yoga 是 Facebook 开源的一个编写视图的跨平台代码，YogaKit 用于 iOS 开发，它基于 Flexbox，让布局变得更简单。本文为使用 Swift YogaKit 进行 Flexbox 布局一份详细指南，文章通过大量的代码和效果图形象的向我们展示 YogaKit 的使用，指导我们如何使用 Flexbox 创建出色的布局。推荐给有需要的读者阅读。

### 🐕 [避免 iOS 组件依赖冲突的小技巧](https://juejin.im/post/5d6723d5e51d453b386a6351)

[@J_Knight_](https://github.com/knightsj)：本文作者介绍了一种避免 iOS 组件依赖冲突（当两个组件依赖了同一个组件的不同版本，并且依赖的版本没有交集的情况）的方法。大体方案是通过修改 subspec，实现默认中介者以及利用条件编译的方式，是一个相对比较优雅的解决方案，有兴趣的读者可以点击原文学习具体方案。

### 🐕 [YYText 源码剖析：CoreText 与异步绘制](https://www.jianshu.com/p/b9ac1b5d8f01)

[@红纸](https://github.com/nianran)：本文是一篇 [YYText](https://github.com/ibireme/YYText) 的源码分析文章，作者从 CoreText 布局原理出发，剖析了 [YYText](https://github.com/ibireme/YYText) 中核心计算、自定义富文本属性、工具类封装原因等。有需要了解图文混排的同学可以参阅~

此外，作者对于 [YYKit](https://github.com/ibireme/YYKit) 中的其他源码仓库也进行了详细的源码分析。详情可以参考作者的[博客](https://www.jianshu.com/u/a89bf7b8bdd8)。

> 推荐人：[波儿菜](https://www.jianshu.com/u/a89bf7b8bdd8)

### 🐎 [独立开发者账号被封与解封回顾](https://github.com/cyanzhong/apple-terminated-my-dev-account/blob/master/LOOK_BACK_CN.md)

[@anotheren](https://github.com/anotheren)：独立应用 Pin 与 JSBox 的作者钟颖近期经历了开发者账号被封与解封的风波，本文是他自己对本次事件的完整回顾。虽然是误封，但是处理过程还是很值得学习，建议各位独立开发者都看一看。

### 🐕 [BlockHook with Invocation(2)](http://yulingtianxia.com/blog/2019/08/11/BlockHook-with-Invocation-2/)

[BlockHook](https://github.com/yulingtianxia/BlockHook) 这个库相信不少同学都听说过，它解决了在同步调用场景下对 Objective-C Block 的 AOP 问题。这篇文章是该库的作者对 BlockHook 拦截器的接口设计与实现，是对 BlockHook 相关的第二篇文章，没看过第一篇的可以先看一下第一篇 [BlockHook with Invocation(1)](http://yulingtianxia.com/blog/2019/07/27/BlockHook-with-Invocation/)。

## 代码

### 🌟 🐕 [CombineX](https://github.com/luoxiu/CombineX)

[@zvving](https://github.com/zvving)：
[RxCombine](https://github.com/freak4pc/RxCombine) 尝试让 Observable 与 Publisher 能相互转化，用桥接的方式兼容 RxSwift 与 Combine。

[CombineX](https://github.com/luoxiu/CombineX) 的目标则是提供完全对等 Combine 的开源实现：

- 完整兼容 Combine API，目前已粗略实现所有功能
- 支持 iOS 10+, macOS 10.12+, 以及 Linux
- 提供 [CombineX.Foundation](https://github.com/luoxiu/CombineX.Foundation), [CombineX.Cocoa](https://github.com/luoxiu/CombineX.Cocoa) 扩展
- [CombineX.Compatible](https://github.com/CombineXCommunity/CombineX.Compatible)：提供底层在 CombineX 与 Combine 之前自由切换的能力

项目仍在早期阶段，感兴趣不妨参考[文档](https://github.com/luoxiu/CombineX/blob/master/README.zh_cn.md#%E8%B4%A1%E7%8C%AE)中的指引为项目添砖加瓦。

### 🌟 🐕 [Flutter 通用基础库 flutter_luakit_plugin](https://juejin.im/post/5c34597651882523d3200c98)

[@邦Ben](https://weibo.com/linwenbang)：众所周知，flutter 跨平台，但是使用体验还不是很好，为什么？因为生态还比较弱，没有成熟可用的三方组件，最明显的就是数据库。目前因为不支持反射机制的原因，也没有好用的 ORM 库，妥妥裸写 SQL，或者桥接转换使用原生数据库，就两个字，痛苦。针对这种基础库不完备的情况，智宁大佬（Luakit 作者）灵机一动，flutter 在配合已稳定的 LuaKit 基础库可以迅速实现一整套完备的解决方案从而诞生了 flutter_luakit_plugin，提高了跨平台的效率，并且可以利用 Luakit 的脚本化来实现热更逻辑层（这意味着你需要重度使用 Luakit 进行维护逻辑层，UI 层使用 flutter）。另外大家伙都是支持扩展的，基础能力不够，依然需要自行扩展。目前据了解，该方案主要使用方为 YY 团队，并且他们的 flutter 系列文章也推荐一看（见文章底部）。

- 多线程接口
- orm 模型接口
- 文件操作接口
- http 请求
- 异步 socket 接口
- 全局通知机制
- Lua 代码加解密

PS: 部分同学可能想问：我仅仅只是想用个 ORM 怎么办？作者贴心的给出了纯 flutter 调用的版本来降低使用成本：[flutter_orm_plugin](https://pub.dev/packages/flutter_orm_plugin)。

## 内推

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


