# 老司机 iOS 周报 #316 | 2024-12-16

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

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

## 新闻

### 🐢 [Flutter 3.27 发布](https://mp.weixin.qq.com/s/gQ5u1m7hudyoa-HeLyMKlw)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 3.27 悄悄的就来了，该版本包含了大量更新，包括：

- Cupertino 相关组件的大量优化
- Material 下的一些主题和控件调整，包括之前我们聊过的 Row and Column spacing
- Android Impeller 默认开启和 iOS 性能优化
- P3 色域的 UI 支持
- Web 下的大量改进
- Swift Package Manager 的支持
- 之前聊过的 Edge to Edge 和 Android Freeform 支持
- pub 下载数
- DevTool 工具大改进和优化，包括设备断线数据保持
- 对老 Dart SDK 插件不再维护适配，弃用 OC

## 文章

### 🐕 [Prevent screenshot capture of sensitive SwiftUI views](https://www.createwithswift.com/prevent-screenshot-capture-of-sensitive-swiftui-views/)

[@BluesJiang](https://github.com/bluesjiang)：这篇文章使用了一个比较巧妙的方法来实现截屏隐藏隐私信息。核心是使用 `UITextField` 的 `isSecureTextEntry` 属性，然后将被包装的 View 作为其子 View 即可。然后使用了 preference 来实现父容器大小与子容器大小匹配。可以通过这个文章整体了解 SwiftUI 的 View 的包装和 Modifier 的写法，是一个很好的参考。

### 🐕 [Why Can't You Loop Over Ranges of Characters in Swift](https://mfaani.com/posts/swift/why-cant-you-loop-over-ranges-of-characters-in-swift/)

[@bq](https://github.com/bqlin)：当你对 `"a"..."z"` 执行 for 循环遍历时，你会惊讶地发现 Swift 并不支持的，虽然这有点违反常理。这篇文章你将了解到 Swift 字符并不是简单的 ASCII 字符，而是可变长的 Unicode 字符，其在不同的语言环境有不同的排序，不断迭代的 Unicode 也在不断地扩充字符范围，甚至有些字符是集群的时候，遍历、计数将变得不太可能。文章也介绍了 Unicode 这么设计背后的意图，以及当你硬要遍历一个字符范围时候，作者也给出了一个比较安全的解决方案。

### 🐕 [WebKit GPU Profiling](https://developer.playcanvas.com/user-manual/optimization/gpu-profiling/)

[@莲叔](https://github.com/aaaron7)：WebGL 的 debug 一直以来都是一个令人头痛的问题，通过浏览器内置的调试能力能够满足一部分需求，但如果需要更进一步的分析往往都缺乏足够好用的工具。这篇文章针对 WebGL 和 WebGPU 两种应用在不同平台的调试技巧做了汇总，包括 Mac、Window 和 Quest。其中对于在 Mac 上通过 Xcode 来做分析给出了 step by step 的步骤，非常友好。

### 🐕 [Concurrency Step-by-Step: Reading from Storage](https://www.massicotte.org/step-by-step-reading-from-storage)

[@Barney](https://github.com/BarneyZhaoooo)：本文提供了关于如何在 Swift 应用中逐步从本地存储读取数据的详细指南。文章重点介绍了如何使用 `Codable` 协议来序列化和反序列化对象，并通过 `FileManager` 管理文件的读取和写入。作者逐步解析了实现这个过程的关键步骤，包括如何设置数据模型、保存数据以及从文件中加载数据的示例代码。此外，文章还提供了常见问题的解决方案，以帮助开发者更有效地处理数据存储。适合想要深入理解 iOS 数据存储机制的开发者阅读。

## 代码

### [rmtrash](https://github.com/TBXark/rmtrash)

[@Kyle-Ye](https://github.com/Kyle-Ye): Swift 实现的 macOS 命令行工具 rm 的替代方案，用于将文件移动到废纸篓。此外 rmtrash 提供了与 Linux 和 macOS 版本 rm 命令完全兼容的标志位支持方案。

### [ml-cross-entropy](https://github.com/apple/ml-cross-entropy)

[@Leo](https://github.com/LeoMobileDeveloper)：由 Apple 开源的 CCE(Cut Cross-Entrop) 是一种优化小模型（SLM）训练过程中内存消耗的代码库，以 Gemma 2 (2B) 为例，能够将内存从 24GB 优化到 1MB，显著提高小模型的训练速度。

## 内推

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

[北京] 支付宝-终端业务研发专家（支付碰一下） - iOS/Android - P7

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

## 关注我们

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

**关注有礼，关注【老司机技术周报】，回复「2024」，领取 2024 及往年内参**

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