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

6,585 阅读7分钟

老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

SSWG Annual Update

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

文章

🐎 🌟 iOS 13.2 为何杀 App 这么频繁以及什么是 wakeup

@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

图拉鼎查阅资料后,用这篇文章告诉大家:日志中的 wakeup 并不是用户使用意义上的后台唤醒,而是线程唤醒。比如调用peformSelector:onThread:或者dispatch_async都会触发线程唤醒。 目前能确定的是 wakeup 调用不是微信等 App 被杀掉的直接原因,不能简单归因后台频繁被杀是开发商微信问题。

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

🐕 Packages 的开发和提交

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

🐕 Draft Proposal: Swift PM Package Resources

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

🐕 MetricKit

@AidenRaoMetricKit 是 iOS 13 中的一个新框架,用于收集 APP 的各项性能指标。诸如耗电,启动时长,交互耗时,磁盘使用等指标。 文章介绍了 MetricKit 及它的使用方式,也提供了一个收集 MetricKit 数据的自建 Web 服务方案。帮助你,提供更好的用户体验。

🐕 🌟 macOS 内核之从 I/O Kit 电量管理开始 | 枫言枫语

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

🐕 iOS 调试 Rust

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

🐎 Mac下通过Apple Configurator 2获取ipa包

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

🐎 闲鱼前端基于serverless的一种多端开发解决方案

@极速男孩:本文主要介绍了通过 serverless 来统一前端的 viewmodel 层,前端不需要任何的数据处理逻辑,而仅仅需要根据后端返回的数据来直接进行展示。这样使得前端不需要了解业务逻辑也可以完成页面的开发,也方便对 viewmodel 层进行复用。

🐢 SwiftSyntax 详解

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

推荐阅读:

🐎 Announcing the pod merge plugin for Cocoapods!

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

group "Networking"
  pod "AFNetworking"
  pod "SDWebImage"
end

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

工具

InjectionIII

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

dirtrace - 终极文件夹内容占比查看工具

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

内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。

关注我们

我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

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

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)