# 老司机 iOS 周报 #93 | 2019.12.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) 提出。

## 文章

### 🌟 🐕 [美团外卖前端容器化演进实践](https://mp.weixin.qq.com/s/SAuKvlB0Bfj7dRIBzkhO8w)
[@莲叔](https://weibo.com/aaaron7)：容器化和动态化是目前大前端业务开发中最绕不开的两个命题。尤其是在产品架构已经相对成熟，业务侧的需求逐步过渡到精细化运营之后，往往随之而来的就是单个页面承载大量功能，并由不同的团队负责，代码也部署在不同的仓库，这给业务开发的效果、质量的把控都带来的新的挑战。本文介绍的美团提单页就是这样的一个典型场景，本文从提单页面临的现状问题以及业务的特点，介绍了通过容器化的思路来解决上述问题，虽然方案中部分模块美团并未开源，但其架构与设计思想仍然值得借鉴。

### 🌟 🐎 [了解 SIMD 指令](http://satanwoo.github.io/2019/12/01/SIMD-1/)
[@五子棋](https://github.com/SatanWoo)：SIMD 是一种常见的利用单指令完成多数据量处理的计算方式。本文给出了基于 Xcode 环境的实践的 SIMD 指令使用指南，同时通过数据加法来对比 SIMD 指令对于计算性能的提升。对于想要了解 SIMD 相关知识的读者来说是一篇适合快速上手的教程。

### 🐕 [天罗地网？ iOS卡顿监控实战（开源）](https://juejin.im/post/5db65fe0e51d452a1e58f37c)

[@EyreFree](https://github.com/EyreFree)：本文介绍了作者在公司项目中使用的 Swift 版卡顿监控工具 [XXPerformanceMonitor](https://github.com/HJTXX/XXPerformanceMonitor) 的整个开发历程。作者通过对比 fps、ping、runloop、hook、msgSend 等主流卡顿监控方案的优缺点，陈述了自己的方案选择理由。并且给出了关键逻辑的核心代码实例，同时结合流程图直观地演示了具体的卡顿排查分析方法。作者最后还给出了自己在实际工作过程中遇到的常用卡顿场景的总结，以及在做完针对性优化后的线上效果对比，值得一看。

### 🐢 [How Swift Achieved Dynamic Linking Where Rust Couldn't](https://gankra.github.io/blah/swift-abi/)

[@四娘](https://kemchenj.github.io)：ABI 稳定是 Swift 重要的里程碑之一，但相关的资料却很少，其实这可以说是 Swift 做过最有野心，最具原创性的功能。这篇文章就比较详细地阐述了相关的实现内容以及实现难度，并与 Rust 进行对比，解释为什么 Rust 从设计上就难以做到动态链接。

### 🌟 🐕 [技术文章配图指南](https://draveness.me/sketch-and-sketch)

[@享耳先森](https://github.com/iblacksun)： 如果你是技术博主，相信都遇到过如何给文章配图的困惑，本文从配图的原则、工具、实践等方面进行论述，建议阅读。

### 🐎 [HTTP/2 的学习实践和翻译](https://github.com/halfrost/Halfrost-Field)

[@老峰](https://GesanTung.github.io/)：本系列是 @halffrost 霜神 关于HTTP/2 的学习实践和翻译的分享，其中包括 HTTP/2 基础概述、多路复用、HTTP 语义、HTTP/2 头压缩算法 —— HPACK 等，有换工作的同学可以深入了解下。

### 🐢 [Secret Management on iOS](https://nshipster.com/secrets/)

在平时的开发中，我们会将涉及到需要加密的重要内容都放到服务端上存储，因为目前如何在 iOS 上安全的存储一直是一个尚未解决的问题。本文详细解释了无论是采用硬编码、Xcode Configuration 还是对代码进行混淆进行存储都可能存在的风险，所以，请尽量不要在客户端存储设计机密的文件。


## 工具

### [LookinLoader](https://github.com/creantan/LookinLoader)

[@张嘉夫](https://github.com/josephchang10)：[Lookin](https://lookin.work/) 是一款免费的 macOS App，用于 iOS View Debugging。但由于 Lookin 官方没有提供集成的越狱版本，不便于逆向分析，因此作者参考 RevealLoader 编写了这个叫做 LookinLoader 的插件，支持 iOS 8～iOS 13。LookinLoader 可以在越狱设备上的 iOS App 中动态加载 LookinServer（支持 Lookin.app），然后通过 Lookin 来查看和修改 iOS app 中的视图，就像 Xcode 的 UI Inspector 和 Reveal 那样。此外还包括 Console 和 Method Trace 等功能，iPhone 和 iPad 甚至不用连接到 Mac 就可以运行 Lookin。

### [SwiftPM Catalog](https://zeezide.com/en/products/swiftpmcatalog/)

[@xiaofei86](https://weibo.com/xuyafei86)：SwiftPM Catalog 是 [SwiftPM Library](https://swiftpm.co) 的一款轻量且实用的 macOS 前端，用来查询和浏览使用 [Swift Package Manager](https://swift.org/package-manager/)  的 Packages。[SwiftPM Library](https://swiftpm.co) 通过开源社区维护的仓库 [SwiftPMLibrary](https://github.com/daveverwer/SwiftPMLibrary) 中的 [JSON 文件](https://github.com/daveverwer/SwiftPMLibrary/blob/master/packages.json) 来找到这些 Packages 并抓取相应的信息作为搜索结果展示。此列表已经有 100 多位贡献者，汇集了 3000 多个 Packages，基本覆盖了所有常用的 Swift 库。在将来的某个时候，也许苹果或 GitHub 会提供正式的 Packages 列表，但是在那之前，总比没有的好。

### [Commitizen](https://github.com/commitizen/cz-cli)

[@AidenRao](https://weibo.com/AidenRao)：Git 提交信息生成和约束工具，帮助团队成员规范化 Commit Message。它使用的是 [Angular](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#heading=h.greljkmo14y0) 规范，有对应的工具去生成 change log。每次提交，Commit message 都包括 Header, Body 和 Footer 三个部分。 Header 是必须的，包括三个字段：type, scope 和 subject，用于说明提交类别，影响范围，和一个简短的描述。Body 部分是对本次 Commit 的详细描述，Footer 用于 close issue 和声明版本不兼容情况的迁移方法。也可以自定义规范，并且添加约束，对不符合规范的 commit 直接拒绝。

## 代码

### 🌟 [MyLinearLayout](https://github.com/youngsoft/MyLinearLayout)

[开源 UI 界面布局框架 MyLayout1.9 发布](https://juejin.im/post/5de3ca906fb9a071975009a7)！MyLinearLayout 是一个目前几乎集成了大前端所有 UI 界面布局解决方案的开源布局框架，其提供的九大布局体系可以满足您所有的 UI 布局需求。本库从 2015 年开始发布，历时四年的维护和发展，服务应用了数千 app，目前 GitHub 上 star 数量 3600 左右。是一个值得接入并提高您工作效率的好框架。

> 由美团资深开发 [欧阳大哥](https://github.com/youngsoft) 自荐。

### [Siren](https://github.com/ArtSabintsev/Siren)

[@looping](https://github.com/looping)：Siren 是使用 Swift 开发的用来检测并提醒用户进行应用版本升级的类库。它会从 [iTunes 的 lookup 接口](https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/iTuneSearchAPI/LookupExamples.html)获取应用在 App Store 的版本信息，帮我们处理了包括版本比对（支持 2 到 4 位版本系统）、弹窗提醒（3 种弹窗样式）等基本操作，支持规则自定义，同时包括对 App Store 更新延迟、最低支持系统、阶段性发布等问题也做了兼容处理，考虑很全面，即使不直接使用这个类库，自研版本更新提醒的话，也是很有参考价值的。

### [xcconfigs for Universal Frameworks](https://github.com/mrackwitz/xcconfigs)

[@极速男孩](https://github.com/ztlyyznf001)：在我们维护一个多平台的 framework 的时候我们经常要去复制多个 target，而有了这个 Xcode configuration 我们可以仅仅使用一个 target ，然后根据不同的条件，使用不同的 build settings 中的设置，方便我们去复用和修改。这样我们只要在编译时选择对应的平台就会自动选择不同的 build settings。

## 内推

> 深圳-字节跳动，抖音 App 基础技术小组 客户端研发岗位
- 职位内容：主要负责抖音基础技术方向的研发工作，包括不限于组件化、自动化测试、研发流程工具脚本等方向的研发工作。
- 联系方式：邮箱(chenxiancai@bytedance.com) / 微信(cheney-cai)
- JD: https://job.toutiao.com/s/XdEU32 / https://job.toutiao.com/s/Xd7vWs

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