|
1 | 1 | # 老司机 iOS 周报 #329 | 2025-03-31
|
2 | 2 |
|
3 |
| - |
| 3 | + |
4 | 4 | 老司机 iOS 周报,只为你呈现有价值的信息。
|
5 | 5 |
|
6 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。
|
7 | 7 |
|
8 |
| -## 新闻 |
9 |
| - |
10 |
| -> 行业相关的新闻、趣事、看法 |
11 |
| -
|
12 |
| -## Developer - 设计开发加速器 |
13 |
| - |
14 |
| -> 设计开发加速器相关活动 |
15 |
| -
|
16 | 8 | ## 新手推荐
|
17 | 9 |
|
18 |
| -> 收集一些对新手友好且质量不错的文章 |
19 |
| -
|
20 | 10 | ### 🐎 [Understanding structural identity in SwiftUI](https://tanaschita.com/swiftui-structural-identity/)
|
21 | 11 |
|
22 | 12 | [@阿权](https://github.com/bqlin):SwiftUI 使用结构体描述视图,由 SwiftUI 内部完成视图的绘制与更新。而结构体标识则是视图层级中的唯一 id,用于识别状态变化前后的视图结构体是否是同一视图,进而进行更新和重绘。
|
|
25 | 15 |
|
26 | 16 | ## 文章
|
27 | 17 |
|
28 |
| -> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 |
29 |
| -
|
30 |
| -### 🐕 [Deploying a Swift Server App to Fly.io and Railway](https://swifttoolkit.dev/posts/deploy-fly-railway) |
31 |
| - |
32 |
| -[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了如何使用 Vapor 框架部署 Swift 服务端应用程序到 Fly.io 和 Railway 平台。文章涵盖了初始化 Vapor 项目、编写 Dockerfile、以及在两个平台上部署应用的具体步骤。此外 , 还提到了一些进阶主题 , 如自定义域名和添加数据库服务等。 |
33 |
| - |
34 | 18 | ### 🐢 [Profiling apps using Instruments](https://developer.apple.com/tutorials/instruments)
|
| 19 | + |
35 | 20 | [@Smallfly](https://github.com/iostalks):这是苹果官方出品的 Instruments 教程。Instruments 主要用来分析应用程序的性能、资源使用和行为,了解如何提高响应性,减少内存使用,以及运行时的复杂的行为。该教程包含对卡顿的基础知识介绍,卡顿的分析和检测,并提供了卡顿的优化建议。
|
36 | 21 |
|
37 |
| -### 🐢 [充分理解C/C++重要概念:运行时库](https://mp.weixin.qq.com/s/Fed-0uVaOGDUiftH43vnGA) |
38 |
| -[@极速男孩](https://github.com/ztlyyznf001):本文系统解析了C/C++运行时库的核心概念与实现机制。运行时库作为程序运行的基础支撑,封装了操作系统API(如内存管理malloc/文件操作fopen)、提供标准库函数(字符串/数学运算),并管理程序生命周期(全局变量初始化/资源清理)。跨平台差异显著:Linux依赖glibc/libstdc++,Windows通过MSVC运行时库实现,Android/iOS则采用轻量化Bionic/libc++。开发中需警惕多实例问题(静态链接导致内存堆冲突)和多版本兼容性问题(GLIBC/C++ABI不匹配),解决方案包括统一动态链接、规范跨模块接口设计(避免传递C++对象)及固化工具链版本。 |
| 22 | +### 🐢 [充分理解 C/C++ 重要概念:运行时库](https://mp.weixin.qq.com/s/Fed-0uVaOGDUiftH43vnGA) |
| 23 | + |
| 24 | +[@极速男孩](https://github.com/ztlyyznf001):本文系统解析了 C/C++ 运行时库的核心概念与实现机制。运行时库作为程序运行的基础支撑,封装了操作系统 API(如内存管理 malloc/ 文件操作 fopen)、提供标准库函数(字符串 / 数学运算),并管理程序生命周期(全局变量初始化 / 资源清理)。跨平台差异显著:Linux 依赖 glibc/libstdc++,Windows 通过 MSVC 运行时库实现,Android/iOS 则采用轻量化 Bionic/libc++。开发中需警惕多实例问题(静态链接导致内存堆冲突)和多版本兼容性问题(GLIBC/C++ABI 不匹配),解决方案包括统一动态链接、规范跨模块接口设计(避免传递 C++ 对象)及固化工具链版本。 |
39 | 25 |
|
40 | 26 | ### 🐕 [Detecting body poses in a live video feed](https://www.createwithswift.com/detecting-body-poses-in-a-live-video-feed/)
|
41 | 27 |
|
42 | 28 | [@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何利用苹果的 Vision 框架在 SwiftUI 应用中实时检测视频流中的人体姿态。主要步骤包括:
|
43 | 29 |
|
44 |
| -1. 通过`AVCaptureSession`管理视频采集,处理权限申请,配置视频输入/输出格式,并调整画面方向以适应界面显示 |
45 |
| -2. 使用`UIViewRepresentable`协议将`AVCaptureVideoPreviewLayer`集成到 SwiftUI 视图中,实现实时画面展示 |
46 |
| -3. 创建`PoseEstimationViewModel`类处理视频帧,利用 Vision 的`VNHumanBodyPoseRequest`检测 19 个关键身体节点(如头、肩、肘、腕等),并建立关节连接关系(如肩到肘、膝到踝等)。 |
| 30 | +1. 通过 `AVCaptureSession` 管理视频采集,处理权限申请,配置视频输入 / 输出格式,并调整画面方向以适应界面显示 |
| 31 | +2. 使用 `UIViewRepresentable` 协议将 `AVCaptureVideoPreviewLayer` 集成到 SwiftUI 视图中,实现实时画面展示 |
| 32 | +3. 创建 `PoseEstimationViewModel` 类处理视频帧,利用 Vision 的 `VNHumanBodyPoseRequest` 检测 19 个关键身体节点(如头、肩、肘、腕等),并建立关节连接关系(如肩到肘、膝到踝等)。 |
47 | 33 | 4. 通过检测到的身体坐标点动态绘制骨骼连线,最终实现在视频流上叠加姿态骨架图的效果
|
48 | 34 |
|
49 | 35 | 文章提供了完整的代码实现思路,适用于健身追踪、AR 等场景开发。
|
|
52 | 38 |
|
53 | 39 | [@DylanYang](https://github.com/Dylan19Yang):作者通过一系列的 Demo 向我们展示了 Group 目前存在的一些问题。官方文档上写着作用于 Group 的 modifier 会作用在 Group 内的每一个元素上,但实际在模拟器上的表现并非如此。作者猜测可能和渲染 SwiftUI 的根结点实质是一个 UIKit 的 view 有关。如果使用一个 VStack 包裹 Group,则它的表现又符合预期了。
|
54 | 40 |
|
55 |
| -### 🐎 [这篇GPU学习笔记,详细整理了其工作原理、编程模型和架构设计](https://mp.weixin.qq.com/s/IzsI_dzX6AxFnJGg8zewEw) |
| 41 | +### 🐎 [这篇 GPU 学习笔记,详细整理了其工作原理、编程模型和架构设计](https://mp.weixin.qq.com/s/IzsI_dzX6AxFnJGg8zewEw) |
| 42 | + |
56 | 43 | [@老驴](https://weibo.com/u/6090610445):最近 AI 大火也让 nvidia 再次在风口浪尖烧,你有没有想过 GPU 到底是怎么工作的?它为什么在特定应用下这么快?和我们日常写的代码、性能优化有什么关系?
|
57 | 44 |
|
58 | 45 | 这篇文章用清晰的逻辑和大量实例,从 GPU 架构原理、并行执行模型到实际的 CUDA 编程,带你系统了解 GPU 背后的技术基础。即使你平时不写 CUDA,这些知识也能帮你更好地理解 Metal、CoreML 这些 Apple 平台下的 GPU 特性。
|
59 | 46 |
|
60 | 47 | 如果你是一名希望拓展技术广度的开发者,值得一度。
|
61 | 48 |
|
62 |
| -### 🐕 [Fast & Fluid: Integrating Rust egui into SwiftUI](https://medium.com/@djalex566/fast-fluid-integrating-rust-egui-into-swiftui-30a218c502c1) |
63 |
| - |
64 |
| -[@david-clang](https://github.com/david-clang):作者在开发实时预览 SwiftData 和 CoreData 数据库的 Mac App [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,发现 SwiftUI 的 `Table` 性能相当差,尝试用 AppKit 的 `NSTableView` 也无法满足需求,最后用 Rust 的 UI 框架 `egui` 去优化性能。作者把 SwiftUI 中嵌入 `egui` 渲染视图的 Demo 整理成文章,还用代码示例展示如何在 SwiftUI 的 `NavigationSplitView` 中嵌入 `egui` 渲染的视图。以下是`egui` 和传统 UI 框架的对比: |
65 |
| - |
66 |
| -- 传统 UI 框架(如 SwiftUI、UIKit)多采用**保留模式(Retained Mode)**,需显式管理 UI 组件状态(例如按钮状态、列表数据等),框架内部通过对比新旧状态差异来局部更新界面。 |
67 |
| -- `egui` 的**即时模式(Immediate Mode)** 则相反:**每帧完全丢弃旧 UI 状态**,根据当前数据重新生成整个界面,通过高频重建实现“无状态化”。 |
68 |
| - |
69 |
| -虽然 Demo 中使用 `egui_wgpu_backend` 作为渲染后端,但它在 Metal 上渲染单帧需要 10 毫秒,作者在开发 [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,通过自定义渲染后端,把帧渲染时间缩短到仅 1-2 毫秒,最终才实现高性能需求,可见把 “SwiftUI 中嵌入 `egui` 渲染视图” 封装成成熟框架会比较难,但本文优化 SwiftUI 性能的思路值得我们学习。 |
70 |
| - |
71 |
| -## 工具 |
72 |
| - |
73 |
| -> 开发过程中常用的工具,及一些新工具的介绍 |
74 |
| -
|
75 | 49 | ## 代码
|
76 | 50 |
|
77 |
| -> 库,代码段,开源app |
78 |
| -
|
79 | 51 | ### [FlowNavigation](https://github.com/magnuskahr/swiftui-flow-navigation)
|
80 | 52 |
|
81 |
| -[Announcing FlowNavigation](https://www.magnuskahr.dk/posts/2025/03/announcing-FlowNavigation/) 本文介绍了作者开发的一个名为 FlowNavigation 的 SwiftUI 框架。该框架旨在简化线性流程的定义和管理,如注册流程。作者提供了一个示例代码,展示如何使用该框架来定义一个包含电子邮件、密码和提交屏幕的流程。该框架目前还在测试阶段,作者希望能够获得社区反馈并继续完善。 |
82 |
| - |
83 |
| -## 书 |
84 |
| - |
85 |
| -> 比较不错的书的推荐和书评 |
86 |
| -
|
87 |
| -## 音视频 |
88 |
| - |
89 |
| -> 比较不错的书的推荐和书评 |
| 53 | +[Announcing FlowNavigation](https://www.magnuskahr.dk/posts/2025/03/announcing-FlowNavigation/) 本文介绍了作者开发的一个名为 FlowNavigation 的 SwiftUI 框架。该框架旨在简化线性流程的定义和管理 , 如注册流程。作者提供了一个示例代码 , 展示如何使用该框架来定义一个包含电子邮件、密码和提交屏幕的流程。该框架目前还在测试阶段,作者希望能够获得社区反馈并继续完善。 |
90 | 54 |
|
91 | 55 | ## 内推
|
92 | 56 |
|
|
0 commit comments