# 老司机 iOS 周报 #108 | 2020.04.06

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

## 新闻

### 🐎 [通用购买现可包含 Mac App](https://developer.apple.com/cn/news/?id=03232020b&from=timeline&isappinstalled=0)

[@水水](https://www.xuyanlan.com)：现在，可以在通用购买中包含 app 的 macOS 版本，让用户只需购买一次，即可在 iOS、iPadOS、macOS、watchOS 和 Apple tvOS 上使用您的 app 和 App 内购买项目。为此着手准备，只需在 Xcode 中为您跨平台的 app 绑定相同的 bundle ID，并在 App Store Connect 中为通用购买设置好 app 记录。

## 新手推荐

### 🐢 [字符串比较中 NSNumericSearch 选项的工作原理](https://blog.harrisonxi.com/2019/02/%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%AF%94%E8%BE%83%E4%B8%ADnsnumericsearch%E9%80%89%E9%A1%B9%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86)

[@极速男孩](https://github.com/ztlyyznf001)：比较版本号是我们开发中常见的需求，在字符串中我们经常会使用到 NSNumericSearch 对当中的数字进行比较，本文主要介绍了在各种不同情况下字符串通过 NSNumericSearch 比较的结果和从中得到原理。

## 文章

### 🌟 🐢 [Apple 操作系统可执行文件 Mach-O](https://ming1016.github.io/2020/03/29/apple-system-executable-file-macho/)

[@J_Knight_](https://www.weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1/)：Mach-O 在 Mach 内核的操作系统（macOS，iPadOS 和 iOS）中使用。学习它有助于理解程序是如何加载到这些系统和如何执行的，也有助于了解符号查找，函数调用堆栈符号化等等。本文结合代码，从 Mach-O 的构建方法，如何组织，如何工作，导入和导出的方法，对其做了比较详细的介绍。对于想学习 Mach-O 的读者来说，本文是一篇可以初步了解 Mach-O 的文章。

### 🌟 🐎 [字节跳动为什么选用 Flutter：并非跨平台终极之选，但它可能是不一样的未来](https://mp.weixin.qq.com/s/biRl-SCXro3U_96X9N2UBg)

[@looping](https://github.com/looping)：本文是 InfoQ 对字节跳动移动平台部 Flutter 架构师、知名博客 Gityuan 博主袁辉辉采访内容的整理，主要有分析了大家看好 Flutter 以及字节跳动选择 Flutter 的原因，还分享了公司内部在 Flutter 实践和推广过程中遇到的一些问题和阻力，最后也提出了他个人对跨平台技术的一些看法，这些都可以作为我们在做跨平台技术选型时的参考。

### 🐕 [A Look Into ArgumentParser](https://www.fivestars.blog/code/a-look-into-argument-parser.html?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=email&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B448)

[@xiaofei86](https://weibo.com/xuyafei86)：最近，苹果开源了由 Swift 实现的用于解析命令行参数的 [Swift Argument Parser](https://github.com/apple/swift-argument-parser)。在了解基本使用后，本文将带你深入探究 ArgumentParser 的内部实现，了解 ParsableCommand 协议和四个属性包装器背后隐藏着的复杂性。通过本文，你可以了解到 Swift 团队为实现优雅接口所付出的巨大努力，并希望你也可以欣赏这些优雅设计。

### 🐕 [iOS 端矢量图解决方案汇总（SVG 篇）](https://dreampiggy.com/2020/03/30/iOS端矢量图解决方案汇总（SVG篇）/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：SVG 作为目前在 Web 上最流行的矢量格式，在 iOS 端的支持可以说是一言难尽。文中列举了几个目前已有的实现，可以说是各有优劣，具体使用何种方案还要根据自己的实际需要来选择。

### 🐕 [全网最详！暗黑模式在 Trip.com App 的实践](https://mp.weixin.qq.com/s/oU13hMQ2MJIYZoJWC74EMQ)

[@红纸](https://github.com/nianran)：本文是携程团队对于适配 **Dark Mode** 的实践总结，从视觉设计、设计方案（颜色映射及插画设计）等角度来阐述 **Dark** 跟 **Light** 在设计上的区别。最后配套有 iOS/Android/RN 三端的适配方案可供开发大大们进行参考。

往期周报中的两则相关内容推荐给大家：Office 开发组件 [DarkModeKit](https://github.com/microsoft/DarkModeKit) 和开发适配相关的 [How To Adopt Dark Mode In Your iOS App 🌙](https://www.fivestars.blog/code/ios-dark-mode-how-to.html)

### 🐕 [Kotlin/Native and Xcode integration insights](https://medium.com/@mateuszmatrejek/kotlin-native-and-xcode-integration-insights-357b8747a1c8)

[@老峰](https://github.com/gesantung)：Kotlin/Native 是一种基于 LLVM 将 Kotlin 代码编译成本地二进制文件的技术，它可以在没有虚拟机的情况下运行。本文介绍了在 Xcode 集成 Kotlin/Native 工具集实现，从而实现 iOS 调用 Kotlin 公共业务代码库的具体操作过程，感兴趣的读者可以进一步了解。

### 🐕 [静态插桩的方式来实现 Hook Method](https://juejin.im/post/5e74bc39f265da576a57a293)

[@Parsifal](https://github.com/ParsifalC)：[99 期周报](https://juejin.im/post/5e1c04626fb9a03013306396#heading-5)推荐过美团欧阳大哥关于「静态拦截 iOS 对象方法调用的简易实现」一文，该文从另一个新颖的角度“静态库会将自己引用的外部符号单独保存在一张表中”出发，提出了 Method Hook 的新思路。本篇文章则基于这个理论完成了实践。文中作者总结了几点实践过程中遇到的问题，包括对静态库和目标文件的理解、Python 实现的坑等方面，值得我们借鉴。

> 本文由作者 [maniackk](https://github.com/maniackk) 自荐。

## 工具

### [Echo](https://github.com/didi/echo)

[@EyreFree](https://github.com/EyreFree)：Echo 是一款简单易用、插件化易扩展、大屏显示和操作的客户端研发调试工具，可以实时查看 App 各类数据（网络请求、日志、埋点等），也可以无须改动代码快速修改预览 App 的效果。相比其他 Debug 工具，它还具有以下优势：

- 大屏幕：显示效果更优，不影响原 App 的用户操作，使用体验更好；
- 扩展性：内置通用模板及插件机制可快速扩展新功能，只需关注业务数据即可，降低新功能扩展成本；
- 聚合型：收敛客户端研发调试工具为一体，提高 RD 和 QA 同学的效率；
- 缓存机制：插件自带缓存机制，出现问题时即使脱离大屏，后续也可快速连接排查定位。

## 代码

### 🐎 [TextureSwiftSupport](https://github.com/TextureCommunity/TextureSwiftSupport)

[@JimQ](https://github.com/waz0820)：脸书大厂出品的 [Texture](https://github.com/TextureGroup/Texture) 采用者众多，SwiftUI 风格的 Texture 现在可以尝试了（非官方），基于 Swift 为 SwiftUI 引入的新特性 [Function builders](https://github.com/apple/swift-evolution/blob/9992cf3c11c2d5e0ea20bee98657d93902d5b174/proposals/XXXX-function-builders.md)。

## 音视频

### [道长三十：工科生如何去美国读研？](https://talk.swift.gg/62?from=timeline&isappinstalled=0)

[@张嘉夫](https://github.com/josephchang10)：ggtalk 这期的嘉宾是目前在美国工作的[故胤道长](https://www.weibo.com/soapyigu?refer_flag=1005055013_)，总节目时长接近五个小时，按照内容分为三期。第一期道长主要和大家聊聊在 CMU 读研的过程，从准备、申请到入学之后的各种经历。

### [ATP 371: Chris Lattner 访谈](https://atp.fm/episodes/371)

Chris Lattner 大神再一次作客 ATP，这次聊的话题有：

- Swift for TensorFlow
- MLIR（本期的标题来源）
- Swift 统治世界
- SwiftUI & Combine
- Swift ABI Stability

这期节目跟上次一样也是非常欢乐，聊 MLIR 之前 Chris 还问主持人这个话题对他来说会不会太过极客？🤣

> There's another project called MLIR. Have you heard of anything about that? Do you want to talk about that? Or is that too geeky for John Siracusa?

总的来说这期节目非常推荐收听，另外没有听过上次访谈的读者，也直接可以看道长整理的文字版 [Chris Lattner 访谈录](https://zhuanlan.zhihu.com/p/31189342)。

## 内推

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