# 老司机 iOS 周报 #58 | 2019-03-11

![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/urSrDFbK35VYC8pihVlREg)

**戴铭，绝对是 iOS 届的资深老司机，GMTC 全球大前端技术大会的专题出品人及讲师之一**，前滴滴出行技术专家，在组件化方案落地、工程动态化、大前端建设、应用开发阶段效率的提升、上线后各种难点问题的解决等方面的经验非常丰富。极客时间的品牌我一向比较认可，专栏品质很有保障，《iOS 开发高手课》也是戴铭老师对移动开发这么些年沉淀下来的技术，详细而系统的输出。我看了目录，主要分为基础、应用开发、原理、前端与原生共舞的 4 个模块，你将获得：

1、资深 iOS 开发专家为你构建完整知识脉络
2、领略专家级大型开发项目，增强面试竞争力
3、深入 iOS 核心技术与原理，从源头上掌控新技术
4、精美手绘图解知识点帮助你轻松学习

**周报编辑均已购买，来不及了快上车！！原价 ¥99，上新优惠 ¥68，赶快扫码直接订阅。通过以下链接购买的读者微信添加 AwayZ_T 或 Damonwong2，我们会返现 10元小红包，并邀请你进入我们老司机周报的读者群，一起学习戴铭老师的 iOS 进阶教程~**

[点我试读或购买「iOS 开发高手课」，快上车~](http://gk.link/a/102wQ)

另外，我们在微博上发起了一个福利活动，赠送老司机定制 Logo T 恤衫和「iOS 开发高手课」，[欢迎大家点我参与~](https://m.weibo.cn/6062089411/4348770474532991)，中奖的我们也会邀请进读者群~

## 新闻

### 🌟 [刚刚，阿里宣布开源 Flutter 应用框架 Fish Redux！](https://mp.weixin.qq.com/s/8wVnL7OBzB8cbwo1vK6SRQ)

闲鱼团队是国内最早开始大规模使用 Flutter 的大公司团队，也是国内现在 Flutter 风潮的引领者。

在上周，闲鱼团队刚刚开源了名为 Fish Redux 的基于 Redux 数据管理的组装式 Flutter 应用框架，旨在解决大型复杂应用中的页面状态管理以及 UI 组件的复用等难点。

对于想要实践 Flutter 于大型应用的团队及开发者们来说，值得学习参考。

## 文章

### 🌟 🐕 [庖丁解牛！深入剖析 React Native 下一代架构重构](https://mp.weixin.qq.com/s/dXZTqXOSi3fiOesDJ7gsFQ)

去年六月，[Facebook 宣布要重构 React Native](https://facebook.github.io/react-native/blog/2018/06/14/state-of-react-native-2018)。时至今日，开发团队取得的一些进展已经非常值得我们期待和持续关注了。本文通过分析源码仔细介绍了 RN 的重构设计思路和后续业务开发适配注意点，解释了新技术方案在解决性能问题上的优势，同时描述了官方对以后组件开发维护的一些规划，对保持社区的活跃性、提升框架集成使用体验和加快组件迭代速度等都有很大的帮助。

### 🐕 [没有 AST, IDE 中的错误提示、自动补全、重构、语法检查......都玩不转了](https://mp.weixin.qq.com/s/UYzwVRPFas6hwe2U7R0eIg)

当下的软件开发，实际上并不需要我们了解许多编译原理相关的知识。但编译原理作为一门计算机经久不衰的基础课程，自然有它存在的价值。其中的 parser 部分就值得好好看一看，这会在我们遇到相关的需求时候，如排版布局，想自己搞一套 DSL 等都会很有帮助。本文讲了 AST （抽象语法树）是如何工作的，虽然是以 JavaScript 的代码举例，但原理其实是通用的。

### 🐕 [How to integrate image recognition in iOS apps](https://medium.com/capgemini-norway/how-to-integrate-image-recognition-in-ios-apps-6d660f37f75)

本文介绍了如何在 iOS 应用程序中集成图像识别，文章作者介绍如何使用 Microsoft Custom Vision 构建 CoreML 模型，以便能够识别照片中的对象以及如何在 iOS 应用程序中使用它。您需要对 iOS 开发和 Swift 有基本的了解才能阅读这篇文章。

### 🐕 [The Xcode Build System](https://pewpewthespells.com//blog/xcode_build_system.html)

作者从 Xcode 的编译系统组件（ 插件，平台组件，工具链 ），工程文件（ pbxproj 文件，文件引用 ）
编译环境（ 编译设定，Target，xccofig 文件 ），编译输出（ 输出路径，输出文件 ）等内容比较全面地介绍了 Xcode 的编译系统。读者阅读后可以对  Xcode 的编译系统有更加全面的认识。

### 🐕 [Swift Code Formatters](https://nshipster.com/swift-format/)

最近几天，Swift 社区一直在讨论 [Tony Allevato](https://github.com/allevato) 和 [Dave Abrahams](https://github.com/dabrahams) 关于 [Swift 编码风格指南和格式化工具](https://forums.swift.org/t/pitch-an-official-style-guide-and-formatter-for-swift/21025) 的提案。

[Mattt](https://nshipster.com/authors/mattt/) 专门在 [NSHipster](https://nshipster.com) 撰文对社区现有代码格式化工具进行比较，包含 [SwiftFormat](https://github.com/nicklockwood/SwiftFormat)、[SwiftLint](https://github.com/realm/SwiftLint)、[Prettier with Swift Plugin](https://github.com/prettier/prettier) 及 [swift-format (proposed)](https://github.com/google/swift/tree/format)，分别从格式化结果及效率两个角度进行对比。

### 🐢 [从源码解析 Swift 弱引用](https://zhuanlan.zhihu.com/p/58179258)

弱引用的深层实现机制在 Objective-C 中，就让很多同学觉得云里雾里，那在 Swift 中又如何呢？和 Objective-C 中的实现又有何异同呢？作者通过研读源码，给我们深入剖析了 Swift 弱引用机制的实现方式，并比较了和 Objective-C 中的异同，非常值得我们借鉴学习。相关阅读：[Friday Q&A 2017-09-22: Swift 4 Weak References ](https://www.mikeash.com/pyblog/friday-qa-2017-09-22-swift-4-weak-references.html)

### 🐢 [一步一步教你实现 iOS 音频频谱动画](https://juejin.im/post/5c1bbec66fb9a049cb18b64c)

当我们在听音乐的时候，总能看到音频频谱随着优美的音乐而跳动，那么有没想过这样的动画如何实现？

本文主要介绍了脉冲编码调制（PCM）基本音频处理概念；AVAudioEngine 音频播放和 AVAudioPCMBuffer 频谱数据的获取、计算、处理、音频动画绘制；频谱动画优化：锯齿消除、闪动优化等。

作者通过一步步探索最终实现完美的音频频谱动画，感兴趣的同学[点击这里](https://github.com/potato04/AudioSpectrum)阅读源码，相信一定会有所收获。

### 🐕 [已开源|码上用它开始 Flutter 混合开发——FlutterBoost](https://mp.weixin.qq.com/s/v-wwruadJntX1n-YuMPC7g)

咸鱼团队在国内 Flutter 的探索上一直以来都是走在业界前列。近期，咸鱼技术团队开源了 Flutter 的混合开发框架 FlutterBoost。我们知道，在现有的工程中直接换成 Flutter 开发具有很高的成本以及风险，毕竟对于一些稍大些的工程，有些代码的业务逻辑已经很复杂了。所以，咸鱼团队基于对现状的考虑，采用 Native -> Flutter 渐进式的迁移方式，并将框架开源，对于想要在旧有工程上采用 Flutter 的同学可以看一下。

### 🚧 🐎 [How to build a simple tracker blocker for iOS](https://medium.com/@nderkach/how-to-build-a-simple-tracker-blocker-for-ios-cc6c52a2d2d1)

跨网站追踪是一种广告商用于搜集用户信息的方式，Apple 作为一家注重用户隐私的公司，在 iOS 里内置了 Content Blocker 等功能帮助我们不被追踪。

这篇文章就教我们如何使用 Content Blocker 和第三方黑名单来搭建一个反追踪的插件，并且还提供了相关的网站以便我们进行测试。

### 🐕 [Task-based concurrency in Swift](https://www.swiftbysundell.com/posts/task-based-concurrency-in-swift)

对一组有相互依赖的并行任务，OperationQueue，ReSwift，Future & Promise 都是常用的备选方案，但这些方案相对较重（"heavy-handed"），作者基于 DispatchGroup 封装了一套轻量、简洁的 "Task-based" 的解决方案，推荐阅读。

## 工具

### [Localization in Swift like a Pro](https://gist.github.com/Dschee/700d28a34ad6d6a3c66885f592d99afd?utm_campaign=Indie+iOS+Focus+Weekly&utm_medium=rss&utm_source=Indie_iOS_Focus_Weekly_209)

你是否仍在用几年前的方式进行本地化？你知道有更好的方法吗？本地化一直令人痛苦，但阅读这篇文章后，你会发现它并不是那么糟糕。本地化的同步更新 Xcode 并不支持，但你可以使用 [BartyCrouch](https://github.com/Flinesoft/BartyCrouch) 和 [SwiftGen](https://github.com/SwiftGen/SwiftGen) 这些工具来解救你。

### [XCSnippets](https://github.com/dtaylor1701/XCSnippets)

合理的使用代码片段可以有效提高你的 Coding 效率。XCSnippets 工具可以让你使用命令行方便的将 .codesnippet 从 Git 仓库安装到 Xcode。你还可以使用作者开源的代码片段仓库 [XCUISnippets](https://github.com/dtaylor1701/XCUISnippets) 或编写并开源自己的代码片段。

## 代码

### 🌟 [MVVM-TemplateProject](https://github.com/popei69/TemplateProject)

用 Swift 实现 MVVM 的 Demo 项目，可以同时配合作者关于 MVVM 的 3 篇文章学习，适合新手入门。

1. [How to implement MVVM pattern in Swift from scratch](https://benoitpasquier.com/ios-swift-mvvm-pattern/)
2. [Unit Testing your MVVM architecture in Swift](https://benoitpasquier.com/unit-test-swift-mvvm-pattern/)
3. [How to integrate RxSwift in your MVVM architecture](https://benoitpasquier.com/integrate-rxswift-in-mvvm/)

### [Nantes](https://github.com/instacart/Nantes)

著名的 UILabel 替代库 [TTTAttributedLabel](https://github.com/TTTAttributedLabel/TTTAttributedLabel) 的 Swift 复刻版，支持 UILabel 的及 TTTAttributedLabel 所增添的新特性，支持 iOS 8.0+。

## 音视频

### [ggtalk | 如何（连续两次）获得 WWDC Scholarship](https://talk.swift.gg/20)

新的一期 ggtalk 邀请到了 [@ApolloZhu](https://github.com/ApolloZhu) 来聊聊 WWDC Scholarship，WWDC Scholarship 是苹果的一个类似奖学金的奖项，申请的学生靠提交一个极具创意的 playground 的作品来参与评选，如果获奖则可以获得免费参加 WWDC 的机会，当然餐食和酒店也是包含了的。Apollo 目前还是高中生，但已经连续获得两次 WWDC Scholarship，这次分享里他谈了申请的一些技巧以及整个过程中有趣的体验。对 WWDC 感兴趣的童鞋不容错过。

## 内推

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

## 本期编辑

[@四娘](https://kemchenj.github.io)，[@享耳先森](https://github.com/iblacksun)，[@Damonwong](https://github.com/Damonvvong)，[@折腾范儿_味精](http://weibo.com/agvicking)，[@张嘉夫](https://weibo.com/2949394297)，[@Parsifal](https://weibo.com/parsifalchang)，[@aaaron7](https://weibo.com/aaaron7)，[@kyo](https://github.com/KyoLi)，[@tom510230](https://xiaozhuanlan.com/u/6682065345)，[@anotheren](https://anotheren.com)，[@水水](https://www.xuyanlan.com)，[@looping](https://github.com/looping)，[@老老老老老老老驴](https://weibo.com/u/6090610445)，[@小非86](https://weibo.com/xuyafei86)，[@邦ben](http://weibo.com/linwenbang)，[@红纸](https://github.com/nianran)，[@含笑饮砒霜](http://chinafish.news)，[@JimQ](https://github.com/waz0820)，[@老峰](https://github.com/GesanTung)，[@zvving](https://github.com/zvving)，[@J_Knight_](https://github.com/knightsj)

## 说明

🚧 表示需翻墙，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
