# 老司机 iOS 周报 #88 | 2019-10-28

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

## 文章

### 🐕 🌟 [浅谈移动工程师跨界机器学习之路](http://satanwoo.github.io/2019/10/27/MNN1/)

[@莲叔](https://weibo.com/aaaron7)：移动开发工程师，尤其是 iOS 开发，到底有没有人要，堪称是技术界的薛定谔的猫问题。但从另一方面看，移动开发的市场大幅降温、回归理性也是事实。本文作者是近期新加入老司机编辑[@五子棋](https://satanwoo.github.io)大佬，来自于手淘的 MNN 团队（MNN 是手淘开发的移动端 AI 前向计算框架），结合自己的经历，探讨了从移动开发工程师跨界机器学习的可能性与潜在收益。

本文首先阐明了广义的 AI 、或者说产业界的 AI 其实90%在纯算法之外，是一个实打实的需要用工程手段解决问题的领域，所以工程师跨界机器学习是可行的。之后文章举了三个在实现端侧前向计算框架的过程中可能会涉及到的技术领域，分别是数据自描述协议（用于构成模型文件）、汇编知识（用于实现底层的 Op 性能优化）以及 GPU 相关知识（通过 OpenGL 等 GPU 接口利用 GPU 来跑相关的计算）。从我的经验来看确实这里每一个子领域都值得深挖并都有一定的技术红利。（甚至对于不做机器学习也很有用）整体来说这篇文章值得一看，尤其适合具备一定经验但苦于没有深入方向的移动工程师参考。

### 🐕 🌟 [Swift 5.2 将使用新的诊断框架](https://juejin.im/post/5dac17efe51d4524d6748831)

[@四娘](https://kemchenj.github.io/)：`error: type of expression is ambiguous without more context` 可能是大家最经常在 Swift 看到的编译错误，它很准确地描述了问题，但却对于解决问题毫无帮助。

在完成了 ABI 和 Module 稳定之后，Swift 团队终于有时间静下来优化诊断系统的体验，他们近日在博客里更新了诊断系统的重构方向以及思路。著名开发者[图拉鼎](https://weibo.com/1846569133/Ic2BSxNBh)也在微博表示对于这次优化表示期待：

> 我记得我刚开始学编程时，当时学 C 语言，用的编译器是 GCC。当时 GCC 的 Diagnostic 做的很差，经常给出一些不知所云的错误提示。当时 Apple 用的也是 GCC，但很快就换成了 LLVM/Clang，后者的一大改进就是 Diagnostic。有理由相信这次 Apple 会做好 Swift 的 Diagnostic。

### 🐕 [The Scene Delegate In Xcode 11 And iOS 13](https://learnappmaking.com/scene-delegate-app-delegate-xcode-11-ios-13/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B426)

[@张嘉夫](https://github.com/josephchang10)：在 Xcode 11 中，iOS app 的默认模版会自动添加 `SceneDelegate`，那么这个在 iOS 13 中新出现的 `scene delegate` 的作用究竟是什么？作者深入分析了 iOS 13 和 Xcode 11 带来的一些改变，尤其是关于 scene delegate 和 app delegate，并探讨了其如何影响了 [SwiftUI](https://learnappmaking.com/swiftui-getting-started-how-to-ios-swift/)、Storyboard 和基于 XIB 的 UI 界面。

### 🐕 [Chris Lattner 讲述 Swift 起源故事](https://juejin.im/post/5daaf962f265da5b6a16aa87)

[@老峰](https://github.com/GesanTung)：本文 Chris Lattner 讲述了 Swift 起源故事，内容包括 Swift 初始团队与原型的介绍、Swift 文档编辑、Swift 社区对 Swift 发展的贡献、 Swift 发展现状及预期、Swift 在 Apple 生态外的推广及布局、Swift Evolution 在 Swift 演进中的影响，本文由 SwiftGG 翻译组翻译，感兴趣的读者可以阅读[原文](https://oleb.net/2019/chris-lattner-swift-origins/)。

### 🐕 [iOS 开发请您面向未来学习](https://juejin.im/post/5da6d14ae51d4524b601b78a)

[@EyreFree](https://weibo.com/eyrefree777)：本文作者从一位 5 年经验的 iOS 开发读者的诉苦为切入点，结合当前 iOS 开发市场行情，为我们分析了一个资深 iOS 开发人员在当下到底应该掌握哪些知识、技能，才能继续在日新月异的 IT 行业有自己的一席之地。且文中作者用多幅思维导图抛出了认为有必要深入研究的方向与领域，或许可以给一些尚无明确职业发展规划或入行一段时间但仍比较迷茫的 iOS 开发同学们一些启发。

### 🐕 [SwiftUI Layout System | Alexander Grebenyuk](https://kean.github.io/post/swiftui-layout-system)

[@四娘](https://kemchenj.github.io/)：今年新出的 SwiftUI 在易用性上做到了极致，其中起到支撑作用的就是布局引擎，作者在这篇文章里带我们剖析了 SwiftUI 的布局机理和 Stack 的实现，与 AutoLayout 进行比较，解释了 SwiftUI 为什么不需要处理约束无法解决的情况，并且总能给出一个 valid 的布局。

### 🐕 [小程序底层实现原理及思考](https://mp.weixin.qq.com/s/T6Mcu24Cmih-E_VCUo3PEQ)

[@老驴](https://www.weibo.com/6090610445)：虽然小程序的热度已经远远不如前两年那么疯狂了，但是现在越来越多的公司都希望自己能够在自己的 App 里加入小程序来打造自己的生态。

本文是《深入浅出Vue.js》的作者在接到开发小程序引擎任务后所做的一些尝试以及自己的思考。作者在选定使用 Vue 作为基础之后，从安全性，性能角度上出发，做了很多种的方案，最后选定了最合理的方案。相信能够对现在在开发小程序的同学们有一定的帮助。

### 🐢 [如何只用 Swift 写一款句子阅读 App](https://www.iweslie.com/index.php/archives/219/)

[@JimQ](https://github.com/waz0820)：这是『简・阅 - Simple Reader』App 作者关于开发这款作品的深度分享。用作者的话说，“这篇文章会讲述 Simple 整个 App 从诞生到现在所发生的一切，包括 UI 的设计，客户端的开发，后端服务器的搭建，宣传等等”。不同于多数侧重于讲理念、历程或运营，作者从需求文档、草图、设计稿、交互原型，到客户端界面实现、功能适配、动画细节，再到服务端弃第三方用 Vapor 开发，全栈还原，且全部高清截图或源码，全程无打码，就差开源了，也是个耿直的 boy 🙃，相信大家看了会有收获。

### 🐕 [Swift​UI Previews on macOS Catalina and Xcode 11](https://nshipster.com/swiftui-previews/)

[@J_Knight_](https://github.com/knightsj)：作者介绍了几种 SwiftUI 的使用方法：不用重新编译就可查看 UI 组件的多状态（比如按钮上的不同文字，文字的不同大小，多语言文字），某一个控件的 Dark Mode，同一个页面在不同机型（包括 iPhone 和 iPad）的展示效果。对 SwiftUI 感兴趣的读者可以参考一下这篇文章。

### 🐕 [看到这篇启动优化，让你的App有顺滑无比的启动速度~~](https://juejin.im/post/5cff0ada6fb9a07edc0b4c3c)

[@极速男孩](https://github.com/ztlyyznf001)：本文主要介绍了如何去优化 APP 的启动时间。首先介绍了如何去查看自己的 APP 的启动时间，然后介绍了如何分别去从 T1 部分（包括删除无用代码，+load 方法优化，减少 framework 的使用，减少 c++ 虚函数等方法）和 T2 部分（通过 ONLDynamicLoader 来优化各个组件的启动时间）对启动时间进行优化。

### 🐎 [Type-safe User Defaults](https://danieltull.co.uk//blog/2019/10/09/type-safe-user-defaults/)

[@zvving](https://github.com/zvving)：对 UserDefaults 封装的库很多，类型安全的处理多限于通过方法名控制 value 类型。作者另辟蹊径，使用 struct + where 子句定义 key 和对应数据类型，提供如下类型安全的调用方式：

```swift
defaults.set("Noooope", for: .someKeyForStr)
defaults.set(1, for: .otherKeyForInt)
```

对于一些 kv 操作及其它需要根据 key 约束内容类型的场景很有借鉴意义，推荐一试。

## 代码

### [IOSSecuritySuite -  An advanced and easy-to-use platform security & anti-tampering library](https://github.com/securing/IOSSecuritySuite)

[@五子棋](https://satanwoo.github.io)：IOSSecuritySuite 是一个完全用 Swift 实现，可以用来检测你的 App 是否运行于存在安全隐患环境中的工具库。它能够检测你的 App 是否处于越狱环境、是否被类似 Frida 或 Cycript 这样的调试工具注入、是否被加载了调试器等等。对于广大的应用逆向爱好者来说，是一份不错的学习资料。

### [MNN -  A lightweight deep neural network inference engine](https://github.com/alibaba/MNN)

[@五子棋](https://satanwoo.github.io)：MNN 是一个轻量级、高性能的深度学习推理引擎。通过它，你能够轻松的在移动客户端上使用机器学习的能力，制作令人震撼的应用。对于想要从客户端领域进军机器学习的同学，这是一份不可多得的学习佳作；对于想要研究底层技术的同学，这份代码里面大量的手写汇编、指令流水线排布的代码，更是值得细细品味。

### [bytedance/AWERTL · GitHub](https://github.com/bytedance/AWERTL/blob/master/README.md)

[@kyo](https://github.com/KyoLi)：对于一些需求，可能需要我们从右到左进行页面的布局，例如做国际化的时候，使用阿拉伯语的用户他们就习惯从右到左使用文字和功能。iOS 9 之后推出了系统解决方案以支持 RTL（Right To Left），但使用系统方式还有一定问题，例如必须支持 Autolayout，不支持 iOS 8 以下等。AWERTL 这个库在做到支持 RTL 的同时，弥补了系统方案的一些问题，有这方面需求的同学可以看一看。

## 内推

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


