# 老司机 iOS 周报 #84 | 2019-09-23

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

## 新闻

### 🌟 [《WWDC19 内参》专栏免费开放啦](https://xiaozhuanlan.com/wwdc19?rel=7579246804)

[@老峰](https://github.com/GesanTung)：《WWDC19 内参》是 iOS 三大组织（老司机 iOS 周报、SwiftGG 翻译组、知识小集），一起联名发起的一个小专栏，这个专栏集结了三大组织内的一线 iOS 工程师，为你深度解读 WWDC19 中那些值得关注的 Session。上周 iOS 13 正式推送，如何在 iOS 13 上适配深色模式；iOS 13 有哪些新特性等...这些热点问题专栏内都有答案，目前专栏已免费开放，干货多多，感兴趣的读者快来[订阅](https://xiaozhuanlan.com/wwdc19?rel=7579246804)吧。

### [Flutter 1.9 正式发布](https://mp.weixin.qq.com/s/A58tTlb4jeJ3qyPdSiDVMA)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：在谷歌为中国开发者举办的最高级别会议 Google Developer Days 的第一天，现场公布了 Flutter 的最新稳定版本：Flutter 1.9。这是有史以来**规模最大**的更新，包含来自 100 多位贡献者的超过 1,500 个 PR. 其中几个比较重大的更新如下:

- 支持macOS Catalina和iOS 13操作系统
- 新的 Material 小部件
- 全球语言支持
- Dart 2.5 发布
- 工具链改进
- Web 平台的 Flutter

## 文章

### 🐎 [iOS 13 APNS Device Token 兼容问题](https://info.umeng.com/detail?id=174&&cateId=1)

[@享耳先森](https://github.com/iblacksun)：iOS 13 修改了 `[NSData description]` 实现，导致友盟、个推等 Push SDK 有兼容性问题。`description` 方法其实是 debug 用的，希望开发者们谨慎使用。

### 🐕 [RxSwiftWidgets: Declarative Development for UIKit](https://medium.com/better-programming/introducing-rxswiftwidgets-f7a81bc54fe1)

[@zvving](https://github.com/zvving)：想要与 SwiftUI+Combine 类似的声明式开发，还想要支持较低版本 iOS，还想要用 RxSwift，贪心吗？

如果你也有这些期望，推荐参考本文作者设计实现 [RxSwiftWidgets](https://github.com/hmlongco/RxSwiftWidgets) 的心路历程。

> 注：RxSwiftWidgets 基于 Swift 5.1，最低支持 iOS 11。

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

[@Damonwong](https://github.com/Damonvvong)：这是一篇站在前端工程师的角度去分析如何去设计一个小程序框架，文章针对解决在 Vue、SPA、JS 等技术选型前提下，去限制一些把标签的使用和 js 的逻辑控制，写的还是很赞的。但是，个人觉得作者针对小程序的技术框架点评还是有些片面。目前主流的小程序技术主要有几个技术要点：

1. 设计一套精简而不臃肿的 DSL，并解析交给渲染引擎渲染。
    目前主要还是基于 WebView，但也有人在研究基于 RN 或者基于 Flutter 各种不同的引擎。
2. 设计一个 Service worker 做全局管理和逻辑分离

个人觉得使用 Vue + SPA + JS 作为小程序的开发技术选型，不是一个明智之举，还是可能可能会被放弃的。

### 🐎 [Google Engineering Practices Documentation](https://github.com/google/eng-practices)

[@张嘉夫](https://github.com/josephchang10)：来自谷歌的工程通用最佳实践，覆盖各种语言和项目。这个文档会尽可能公开，从而帮助开源项目或其他组织。此文档当前包含如下文档：[谷歌代码审核指南](https://github.com/google/eng-practices/blob/master/review/index.md)。

### 🐎 [GitHub Actions 入门教程](http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html)

[@红纸](https://github.com/nianran)：GitHub Actions 是 GitHub 的持续集成服务，于 2018 年 10 月推出（但目前任然处于测试阶段）。Github 将动作拆分成 Actions，这样有助于我们多项目公用同一份 Actions，市面上也有提供官方的 [Actions](https://github.com/marketplace?type=actions) 和 awesome 系列的 [awesome-actions](https://github.com/sdras/awesome-actions) 库供你选择。在本文中你将收获基础的 CI 搭建知识以及操作流程。相较于先前每次都要硬写脚本命令来说，这样做极大的降低了使用成本。

### 🐎 [App Store Review Guidelines -- Sign in with Apple](https://developer.apple.com/app-store/review/guidelines/?from=groupmessage&isappinstalled=0#sign-in-with-apple)

[@极速男孩](https://github.com/ztlyyznf001)：在2019年 WWDC 上，苹果推出了 Sign In with Apple 功能。苹果更新了审核规则以后要求所有使用第三方登录的应用必须向用户提供以苹果账号登录的选项。但苹果同样举出了几种特例的情况：

- 仅使用公司内部账号登陆。
- 教育或者企业应用，需要使用现有的教育和企业帐号登录。
- 应用需要使用政府或者行业背景的共名身份系统或者 电子ID 进行登录。
- 应用是特定的第三方客户服务客户端，需要使用邮箱，社交帐号，或者其他第三方服务来获取她们的内容。


### 🐕 [WWDC 2019: 机器学习移动端的峥嵘初现 Core ML 3.0](https://www.jianshu.com/p/eed7dd1d266b)

[@莲叔](https://weibo.com/aaaron7)：CoreML 相信广大的开发者们一定不陌生，自从苹果在 iOS 上推出该框架后，越来越多的 app 都会加入一些数据驱动的应用来优化用户的体验。本文介绍了苹果最新的 CoreML3.0 的新 feature，比如本地模型个性化（能够根据本地用户的行为数据增量的更新模型）、神经网络优化（更多的传输类型化和网络结构），更多的数据类型支持（声音和活动）等等。总体来说 CoreML 越来越强大了，可以预见在未来的 1-2 年内，app 的智能化仍然是一大趋势。

### 🐕 [WWDC 2019: 机器学习新工具 Create ML App](https://www.jianshu.com/p/a5ca26d296ba)

[@莲叔](https://weibo.com/aaaron7)：CreateML 是 Apple 官方推出的一款能够一站式通过数据生成模型的工具，配合 iOS 上的 CoreML，能够实现很 fancy 的移动端 AI 应用。本篇文章简单的介绍了 Create ML app 的基本使用流程，感兴趣的同学可以关注

### 🐕 [技术面试最后反问面试官的话](https://github.com/yifeikong/reverse-interview-zh)

[@AidenRao](https://weibo.com/AidenRao)：面试就像相亲，你需要用心准备一些问题，好足够了解对方，才能找到适合自己的对象。本文列了一些提问，帮助你更好的了解招聘方。

### 🐎 [iOS13 适配](https://juejin.im/post/5d745f8af265da03b5746fa0)

[@J_Knight_](https://github.com/knightsj)：作者在本文中介绍了 10 个关于 iOS 13 的适配问题。这些问题中有关于 API 的调整：比如直接调用 KVC 的 ``setValue:forKeyPath: `` 会造成崩溃，以及在 iOS 13中需要显示设置 ``modalPresentationStyle``。也有关于工程设置方面的问题，比如 LaunchScreen 替代 LaunchImage；以及暗黑模式的适配。近期有做 iOS 13 适配的读者可以简单浏览一下本文。

## 代码

### [Dio 3.0发布，支持Flutter Web 和 Http/2.0](https://juejin.im/post/5d822aefe51d4561cf15e07e?utm_source=gold_browser_extension)

[@邦Ben](https://weibo.com/linwenbanag)：Flutter 常用网络库 Dio 日前发布3.0新版本更新，主要支持点如下：

- 支持 Flutter web
- 将 CookieManager 抽离为单独的包
- 提供了 Http/2.0 adapter.

大版本升级带了一些破坏性升级，升级的时候，可以看下提供的[升级指南](https://github.com/flutterchina/dio/blob/master/migration_to_3.0.md)

## 音视频

### 🐎 [在 Xcode 11 中创建一个不带有 storyboard 的项目的方法有些新变化](https://www.youtube.com/watch?v=Htn4h51BQsk)

[含笑饮砒霜](https://weibo.com/chinafishnews/)：SceneDelegate 是 iOS 13 中新加入的通过 Scene 管理 App 生命周期的方式，在 App 完成启动后，控制权被交接给 SceneDelegate。因此在没有 Storyboard 的情况下创建新项目的方式发生了一些变化。在这个视频中，作者 Sean Allen 将介绍如何在不使用 Storyboard 的情况下在 Xcode 11 中创建新的项目。


## 内推

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


