# 老司机 iOS 周报 #176 | 2021-09-27

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

## 🌟 通知

[@Parsifal](https://github.com/ParsifalC)：国庆长假即将到来，周报也将进入短暂休刊，**下一期发布时间将会是 10.18 号**，提前祝大家长假愉快~

## 新闻

### 🌟 得物技术 iOS 专场线下沙龙一期圆满结束

[@Parsifal](https://github.com/ParsifalC)：9.25 日上周六，我们在上海与得物技术一起联合主办了 iOS 专场沙龙活动。我们邀请到了 4 位嘉宾前来分享。他们分别来自于得物技术、字节跳动和阿里巴巴团队，主题涵盖 《得物 iOS 工程演进之路》、《字节跳动自研移动研发工具链 MBox》、《视频特效揭秘》和《基于 MNN 的移动端人工智能实践》。大家的参与热情远超我们预期，甚至现场还临时开了一个分会场，感谢所有人的支持~**活动相关的 PPT 和视频等资料我们正在整理之中，一切就绪之后便会在周报公众号及时发布。**

### 🌟 [Back-deploy concurrency 已合并在 Swift 5.5 Release](https://github.com/apple/swift/pull/39342)

[@Parsifal](https://github.com/ParsifalC)：Swift Concurrency 的向后兼容的提案已于近日被 merge 进 Swift 5.5 的发布分支中，这就意味着 Concurrency 特性并不是 iOS 15 独有了，我们最低可在 iOS 13 中使用该特性。各平台最低支持版本为 macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0。值得一提的是，微信目前最低支持 iOS 11，按目前迭代速度最迟 23 年，将很可能提到 iOS 13+。

> 由 [LeeCenY](https://github.com/LeeCenY) 推荐收录

### [Flutter 2.5 版本发布](https://medium.com/flutter/whats-new-in-flutter-2-5-6f080c3f3dc)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 官方 9 月 9 日正式发布了 2.5 版本，本次版本关闭了 4600 多个 issues，同时包含了诸多性能和工具上的优化，当然也有一些组件及插件上的更新:

- 性能优化
  - 光栅化提升，时间缩减了 2/3
  - UI isolate 事件循环策略优化，帧处理现在优先于处理其他异步事件
  - GC 提升，使得未被使用图像内存能被及时回收
  - 消息通道性能提升 50%
  - Flutter 构建适配 Apple Silicon M1
  - Dart 2.14, 新的语言格式化和特性，以及 lint 

- Widget 更新
  - Android 全屏模式适配
  - Float Action 更新
  - ListView 底部和滚动条优化
  - ScrollMetricNotification
  - Android 设备上相机使用增强

- DevTools
  - 事件追踪能力增强
  - 卡顿诊断加强
  - CPU Flame 增强
  - Widget Inspector 组件信息更加详细

### [App Store 现已开放 iOS 15 和 iPadOS 15 app 提交](https://developer.apple.com/cn/news/?id=f87q5n2j)

[@Parsifal](https://github.com/ParsifalC)：9 月 14 日起 App Store Connect 已经开放 iOS 15 和 iPadOS 15 App 的提交，同时苹果宣布自 2022 年 4 月起，所有提交至 App Store 的 iOS 和 iPadOS app 都必须使用 Xcode 13 和 iOS 15 SDK 构建。

## 文章

### 🌟 🐢 [Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述](https://mp.weixin.qq.com/s/UaQUkdTboYGU0_VYiAooVw)
[@Kyo](https://github.com/KyoLi)：许多人期待已久的支付宝动态化方案 `Cube` 终于公开了，相比较于 Weex 或者 Flutter 这些跨平台方案，`Cube` 更加轻量级一些，尤其在首页卡片这类应用场景下非常适用。实际上，笔者个人也认为，在很多业务场景，这种自研的轻量跨平台动态化方案，其实是更好的选择，可以在技术上更加自主可控。本文是系列文章的第一篇，从项目背景、整体架构、应用场景上做了说明，期待后续的文章。

### 🌟 🐢 [企业微信超大型工程-跨全平台UI框架最佳实践](https://mp.weixin.qq.com/s/JdQmgQ57nWQM99JW_ueFVg)
[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5)：企业微信这次给我们带来了他们在 Flutter 跨平台方面的深度探索。企业微信自身的特点是大量业务逻辑已经抽离为 C++ 的跨平台模块，但各端的 UI 依然还是独立的代码与框架，因此他们对 Flutter 的诉求上定位相当的清晰，那就是“跨平台的UI渲染”。本文重点从，native 与 Flutter 的混合栈开发模式，到单引擎/多引擎的复杂交互实现。从 Flutter 与 native 与 c++ 的通信通道建设，到 Flutter 的性能与体验优化。同时还展现了企业微信庞大的 Flutter 一系列开发提效工具链，非常的实用也非常的强大。最后文章末尾稍微提了一些他们在 Flutter 动态化方面的探索，只是写的非常浅，而且也是基于别的 DSL/Layout 框架，本质上已经脱离了 Flutter 这个整体框架，单独借用其渲染模块，对 Flutter 动态化有兴趣的读者，更推荐深入去了解他们在文中提到的另外 2 种具体框架的动态化实践

### 🐕 [Xcode 13 Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-13-release-notes)

[@Smallfly](https://github.com/iostalks)：本周 Xcode 13 正式版发布，包含 iOS 15，iPadOS 15，tvOS 15，watchOS 8 以及 macOS Big Sur 11.3 SDK。Xcode 13 需在 macOS 11.3 及以上版本运行，支持 iOS 9，tvOS 9，watchOS 2 及以上系统设备调试。

本次更新包含 Swift、Clang、Linking 等二十几个模块的新特性，建议阅读原文了解全貌。

> 另外特别说明一下，Xcode 13 正式支持了 Vim，Vim 党奔走相告。

### 🐕 [The difference between Thread.sleep() and Task.sleep()](https://trycombine.com/posts/thread-task-sleep/)

[@anotheren](https://github.com/anotheren)：线程的休眠与任务的休眠，正如它们名字的字面意思。`Thread.sleep()` 是一个旧方法，来自 `Foundation`，它会在指定的时间内卡住线程（CPU无法响应其他工作）；`Task.sleep()` 是全新的 async 方法，来自 `Swift Concurrency`，它只会让当前的 Task 暂停/休眠指定时间，而不是阻止线程，CPU 可以继续其他任务。更详细的对比与案例，请阅读原文。

### 🐕 [Linting vs Formatting: A Swift Guide Part 1](https://jasonzurita.com/linting-and-formatting-swift-part-1/) [Part 2](https://jasonzurita.com/linting-and-formatting-swift-part-2/)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：Part 1 对 Linting 与 Formatting 的概念进行了明确，举个例子：Linting 包含 检查函数的圈复杂度、强制拆包等，Formatting 包含 code style 等。Part 2 推荐了一些工具如 [tailor](https://github.com/sleekbyte/tailor)、 [SwiftLint](https://github.com/realm/SwiftLint) 等，并介绍了这些工具在 PR 或 CI 中的最佳实践。

### 🐕 [关于 Swift Package Manager 的一些经验分享](https://mp.weixin.qq.com/s/s2GZ13PVdVa5t-SABArtdA)

[@四娘](https://kemchenj.github.io/)：这是一篇来自字节跳动团队的 SPM 经验分享，介绍了 SPM 基本的使用方式，团队内部的实践经验，常见问题以及与 Cocoapods 的对比。

### 🚧🐕 [迁往 Swift 5.5 Concurrency 之路：重构方式的选择](https://imtx.me/blog/migrate-to-swift-5-5-concurrency-choices-of-refactor-method/)

[@极速男孩](https://github.com/ztlyyznf001/)：苹果在 Swift 5.5 中加入了  Concurrency 的支持，最早在 iOS 15 上支持，但是最近苹果完成了 Back-Deploy 的开发支持 iOS 13 以上的系统。本文主要介绍了如何用 Xcode 中的 Refactor 工具将你的老的回调方法迁移到 async await 方法中去。

### 🐕 [Alibaba iOS 工程架构腐化治理实践](https://mp.weixin.qq.com/s/gS9yC4HUWxi0vkjQPdo5tw)

[@红纸](https://github.com/nianran)：本文为作者在工程架构上的腐化治理实践，其主要问题是初期没有明确的项目规范导致工程环境混杂，出现一系列的蝴蝶效应：头文件都添加到了 search path -> import 没规范 -> 模块依赖没有补全 -> 循环依赖，模块强耦合 -> 子项目没办法打包 -> Swift 没办法进行。

面对这样一个混杂的工程环境，作者从依赖树开始着手分析，四象限分层治理模块和依赖。利用自动化脚本，分析模块依赖关系、补全模块间依赖、自动生成 umbrella 头文件、修改不规范头文件等等来对腐化的工程进行整治。光治理还不够，为了防止项目继续腐化，在构建流水线末端设置构建卡口，设置规则防止不合规的代码继续产生。

### 🐎 [你真的了解符号化么？](https://mp.weixin.qq.com/s/6Odq8JTYXL0bA8xyWEO1Og)

[@Jimq](https://github.com/waz0820)：周报第 175 期推介了两篇关于符号化的文章，分别来自字节和百度，本篇文章来自搜狐，可以对照着一起看。字节文侧重于符号化的在线解析，针对在 Linux 服务器上规模化部署的痛点，对最终方案的实现原理、解析流程中每个节点的具体实现进行了深入讲解。百度文本地符号化与线上符号化并重，内容比较全面。本文侧重于 macOS 上的本地符号化，详细列举了相关参数、流程和工具，更加规整实用，方便开发者个人快速上手及日后查阅。

## 摸鱼周报

[@摸鱼周报 #27](https://mp.weixin.qq.com/s/WvctY6OG1joJez2g6owroA)：第二十七期摸鱼周报来啦，一起来看下本期概要：

* 访谈内容：跟 RunsCode 聊聊编程和兴趣爱好，以及如何在 1min 之内复原魔方😏。
* Tips：iOS 识别虚拟定位调研；使用 App Store Connect API Key 解决 Fastlane 双重验证问题。
* 面试模块：KVC 取值和赋值过程的工作原理。
* 优秀博客：关于 Combine 的相关文章推荐。
* 学习资料：阮一峰最新发布的 C 语言入门教程，GitHub 漫游指南。
* 开发工具：Xcode 工程管理工具 XcodeProjects。

## 代码

### [ScriptWidget](https://github.com/everettjf/ScriptWidget)

[@JonyFang](https://github.com/JonyFang)：ScriptWidget 开源了，使用 React JSX 样式的代码产生 iOS 上的小组件，repo 目前仅支持了 iOS，也是 SwiftUI 动态化生成界面的雏形。

## 赞助者

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 iTDriverr 哦~**

## 内推

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

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

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

## 关注我们

我们开通了公众号，每期发布时公众号（LSJCoding）会推送消息，欢迎关注。

![](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）
