# 老司机 iOS 周报 #97 | 2019-12-30

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

## 新闻

### 🌟 [Updating Apps that Use Web Views](https://developer.apple.com/news/?id=12232019b)

[@anotheren](https://github.com/anotheren)：如果你还在使用 `UIWebView`， Apple 已经给你下了最后通牒。自 2020 年 4 月起，使用 `UIWebView` 的新应用将无法提交到 App Store；自 2020 年 12 月起，相关旧应用也将无法提交更新。赶紧计划迁移到 `WKWebView` 吧。

## 新手推荐

### 🌟 🐎 [Clean Architecture and MVVM on iOS](https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3)

[@极速男孩](https://github.com/ztlyyznf001)：本文介绍了如何在 iOS 中使用 MVVM 架构，MVVM 各个部分如何在 iOS 中发挥作用，以及如何保持一个清晰的文件结构。

## 文章

### 🌟 🐢 [系列文章：多地图源业务向地图控件开发思路](https://juejin.im/post/5e01c75c51882512766f4cf0)

[@享耳先森](https://github.com/iblacksun)：如果你在开发地图相关 App，应该知道服务商地图质量各有长短，所以，最好是能适配多种地图，让用户选择。

这系列文章介绍了如何对地图服务进行抽象，可以方便的切换地图服务，同时在地图之上封装了统一的 UI 交互。

### 🌟 🐕 [用户端智能的应用实践](http://blog.cnbang.net/tech/3643/)
[@莲叔](https://weibo.com/aaaron7)：端智能是近年来客户端除了动态化之外为数不多的技术新方向。端智能，顾名思义就是在客户端上运行机器学习/深度学习的算法。传统的端智能多半都 focus 在解决图形图像领域、NLP 方向的任务，比如 Apple 的 CoreML 与 Vision 框架。最近两年国内的互联网公司纷纷开始尝试拓宽端智能的应用范畴，比如端侧推荐重排等。目前端智能的瓶颈其实并不在于模型如何裁剪，算法如何提效，更多的在于合适的业务场景+合适的特征选取（也就是训练数据）。bang 的这篇文章介绍了他的团队在端智能上的一些业务场景尝试，对于希望落地端智能应用的同学与团队都非常有参考价值。文章举了金额推荐、智能 push 和本地处理三个场景，并且给出了落地过程中遇到的一些问题。从另一个侧面反映了目前端智能仍然处于不断探索的阶段，还没有到大规模普及与应用，但仍然蕴含着巨大的空间。

### 🌟 🐢 [你的 App 在 iOS 13 上被卡死了吗？](https://mp.weixin.qq.com/s/W_AqP8cQy3d5QCMJ8Nzftw)

[@Parsifal](https://github.com/ParsifalC)：一篇由 [OpenUDID](https://github.com/ylechelle/OpenUDID) + `UIPasteboard` + iOS 13 上引发 App 卡死问题的深入分析好文。全文并不局限于这个问题，而是同时总结了排查这个问题过程中用到的方方面面知识技巧，十分值得我们借鉴。看完这篇文章，除了学习到排查复杂小概率问题的技巧，你还会对以下几个知识点有一个更清楚的认识。

- Bugly 等第三方崩溃日志收集服务局限性在哪里？
- 在第三方后台无法捕获崩溃日志时，我们可以做些什么？
- 如何分别在有 dSYM 文件和无 dSYM 文件时解析崩溃日志？
- `UIPasteboard` 是一个系统共享的服务，那么它的数据同步是如何做的？
- UDID 被苹果禁用后的这么长时间，社区使用 UDID 的方式有着怎么样的变化?

### 🐎 [UserDefaults Access via Property Wrappers Is Worse Than You Might Think](https://christiantietze.de/posts/2019/12/userdefaults-property-wrappers/)

[@老峰](https://github.com/gesantung)：本文讨论了文章 [The Advanced Guide to UserDefaults in Swift](https://www.vadimbulavin.com/advanced-guide-to-userdefaults-in-swift/) 使用 Property Wrappers 封装 UserDefaults 可能存在多个地方定义不同初始值的问题，并给出了更优的方案 [SwiftyUserDefaults](https://github.com/sunshinejr/SwiftyUserDefaults.git) 。

### 🐎 [No space left on device: Testing low storage scenarios](https://www.avanderlee.com/debugging/no-space-left-on-device/)

[@Parsifal](https://github.com/ParsifalC)：如果你的 App 大量用到持久化存储技术，那么存储空间不足的错误应该是比较常见的。本文提出了一种利用模拟器重现存储空间不足的技巧，让我们可以轻松在该场景下测试和调试自己的 App。

## 工具

### [Proxyman：网络调试工具](https://proxyman.io)

[@Jimq](https://github.com/waz0820)：Proxyman 是一款 macOS 上的网络调试工具，使用 Swift 和 C++ 编写，美观高效功能强大，免费版就能使用抓包 / rewrite / breakpoint 等基本功能，推荐一试。PS：Setapp 也包含了这个 App。

## 代码

### [R.swift](https://github.com/mac-cain13/R.swift)

[@zvving](https://github.com/zvving)：类似于 Android 开发中的 R 类，为 image、font、localized-string 等资源提供强类型的访问方式，如：

```swift
let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)
let string = R.string.localizable.welcomeWithName("Arthur Dent")
```
在减少字符串硬编码的同时，带来代码自动完成、编译期检查等功能，推荐一试。

### [HomeKit Accessory Development Kit (ADK)](https://github.com/apple/HomeKitADK)

[@老驴](https://www.weibo.com/6090610445)：苹果放出了 HomeKit 附件开发包，其缩写为 HomeKit ADK。

此 SDK 主要面向开发 HomeKit 相关的设备的开发者，提供了快速开发 HomeKit 相关功能的 API。需要注意的是，HomeKit ADK 只能用于非商用用途开发和使用，若进行商业开发，则需要注册 MFI，然后使用对应的商业版本的 SDK。

### [KeyedCodable](https://github.com/dgrzeszczak/KeyedCodable)

[@四娘](https://kemchenj.github.io)：KeyedCodable 是一个简化 Codable 逻辑的库，之前一些自定义的逻辑都需要通过手写 decode 和 encode 去完成，例如嵌套，默认值和自定义编码策略等，现在使用这个库就即可自动完成。

### [Hippy](https://github.com/Tencent/Hippy)

[@looping](https://github.com/looping)：Hippy 是由腾讯 QQ 浏览器部门发起，针对**前端开发者**推出的跨端解决方案，它同时支持 React 和 Vue 两种前端主流框架，并且已经在 GitHub 上正式开源。

Hippy 在腾讯内部已经形成一套完整生态，包括对 GCanvas、Lottie、SVG 等都有相应组件封装，同时腾讯内部自研的 Hippy 业务组件库、高性能图形库、异常上报（支持 Sentry）等，也会在未来逐步对外开放。

## 内推

> 美团点评平台事业部业务研发中心技术架构组的招聘高级 iOS 开发，负责美团 App 部跨平台动态化布局项目iOS端SDK开发和维护，参与动态化布局项目编译脚本开发与维护。我们需要你 3 年或以上 iOS 开发经验，扎实的 Objective-C 语言基础，熟练掌握iOS开发、测试、调优等技术，以及相关工具的使用，积极主动，有良好的团队合作精神和强烈的责任感，对移动产品有浓厚兴趣及见解。详情联系美团点评 iOS 高级工程师 SketchK：zhangsiqi1988@gmail.com。

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


