# 老司机 iOS 周报 #248 | 2023-06-12

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/248.jpg?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## 新闻

### 🐕 [U4 5.0 内核正式发布](https://mp.weixin.qq.com/s/Yv5GO2FjXg6CPMf3tRsjDQ)

[@莲叔](https://github.com/aaaron7): UC 是国内为数不多的在深度定制 Chromium 内核上持续投入的团队，近期发布了 U4 5.0 版本，在性能、稳定性和功能覆盖度层面相比 Chromium 100 版本都有大幅的提升。同时，文章从渲染架构、JS 引擎、通用能力和基础体验几个方面分享了新版本所做的具体工作。推荐对于浏览器内核优化有兴趣的同学阅读。

### 🐕 [There are so many cool new features in Swift and Xcode](https://www.swiftwithvincent.com/newsletter/there-are-so-many-cool-new-features-in-swift-and-xcode)

[@AidenRao](https://weibo.com/AidenRao)：文章作者第一时间安装了 Xcode 15，并分享他发现的比较酷的新功能：
- 当使用条件编译时，与当前环境不匹配的代码将被 Xcode 自动变灰。
- 可以给代码添加书签
- #Preview 现在也支持 UIKit 和 AppKit
- 对 Swift 宏的支持

## 文章

### 🌟 🐕 [通过 SIL 看 Swift 的方法派发](https://mp.weixin.qq.com/s/m8C_ShtAtLcgjQv9GRVObQ)

[@JonyFang](https://github.com/JonyFang)：在 Swift 语言和 LLVM IR 之间，swiftc 里加入了 SIL。通过 SIL，能够对 Swift 进一步的优化。SIL 相比汇编，更容易读懂。我们将其作为工具，了解和学习 Swift 语言的方法派发机制。也借助于 SIL 解释编码过程中遇到的问题。本文的内容主要介绍了 SIL 中关于方法调用的一部分：

1. SIL 介绍
2. 生成 SIL
	- 声明和定义
	- 代码块
	- 函数表
3. Swift 方法派发
	- 直接派发
	- 函数表派发
	- 消息派发
4. 几个场景问题的解决
	- 场景一：Protocol Extension
	- 场景二：父类未实现协议方法
	- 场景三：OC 混编

### 🐕 🌟 [移动端 APP 组件化架构实践](https://juejin.cn/post/7240333779222167608)

[@Cooper Chen](https://github.com/cjlcooper)：本文是京东的开发同学对于组件化在中大型 App 工程中实践的经验和思考，同时针对组件化过程中的一些问题进行了探讨，本文通过以下问题来介绍组件化这种开发架构的思想和常见的一些问题：
- 为什么需要组件化
- 组件化过程中会遇到的挑战和选择
- 如何维护一个高质量的组件化项目

可以为组件化工程架构需求的团队提供不错的经验分享。


### 🐕 [iOS 17: Notable UIKit Additions | Swiftjective-C](https://www.swiftjectivec.com/ios-17-notable-uikit-additions/)

[@Barney](https://github.com/BarneyZhaoooo)：这篇文章讨论了 UIKit 在 iOS 17 中的新增功能和变化。主要介绍了以下新特性：

- Unavailable Content 用于实现空数据视图。
- Preview Syntax 让 Swift 新宏支持 UIKit 的 Xcode 预览。
- Automatic Label Vibrancy 提供了标签自动支持动态效果。
- Symbol Animations 让 SF Symbols 在按钮和图像中实现动画，增加了多种字体样式，以及用于增强自动填充功能的新文本内容类型。

### 🐕 [移动端浏览器性能优化探索](https://mp.weixin.qq.com/s/SKO3vZXTTYE2pRCFaT5H3A)

[@莲叔](https://github.com/aaaron7): 现在移动端越来越多的业务会采用 App 内嵌 webview，然后由前端通过 H5 技术来承载。显然，受限于移动端设备的性能，在移动端上写 H5 的代码和传统面向 PC 的 H5 是有区别的，这篇文章就是主要介绍了在移动端写 H5 代码时需要关注的性能问题。文章首先从渲染的原理上分析了 H5 页面卡顿的原因，然后提出了衡量卡顿的指标，再结合浏览器的运行原理分析了潜在的优化方向，推荐和 H5 打交道比较多的客户端同学和前端同学阅读。

### 🐎  [自動將 asset 的圖片和顏色變成 ImageResource 和 ColorResource 的型別屬性 — Xcode 15 新功能](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E8%87%AA%E5%8B%95%E5%B0%87-asset-%E7%9A%84%E5%9C%96%E7%89%87%E5%92%8C%E9%A1%8F%E8%89%B2%E8%AE%8A%E6%88%90-imageresource-%E5%92%8C-colorresource-%E7%9A%84%E5%9E%8B%E5%88%A5%E5%B1%AC%E6%80%A7-xcode-15-%E6%96%B0%E5%8A%9F%E8%83%BD-3e321213a453)

[@zoeGuo](https://github.com/zoeGuo)：Xcode 15 开始可以用更方便的方式生成图片和颜色了。简单讲我们原来使用图片常用的方式为：``` UIImage(named: "peter") ``` ，Xcode 15 中我们可以直接这样使用：``` UIImage(resource: .peter) ```。在 Build Settings 中将 Generate Swift Asset Symbol Extensions 设置为 YES 后，Xcode 会自动将 Asset 的图片和颜色变成 ImageResource 和 ColorResource 的属性。这一新能力同时支持 SwiftUI 和 UIKit，并且支持旧的 iOS 系统版本！作者还介绍了生成的属性的一些命名规则：是以小写字母开头的驼峰命名；如果我们自己定义的名字中出现 color/image 产生的属性名中会移除 color/image；不要以数字开头否则生成的属性会被添加上下划线。（原文参考链接 ： [Xcode 15 Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes)）

### 🐕 [使用 #Preview macro 定义预览画面](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E4%BD%BF%E7%94%A8-preview-macro-%E5%AE%9A%E7%BE%A9%E9%A0%90%E8%A6%BD%E7%95%AB%E9%9D%A2-ios-17-%E6%96%B0%E5%8A%9F%E8%83%BD-bc850b2c11fc)

[@水水](https://www.xuyanlan.com/)：从 Xcode15 开始，帮画面加上 preview 变得更方便了，它有以下三大改进：
- preview 的程序变得更精简了，使用 #Preview { } 即可定义 preview，旧版就比较冗长
- SwiftUI 的 view 和 UIKit 的 view 和 view controller 都能快速加上 preview
- 方便预览 widget 不同时间点的样子

本文详细列出了上诉三点的具体使用方法和示例，感兴趣的朋友可以阅读或实践下哦 ~

### 🐕 [Demystifying SwiftUI Animation: A Comprehensive Guide](https://betterprogramming.pub/swiftui-animation-mechanism-a1adf2b9b417)

[@Damien](https://github.com/ZengyiMa): SwiftUI 使用声明式语法来描述不同状态下的 UI 呈现，包括动画，本文全面介绍了 SwiftUI 的动画机制，并提供了大量的演示代码。概括而言，对于 SwiftUI 动画有如下几个总结：

* 动画是从一种状态到另一种状态的平滑过渡。
* 声明动画需要三个元素：时序曲线算法函数，将状态（特定依赖项）与时序曲线函数相关联的声明，依赖于状态（特定依赖性）的可动画组件
* 掌握状态变化的结果。
* 计时函数与其依赖的关系越精确，产生异常动画的可能性就越小。
* 独特且稳定的视图标识符（结构的或显式的）有助于避免动画异常。

### 🐕 [Use Swift Macros to Initialize a Structure](https://betterprogramming.pub/use-swift-macros-to-initialize-a-structure-516728c5fb49)

[@Smallfly](https://github.com/iostalks)：本文主要介绍了如何在 Swift 5.9 和 Xcode 中使用 Swift 宏来自动生成 Swift 结构体的初始化代码。展示了如何在 Xcode 中创建、命名、实现和调试 Swift 宏，这对于实际应用非常有帮助。

需要注意的是，尽管这个功能很强大，但应适度使用，过度使用宏可能使代码变得难以理解和维护。总的来说，Swift 宏对 Swift 开发者来说是一个实用且强大的工具。

更多 Swift 宏内容可参考 [WWDC 23 Write Swift macros](https://developer.apple.com/videos/play/wwdc2023/10166/)。

## 摸鱼周报

[@摸鱼周报 #96](https://mp.weixin.qq.com/s/BM3SucfO9yhQChIPbnuwrA)：第 96 期摸鱼周报来了，一起来看下本期概要：

* 本期话题：Vision Pro 已经打开空间计算的大门
* 内容推荐：WWDC 相关的新设备、新框架、新功能有关的博客文章
* 摸一下鱼：可以总结 WWDC 视频的 AI 插件 SummarAI；从 Session 标题看 WWDC22 到 WWDC23 的变化；Learn about visionOS；少数派的《100 小时后 请加我苹果开发者》课程

## 内推

重新开始更新「iOS 靠谱内推专题」，整理了最近明确在招人的岗位，供大家参考

- [杭州] 淘宝 - 终端平台 - iOS/Android/C++
- [上海] flomo - 招聘 iOS 开发
- [北京] TikTok - 招聘 iOS 开发
- [深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 / 算法
- [上海 / 深圳] SHEIN - iOS/Android 开发 团队介绍

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2021」，领取 2017/2018/2019/2020 内参**

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