# 老司机 iOS 周报 #343 | 2025-07-21

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

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

## 新手推荐

### 🐎 [Meet the Inspector view in SwiftUI](https://serialcoder.dev/text-tutorials/swiftui/meet-the-inspector-view-in-swiftui/)

[@阿权](https://github.com/bqlin)：文章介绍了 SwiftUI 中检查器视图（Inspector View）的用法：

1. 基本概念与使用场景：
   1. 检查器视图用于展示主内容的附加信息，默认在右侧展示（macOS/iPadOS），在紧凑尺寸设备（如竖屏 iPhone）上以 sheet 形式呈现。
   2. 需要 macOS 14+ 和 iOS 17+。
2. 基本用法：通过 `inspector(isPresented:content:)` 控制检查视图的显隐。
3. 自定义宽度：支持固定宽度 `inspectorColumnWidth(_:)`，和用户拖拽控制宽度 `inspectorColumnWidth(min:ideal:max:)`。
4. 检查器入口按钮与导航工具栏的适配，问题提供了三种适配方案。
5. 在紧凑尺寸中的展示效果及其适配方案。

在苹果提供中的 App 中，检查视图是用户早已习惯的交互形式，使用检查视图可能提升 App 的专业性并提升用户体验。

## 文章

### 🌟 🐢 [An open source tool to speed up iOS app launch](https://blog.sentry.io/open-source-tool-speed-up-ios-app-launch/)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：Emerge Tools 提供了一个轻量级的收集 App 启动阶段内执行到的函数的收集工具，而不用修改编译选项（开启插桩），以此可以用来投喂给 Xcode 进行二进制重排，进而通过减少启动过程中的 Page In 数量来加快启动速度。技术方案是通过 Linkmap 或者 [trick 的方式](https://github.com/getsentry/FaultOrdering/blob/main/Sources/EMGFaultOrdering/Constructor.mm#L137) 收集函数起始的地址。然后对所有函数起始地址替换汇编指令为触发 ARM64_BREAK_INSTRUCTION 。在捕获断点后，记录下此方法，然后跳转原始逻辑继续执行。其中有非常多的细节，推荐对此感兴趣的同学阅读。

同时可以对此工具稍加改造，以此适配收集 App 任意阶段内的执行函数（如某个巨大模块），然后执行预热，以加快某个模块的冷启动首次进入耗时；同时其中涉及到与 [SimpleDebugger](https://github.com/EmergeTools/SimpleDebugger) 的联动，可以进行修改优化，目前是每个函数都执行一次 StopTheWorld + 替换单个函数汇编方便断点记录，可以修改为 批量执行一次 StopTheWorld + 替换所有需要函数。

### 🐕 [Everything You Should Know About Spacer](https://kyleye.top/posts/everything-you-should-know-about-spacer/)

[@AidenRao](https://weibo.com/AidenRao)：SwiftUI 提供了四种 `Spacer` 类型实现灵活布局：通用 `Spacer` 在可用空间内沿主轴扩展；`_TextBaselineRelativeSpacer` 支持文本基线对齐；`_HSpacer`/`_VSpacer` 严格限定方向。它们通过 `PrimitiveSpacer` 协议共享核心属性（`minLength`, `axis`, `requireTextBaselineSpacing`）

### 🐕 [Swift 6.2 Java 互操作性实践](https://arturgruchala.com/swift-6-2-java-interoperability-in-practice/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：这篇文章展示了如何通过 Swift 6.2 的 swift-java 包实现 Swift 与 Java 的高效互操作。整个过程通过标准工具链（SwiftPM + Makefile）自动化，从 Java 编译到 Swift 调用无缝衔接，大大简化了跨语言开发的复杂度。最终实现了 Swift 程序可以优雅地调用 Java 方法的目标。

### 🐕 [What you need to know before migrating to Swift Testing](https://soumyamahunt.medium.com/what-you-need-to-know-before-migrating-to-swift-testing-b9c1d749ebd5)

[@JonyFang](https://github.com/JonyFang): 一篇 Swift Testing 迁移指南摘要，介绍了从传统 XCTest 框架迁移到 Swift Testing 框架前需要了解的关键信息。如：

- Swift Testing 框架的主要优势和新特性
- 迁移过程中可能遇到的常见兼容性问题
- Swift Testing 与 XCTest 的语法和结构差异
- 一些迁移策略建议和最佳实践

对于正在考虑升级测试框架的 iOS 开发者来说，这是一篇实用的参考指南。

## 代码

### [部分使用了 Data.bytes 的代码无法正常编译](https://github.com/SwiftOldDriver/iOS-Weekly/issues/5061)

[@Smallfly](https://github.com/iostalks)：iOS 26 SDK 中 ``Foundation.Data`` 扩展了新的属性 ``var bytes: RawSpan { get }``，如果之前的实现里面使用了 CryptoSwift 对 Data 添加的 extension 中的 ``var bytes: Array<UInt8>`` 且未明确 ``import CryptoSwift`` 就会遇到编译器无法正确匹配实现的问题。

使用到的位置主动 `import CryptoSwift` 明确实现来源。

CryptoSwift 已将 extension 重命名为 byteArray ，[PR](https://github.com/krzyzanowskim/CryptoSwift/pull/1076)。

> [CrazyFanFan](https://github.com/CrazyFanFan) 提供信息

## 内推

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

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