# 老司机 iOS 周报 #239 | 2023-04-03

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

## 新闻

### [Xcode 14.3 正式版发布](https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes)

Xcode 14.3 的正式版来了，除了大家关心的 iOS 16.4 与 Swift 5.8，部分开发者可能在使用 new 创建对象时遇到 ``new is unavailable`` 的报错。遇到的话需要检查下对应对象的默认 init 方法是否被标注为了 NS_UNAVAILABLE ，如果是的话进行修改即可(之前版本不会强制报错)。因为 new 本身就等价于 alloc + init ，在 init 被禁用的前提下让 new 也在编译阶段报错能够更好地暴露问题。

## 新手推荐

### 🐎  [Xcode Tip: filter to show modified files only](https://www.jessesquires.com/blog/2023/03/22/xcode-tip-filter-modified-files/)

[@Smallfly](https://github.com/iostalks)：在大型 Xcode 工程中，定位已修改文件的效率会降低。这篇文章介绍了使用过滤器来查找最近修改过的文件，并提供了一些快捷键和技巧来更好的使用 Xcode，开发人员能够更加轻松地管理最近修改的代码文件，提高代码开发和维护效率。

## 文章

### 🐢 [Custom Actor Executors](https://github.com/apple/swift-evolution/blob/main/proposals/0392-custom-actor-executors.md)

[@JonyFang](https://github.com/jonyfang)：Actor Executors 是 Swift 中用于处理 actor 模型的并发机制。传统的模型在处理大量并发请求时可能会遇到一些问题。Swift 引入了自定义 actor executors，允许开发人员创建自己的 actor executors 对象，更好地管理并发操作。开发人员可以创建多个 actor executors 对象，并将它们分配给不同的线程或协程。此外，自定义 actor executors 还可以动态地创建或销毁 actor executors 对象，以适应应用程序的需求。

### [Working with percentages in SwiftUI layout](https://oleb.net/2023/swiftui-relative-size/)

[@极速男孩](https://github.com/ztlyyznf001)：本文介绍了如何在 SwiftUI 布局中使用百分比来控制子视图的大小。SwiftUI 的布局中通常不提供相对大小选项，例如“使此视图占其容器宽度的 50 ％”。因此，我们可以在 Layout 协议之上构建自己的相对大小调整器。本文提供了一个名为 RelativeSizeLayout 的私有结构体，用于实现这一目的。同时，在 View 扩展中，我们添加了一个名为 relativeProposed 的公共 API，用于使用刚刚编写的布局。最后，文中还提供了实际使用的示例，展示了如何使用 relativeProposed 来控制聊天泡泡的大小，并说明了在使用相对大小时可能会遇到的一些问题。

### 🐎 [写给小白的 Midjourney 教程](https://mp.weixin.qq.com/s/nqnuqji0tK-4seuACtSjcw)

[@Cooper Chen](https://github.com/cjlcooper)：随着 AI 技术的持续大火，越来越多的机遇 AI 技术的产品或工具相继推出，而 Midjourney 应该是最近最火的 AI Image generator 了，作为一款可以用户通过文字描述，就可以绘制出图像的 AI 的应用，其生成的图像质量之高，令人叹为观止。然而由于 Midjourney 使用起来还有有一些门槛，所以本文写给完全没有任何编程基础的用户，你可以把本文当做一本 Midjourney 操作指南来使用。

### 🐎 [How the relative size modifier interacts with stack views](https://oleb.net/2023/swiftui-relative-size-in-stacks/)

[@zoeGuo](https://github.com/zoeGuo)：这是一篇适合 SwiftUI 初学者的文章。笔者在 HStacks 中使用 .relativeProposed 和 .layoutPriority 对比几种情况下的视图的尺寸，分析出 HStacks 和 VStacks 在使用相对大小时视图尺寸计算的规则，得出结论：HStacks 和 VStacks 并没有将相对大小的修饰先整体计算出一组约束，而是根据子视图优先级的顺序，挨个计算子视图符合的尺寸，排在最后的视图的尺寸表现取决于最后剩余的空间大小。

### 🐎 [一个用在 Swift 中的模块管理框架](https://mp.weixin.qq.com/s/aFM_4OqDYcXPRIdF7x_41w)

[@kemchenj](https://kemchenj.github.io/)：在 OC 里，我们一般是可以通过 `__attribute((used, section("__DATA,"#sectname" ")))` 这种编译器提供的修饰符来将模块信息存到 Mach-O 的 section 去，等到运行时，在 `+load` 或其他时机取出进行注册，这种类似于自动注册的方式自然是很方便。

但是在 Swift 中，上面这种方式自然是不行的，本文作者封装了一套 Module Manager，通过扫描 Mach-O 中的 `__objc_classlist` 节拿到所有的 class，继而过滤出符合模块要求的 class 进行后续操作。

另外 Swift 官方在几个月前也提出过[一个草案](https://forums.swift.org/t/pitch-custom-metadata-attributes/62016)提供自定义注解 API，让我们可以通过类型安全的方式提供元数据，并且可以在运行时进行读取和操作，感兴趣的同学也可以查看。

### 🐎 [Flutter 小技巧之霓虹灯文本的「故障」效果的实现](https://mp.weixin.qq.com/s/VAF5IFsVvZMNikilckUcZg)

[@Crazy](https://github.com/jiyan135960)：这是一篇优秀的 Flutter 实践文章，介绍了如何制作霓虹灯特效。文章简短明了，首先讲解了如何使用 TextStyle 中的 Shadow 的 blurRadius 属性来制作发光文字特效，接着引出了利用 BackdropFilter 的 ImageFilter 制作发光图片的方法。之后，作者利用 ClipPath 和 Polygon 实现了文字撕裂效果，并提供了完整的效果对比。最后，作者通过变形闪动的技巧增强了撕裂效果的真实感。整体的代码实现简单易懂，没有任何难点。文章虽然简短，但在效果上表现出色，适合需要制作霓虹灯文本效果的同学参考。

### [降低网络延迟：让你的 App 变得更快](https://mp.weixin.qq.com/s/XoAm9OaXtzT3jE4LSBSpqw)

[@dustturtle](https://github.com/dustturtle)：如何打造更快的 App ，对于开发者来说是一个永恒的课题；原因无他，因为对于一个以网络交互为核心的现代应用来说，这是用户体验的核心所在：它意味着更流畅的音视频播放、低延迟的网络会议、快速加载的页面和资源、更少的游戏等待时间等等。2021 年，苹果通过 Session 10239: Reduce network delays for your app[2] 给大家分享了许多网络延迟优化相关的理论知识，并提出了 RPM (每分钟往返次数) 的概念和基于此概念的测试工具；而今年，苹果在去年的基础上，又为我们带来了这一篇实战性质颇强的分享，从客户端侧、服务端侧、网络协议侧三个方面入手提供一系列行之有效的建议，帮助开发者们更好的分析和改善应用的网络延迟状况，从而打造响应更加快捷的 App ，带来更好的用户体验。

## 内推

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

具体信息请移步：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）
