# 老司机 iOS 周报 #89 | 2019-11-04

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

## 新闻

### [SSWG Annual Update](https://swift.org/blog/sswg-update/)

[@looping](https://github.com/looping)：本文是 SSWG (Swift Server Work Group) 小组向我们分享的他们在去年设定的工作目标上的最新进展。文章一开始介绍了他们的工作方式，即通过一个叫做 孵化过程（Incubation Process） 的机制，或流程（类似 Swift Evolution）来保证在类库和工具演进上的质量。接着列举了通过该流程产出的 9 个提议，分别对应 9 个类库，以及在 Linux 上输出的一些工具。最后描述了接下来 2020 年的工作重点，虽然对要演进的内容只做了简短描述，但也让人感觉是清晰明确和有所期待的。

## 文章

### 🐎 🌟 [iOS 13.2 为何杀 App 这么频繁以及什么是 wakeup](https://imtx.me/archives/2809.html)

[@zvving](https://github.com/zvving)：升级 iOS 13.2 后微信在后台频繁被杀给大量用户带来困扰。网络上微信 wakeup 分析日志流传甚广，也有人因此断定微信不遵守 iOS 后台唤醒规则，因此被杀。
```
Wakeups: 45001 wakeups over the last 192 seconds (234 wakeups per second average), exceeding limit of 150 wakeups per second over 300 seconds
```
[图拉鼎](http://weibo.com/tualatrix)查阅资料后，用这篇文章告诉大家：日志中的 wakeup 并不是用户使用意义上的后台唤醒，而是线程唤醒。比如调用`peformSelector:onThread:`或者`dispatch_async`都会触发线程唤醒。
目前能确定的是 wakeup 调用不是微信等 App 被杀掉的直接原因，不能简单归因后台频繁被杀是开发商微信问题。

事实上，频繁后台被杀的不仅仅有微信，希望苹果和相关开发商早日解决此问题。

### 🐕 [Packages 的开发和提交](https://mp.weixin.qq.com/s/sDstU5YqwFHzbMxPAfbkvw)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：在 Flutter 项目的开发中通过 Package 可以创建易于共享的模块化代码, 所以如何创建 Package 是一个必会技能, 本文可谓是手摸手带你完全掌握 Package 的开发方法, 并且对多端的实现有详细的讲解.

### 🐕 [Draft Proposal: Swift PM Package Resources](https://forums.swift.org/t/draft-proposal-package-resources/29941?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B427)

[@享耳先森](https://github.com/iblacksun)：Swift PM 终于要有正式的资源打包及加载方式了。这个提案的主要内容想解决 Swift PM 如何约定资源存储路径及各平台下如何用一致的代码进行加载。

### 🐕 [MetricKit](https://nshipster.com/metrickit/)

[@AidenRao](https://weibo.com/AidenRao)：[MetricKit](https://developer.apple.com/documentation/metrickit?language=objc) 是 iOS 13 中的一个新框架，用于收集 APP 的各项性能指标。诸如耗电，启动时长，交互耗时，磁盘使用等指标。
文章介绍了 MetricKit 及它的使用方式，也提供了一个收集 MetricKit 数据的自建 Web 服务方案。帮助你，提供更好的用户体验。

### 🐕 🌟 [macOS 内核之从 I/O Kit 电量管理开始 | 枫言枫语](https://justinyan.me/post/3961)

[@莲叔](https://weibo.com/aaaron7)：对于绝大多数 iOS 开发者朋友来说，电量管理都是相对陌生的话题，一方面是系统往往不会提供特别友好的 API，另一方面需求确实也不多。不过这并不妨碍以电量管理作为口子去了解学习系统内核的知识。本文作者也是从这个目的出发，分别介绍了 macOS 中的电量管理的 API 以及使用方法，顺带介绍了 mach_port 的通信机制，最后也介绍了 iOS 上的一些使用。整体内容比较详实，推荐对系统编程感兴趣的同学研究。

### 🐕 [iOS 调试 Rust](https://juejin.im/post/5db06e03e51d452a284c0d92)

[@EyreFree](https://weibo.com/eyrefree777)：本文记述了作者在成功进行 [iOS 编译和部署 Rust Library](https://juejin.im/post/5dabeac451882506974d6cb6) 后对编译产物的具体使用和调试过程。Rust 是一门为内存安全和速度而设计的系统级编程语言。由 Mozilla 打造，目的是用来开发下一代高性能跨平台软件，它能够在 Android 和 iOS 平台间以一种高性能和安全的方式共享代码，又比 C++ 容易使用得多。如果你对此感兴趣，作者后续还写了一篇 [Xcode 调试 Rust](https://juejin.im/post/5db1b7476fb9a0202d0448ab) 进一步介绍了更多调试姿势。

### 🐎 [Mac下通过Apple Configurator 2获取ipa包](https://juejin.im/post/5c6e87af51882523f02666a6)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：想要获取苹果应用商店的 ipa 包可以通过 PP 助手直接下载，而且都是已经砸过壳的，但是现在 PP 助手上很多软件已经不再更新了。如果有系统在 9.0 以下的苹果设备也可以通过手机直接导出，但是现在 9.0 以下的手机已经寥寥，抑或是通过越狱机导出。还有一个导出 ipa 包的方法，就是本文所说通过  Apple Configurator 2 导出，操作简洁明了。

### 🐎 [闲鱼前端基于serverless的一种多端开发解决方案](https://mp.weixin.qq.com/s/VLsVTe4ZyOJ9rNyVf5aXyg)
[@极速男孩](https://github.com/ztlyyznf001)：本文主要介绍了通过 serverless 来统一前端的 viewmodel 层，前端不需要任何的数据处理逻辑，而仅仅需要根据后端返回的数据来直接进行展示。这样使得前端不需要了解业务逻辑也可以完成页面的开发，也方便对 viewmodel 层进行复用。

### 🐢 [SwiftSyntax 详解](https://juejin.im/post/5dac6d3ef265da5b741514b0)

[@老峰](https://github.com/GesanTung)：本文详细介绍了SwiftSyntax 开源库，使用它我们可以分析、生成、优化 Swift 代码。文章包括 Swift 编译器结构介绍，SwiftSyntax 主要结构，SwiftSyntax API 示例，以及 SwiftSyntax 的一些实际应用（检测未使用代码，语法高亮等），对编译原理或者代码分析、生成、转换工具实现原理感兴趣的读者可以研究研究。

推荐阅读：
- [Improving Swift Tools with libSyntax](https://academy.realm.io/posts/improving-swift-tools-with-libsyntax-try-swift-haskin-2017/)

### 🐎 [Announcing the pod merge plugin for Cocoapods!](https://swiftier.co/2019-10-17/announcing-cocoapods-pod-merge)

[@四娘](https://kemchenj.github.io/)：在使用 Cocoapods 时一个常见的问题就是动态库数量的增加会大幅降低 App 的启动速度，解决方案有两个方向，其中一个是动态库合并。但之前动态库的合并基本上都需要大家手写脚本去完成，现在 Cocoapods 社区就发布了一个新的插件去简化这个过程：

```ruby
group "Networking"
  pod "AFNetworking"
  pod "SDWebImage"
end
```

只要编写动态库合并的声明文件，在 `pod install` 时插件就会自动完成动态库的合并，使用这种方式可以减少 13-30% 的启动时间，唯一美中不足的就是无法接入二进制库，必须以源码接入才可以。

## 工具

### [InjectionIII](https://github.com/johnno1962/InjectionIII)

[@EyreFree](https://github.com/EyreFree)：InjectionIII 允许您在 iOS 模拟器中以增量方式更新类方法的实现，而无需重新生成或重新启动应用程序，从而为开发人员节省了大量时间。

### [dirtrace - 终极文件夹内容占比查看工具](https://mp.weixin.qq.com/s/BJF35SFlM7oU8mvT8duBRg)

[@水水](https://www.xuyanlan.com): dirtrace 这个小工具的作用是把一个文件夹的内容，用 Chrome Tracing 展示出来，表示出文件的大小以及文件夹之间的父子关系，还提供了可视化浏览方法。 附上源码地址：https://github.com/everettjf/dirtrace, 有兴趣的朋友可以研究和使用哦～

## 内推

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


