Releases: SwiftOldDriver/iOS-Weekly
老司机 iOS 周报 #329 | 2025-03-31
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新手推荐
🐎 Understanding structural identity in SwiftUI
@阿权:SwiftUI 使用结构体描述视图,由 SwiftUI 内部完成视图的绘制与更新。而结构体标识则是视图层级中的唯一 id,用于识别状态变化前后的视图结构体是否是同一视图,进而进行更新和重绘。
文章介绍了 SwiftUI 结构体标识的基本原理和应用、SwiftUI 重绘机制以及 SwiftUI 结构体标识的具体实践。
文章
🐢 Profiling apps using Instruments
@Smallfly:这是苹果官方出品的 Instruments 教程。Instruments 主要用来分析应用程序的性能、资源使用和行为,了解如何提高响应性,减少内存使用,以及运行时的复杂的行为。该教程包含对卡顿的基础知识介绍,卡顿的分析和检测,并提供了卡顿的优化建议。
🐢 充分理解 C/C++ 重要概念:运行时库
@极速男孩:本文系统解析了 C/C++ 运行时库的核心概念与实现机制。运行时库作为程序运行的基础支撑,封装了操作系统 API(如内存管理 malloc/ 文件操作 fopen)、提供标准库函数(字符串 / 数学运算),并管理程序生命周期(全局变量初始化 / 资源清理)。跨平台差异显著:Linux 依赖 glibc/libstdc++,Windows 通过 MSVC 运行时库实现,Android/iOS 则采用轻量化 Bionic/libc++。开发中需警惕多实例问题(静态链接导致内存堆冲突)和多版本兼容性问题(GLIBC/C++ABI 不匹配),解决方案包括统一动态链接、规范跨模块接口设计(避免传递 C++ 对象)及固化工具链版本。
🐕 Detecting body poses in a live video feed
@AidenRao:这篇文章介绍了如何利用苹果的 Vision 框架在 SwiftUI 应用中实时检测视频流中的人体姿态。主要步骤包括:
- 通过
AVCaptureSession
管理视频采集,处理权限申请,配置视频输入 / 输出格式,并调整画面方向以适应界面显示 - 使用
UIViewRepresentable
协议将AVCaptureVideoPreviewLayer
集成到 SwiftUI 视图中,实现实时画面展示 - 创建
PoseEstimationViewModel
类处理视频帧,利用 Vision 的VNHumanBodyPoseRequest
检测 19 个关键身体节点(如头、肩、肘、腕等),并建立关节连接关系(如肩到肘、膝到踝等)。 - 通过检测到的身体坐标点动态绘制骨骼连线,最终实现在视频流上叠加姿态骨架图的效果
文章提供了完整的代码实现思路,适用于健身追踪、AR 等场景开发。
🐎 Why I Avoid Group
@DylanYang:作者通过一系列的 Demo 向我们展示了 Group 目前存在的一些问题。官方文档上写着作用于 Group 的 modifier 会作用在 Group 内的每一个元素上,但实际在模拟器上的表现并非如此。作者猜测可能和渲染 SwiftUI 的根结点实质是一个 UIKit 的 view 有关。如果使用一个 VStack 包裹 Group,则它的表现又符合预期了。
🐎 这篇 GPU 学习笔记,详细整理了其工作原理、编程模型和架构设计
@老驴:最近 AI 大火也让 nvidia 再次在风口浪尖烧,你有没有想过 GPU 到底是怎么工作的?它为什么在特定应用下这么快?和我们日常写的代码、性能优化有什么关系?
这篇文章用清晰的逻辑和大量实例,从 GPU 架构原理、并行执行模型到实际的 CUDA 编程,带你系统了解 GPU 背后的技术基础。即使你平时不写 CUDA,这些知识也能帮你更好地理解 Metal、CoreML 这些 Apple 平台下的 GPU 特性。
如果你是一名希望拓展技术广度的开发者,值得一读。
代码
FlowNavigation
Announcing FlowNavigation 本文介绍了作者开发的一个名为 FlowNavigation 的 SwiftUI 框架。该框架旨在简化线性流程的定义和管理 , 如注册流程。作者提供了一个示例代码 , 展示如何使用该框架来定义一个包含电子邮件、密码和提交屏幕的流程。该框架目前还在测试阶段,作者希望能够获得社区反馈并继续完善。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
[上海] Soul App - 终端技术团队 - iOS 架构/跨端容器专家
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #328 | 2025-03-24
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🌟 🐎 Understanding SwiftUI's Namespace
@Smallfly:这篇文章介绍了 SwiftUI Namespace
的工作原理,从底层实现到实际应用,再到高级用法,内容详实且易于理解。作者不仅解释了 Namespace
如何生成唯一标识符,还通过实际代码示例展示了如何利用它实现平滑的几何动画。相信无论是初学者还是有一定经验的开发者,都能从中获得一些启发。
🐕 Designing a custom lazy list in SwiftUI with better performance
@Barney:这篇文章探讨了 SwiftUI 中 animation
与 withAnimation
的区别。animation
是一个修饰符,直接在视图上应用动画,而 withAnimation
则是一个函数,用于在特定的状态变化中包裹代码,使其能够动画化。作者通过示例展示了两者的用法和适用场景,强调了使用 withAnimation
时可以更灵活地控制动画效果。
🐎 Identifying individual sounds in an audio file
@Damien:这篇文章介绍了如何实现声音识别功能,使用 Apple 的 Sound Analysis 框架来识别音频文件中的特定声音。通过这个文章教程,读者可以构建一个应用,能够分析音频文件、分类声音的 App。文章还提到,这种声音识别功能适用于预录制音频文件的分析,可以用于批量处理、高质量录音的编辑以及离线分析等场景,为音频分析任务提供了更广泛的应用可能性。
🐕 Swift + Zed = ❤️
@Cooper Chen:这篇文章介绍了作者如何在 Zed 编辑器中优化 Swift 编程体验。作为一位文本编辑器爱好者,作者分享了他从 Neovim 转向 Zed 的过程,探讨了安装 Swift 扩展、解决 Xcode 项目中的代码补全问题,以及创建自定义任务和快捷键的具体步骤。通过这些配置,作者成功提升了开发效率,使得构建、测试和运行 Swift 包变得更加流畅和自然。如果你正在寻找高效的编程工具,这篇文章值得一读。
🐎 Synchronous Work
@DylanYang:作者分别通过 DispatchQueue、Task.detached、nonisolated func 等方式为我们介绍了如何去异步执行一段耗时逻辑。最终作者更推荐 async let 的方式,因为它更加简洁,但也要注意它并不是时刻生效的,我们需要关注方法的 isolated 的状态。同时作者也提到同步方法本身会更加灵活,因为它可以按需转为异步调用,给了调用方更多选择。
工具
🐎 Framous: Screenshot Frames
@阿权:Framous 是一款快捷生成 Apple 设备带壳截图的 Mac App,支持生成常见的 iPhone、iPad、Apple Watch、Mac、Apple TV 设备的带壳截图。对于独立开发者上架或者介绍某款 App 时是款很实用的工具。App 支持功能:
- 可以通过拖放、复制粘贴、捷径等方式将图片生成带壳截图。
- 自动识别截图来源设备(大概是根据分辨率),自动匹配设备。
- 支持多个设备合成一张图或批量导出多张图。
- 丰富的自定义选项,支持切换设备、修改设备颜色、圆角、设备按钮位置、屏幕挖孔样式等。
App 在 Mac App Store 免费下载,但生成支持的设备截图仍需内购。
代码
GlyphixTextFx
@AidenRao:GlyphixTextFx 主要实现了类似 SwiftUI 中 numericText
的数字变化过渡动画效果。以下是核心内容:
- 字符级动画:当文本内容变化时,每个字符会以平滑的动画过渡(如数字增减时的滚动效果)。
- 灵活定制:支持自定义过渡方向(向上 / 向下)、文本对齐方式(左 / 中 / 右)以及多行文本显示。
- 视觉效果优化:提供模糊效果选项增强过渡美感。
- 跨框架兼容:适用于 UIKit、AppKit 和 SwiftUI,支持 iOS 13+ 和 macOS 11.0+
音视频
Swift DevRoom at FOSDEM 2025
@zhangferry: FOSDEM 是一个专门为自由软件及开源软件开发者而设的周年会议,由比利时的布鲁塞尔自由大学及一些志愿者共同筹办,被视为全欧洲、乃至全球最优秀的自由软件及开源软件活动。Swift 作为开源语言,曾在 2023 年申请 FOSDEM,但被官方拒绝,2024 年再次申请,终于通过,正式会议于 2025 年 2 月召开,已经结束。
作为向开源社区展示 Swift 的一次重要机会,演讲主题也跟开源相关,涵盖:服务端、嵌入式、跨语言交互等内容,总计 15 场,每个在 20min 左右,所有视频内容都可以到 FOSDEM 查看。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
[上海/北京/深圳/杭州] 抖音 - 基础技术 - iOS/Android
[上海] BiliBili - 移动端开发实习生(社区生态)- iOS/Android
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #327 | 2025-03-17
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
iOS Versions Market Share in 2025
网页展示了使用 iOS 系统(包括 iPadOS)的用户的分布变化,其中有两条结论:
- 自 2024 年 9 月推出以来,iOS 18 已成为迄今为止份额最高的版本。截至 2025 年 2 月底,该比例为 79.54%。
- 截至 2024 年 8 月底,iOS 17 是占主导地位的版本,占 87.70% 的份额。截至 2025 年 2 月底,它已降至 13.68%。
新手推荐
🐎 通过覆写方法看 Swift 方法派发
@DylanYang:作者通过一个子类覆写方法的 Demo 向我们解释了 Swift 内静态派发和动态派发两种机制,并介绍了 @objc 和 dynamic 关键字的含义,讲述了如何在 extension 中正确的覆写父类方法。看完以后感兴趣的同学也可以尝试再研究下 Protocol 方法的派发机制。
文章
🐢 A Journey to understand LLVM-IR
@ChengzhiHuang:对于 iOS 开发来说,接触 LLVM-IR 的机会不多,一般逆向研究系统库时会直接反汇编,研究 Swift 时大部分情况阅读 sil(Swift Intermediate Language) 即可解决大部分问题。但也有极端情况下,需要研究 IR 优化时,就需要这块知识了。作者虽然是以 C/Rust 语言的视角进行讲解,但是对于 OC/Swift 是一样的。文章内容大致包含下面几块:
- IR 的 静态单一分配 (static single assigment representation)
- 开启 mem2reg 讲解生成的 IR 代码
- 再对比 x86 汇编与 IR 代码的对应
🐕 op run
@AidenRao:这篇文章探讨了传统 .env 文件在开发中的痛点(配置同步难、多环境管理复杂、变更追踪缺失),并介绍了 1Password CLI(op)的解决方案。通过 op run 命令动态注入环境变量,开发者可用 op://URL 引用密钥库中的敏感数据,实现配置与代码分离。步骤包括安装 CLI、创建共享保险库、迁移密钥、更新.env 文件为引用格式,并调整启动命令。
🐕 What drives your users to pay? Jobs to Be Done has the answers
@含笑饮砒霜:本文探讨了 Jobs to Be Done (JTBD) 理论如何帮助企业理解用户真正的需求,并通过精准定位驱动更强的产品变现能力。主要内容如下:
- 了解用户购买动机:痛点驱动 vs. 需求驱动
- 如何进行 Jobs to Be Done 访谈,发现变现关键点
- 三种核心驱动力:功能、情感和社交
- 如何优化定价、转化和留存
- 利用 JTBD 扩展高价值用户群
🐢 当 Swift 编译器删除了标准库中的代码 - 记修复 Swift 6 中的冗余 Load 指令消除优化器
@david-clang:本文首先通过最小复现代码,展示了在 -Osize
优化级别下使用 AutoreleasingUnsafeMutablePointer
导致的 use-after-free(UAF)崩溃问题。
通过反汇编和 SIL 分析,发现 Swift 编译器在冗余 Load 消除优化(RLE)过程中,因误判 _reserveCapacityAssumingUniqueBuffer
函数的副作用,错误删除了数组扩容后必须重新加载缓冲区地址的 load
指令,致使后续代码访问已释放内存。
作者还给出了修复方案,通过调整逃逸分析对 unchecked_ref_cast
指令中 Optional 转换的路径追踪逻辑,确保编译器正确识别副作用,从而避免冗余 load
指令消除,修复 UAF 崩溃问题。
文章结尾还分享了调试 Swift 编译器的技巧,全文为深入理解 Swift 编译优化机制提供了宝贵参考。
代码
RealityShaderExtension
@BluesJiang: visionOS 开发官方有两套可选的开发方式,一种是使用 RealityKit,另一种是使用基于 Metal 的自制引擎来自己绘制。苹果推荐使用的 Unity 的 PolySpatial,一种将 Unity 的内容直接导出到 visionOS 上的方式,也是通过第二种模式运行的。
但是第二种模式会存在许多限制,比如没有眼动追踪等。所以有时候还是需要使用原生的开发方式。但是为了保证渲染效果的一致性,作者经常需要将在 Unity 中实现的 Shader 再在 ShaderGraph 中实现一遍。而二者默认提供的 Shader 节点并不一致。
所以作者将 Unity 中有而 RealityKit 中没有的 Shader 效果实现了一遍,并且开源。visionOS 的原生开发玩家可以关注一下。
音视频
How to Do Apple Search Ads (ASA) Right and Grow Your Downloads
@Kyle-Ye: 如何使用 Apple Search Ads 提升你的下载。作者分享了配置使用 ASA 完整流程和一些实用技巧,有自己的独立 App 需要推广的可以学习下。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
[上海] TikTok - iOS 高级开发工程师(跨端方向)& 实习生(跨端方向)
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #326 | 2025-03-10
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
周报编辑组又来新人啦~
欢迎 David 加入老司机技术!David 有多年大厂的工作经验,目前在日本从事 iOS Infra 相关工作,对 Flutter 动态化框架也有涉猎。
希望 David 的加入也能为大家带来更多元化的内容输出!
新闻
Lynx: 迈向原生体验
Lynx:跨平台 UI 方案始终在性能、灵活性和工程复杂度之间寻找平衡。Lynx 采用声明式 DSL 直出原生 UI,减少 JS 端计算和通信开销,同时优化 UI Diff 机制,使更新更加高效。
它并非简单的 React Native 或 Flutter 替代,而是对跨端渲染的一次新尝试,在实际业务场景中提供了不同的取舍和可能性。
不论是国内还是国外,都已有一段时间没有推出类似的新框架了,此次开源还是有较大的借鉴意义,希望 Lynx 团队后续能有更多原理的解析释出。
新手推荐
🐎 Simple Modularization setup for a New App
@Smallfly:这篇文章介绍了如何使用 Swift Package Manager 的本地包实现 iOS 应用的模块化。作者强调了模块化在改善构建时间、分离关注点、增强测试能力和促进团队协作方面的优势。文章提供了清晰的依赖关系图,解释了核心层(CoreLayer)、领域层(Domain Layer)和表现层(Presentation Layer)的设计,并分享了通过 Fastlane 集成来运行测试的实用技巧。对于寻求优化开发流程和提高代码质量的 iOS 开发新手来说,这篇文章提供了宝贵的指导和实际案例,是不错的学习资源。
文章
🐕 Ollama
@Cooper Chen:这篇文章介绍了 Ollama,一个简化在 macOS 上运行大语言模型(LLMs)的工具。Ollama 基于 llama.cpp,提供友好的接口,使模型管理和推理变得简单。文章强调了在本地运行模型的优势,特别是当计算几乎变得免费时,AI 的可用性和应用方式也随之改变。虽然像 GPT-4 和 Claude 这样的前沿模型无疑令人印象深刻,但本地运行开放模型同样值得关注,因为它提供了隐私保护、成本效益、低延迟、用户控制和可靠性等多种优势。
值得注意的是,Ollama 不仅限于 macOS 应用,因其提供的 HTTP API 可以与任何支持 HTTP 请求的编程语言和工具集成,因此可以在其他操作系统上使用。
🐎 不要升级,Flutter Debug 模式在 iOS 18.4 beta 无法运行,提示 Permission denied
@david-clang:本文介绍了为什么 Flutter Debug 模式无法在 iOS 18.4 beta 1 的真机上运行(issues),是因为该版本修复了通过 get-task-allow 授权即可获取 JIT 的内存访问权限(iOS 18.4 beta 1 JIT patch analysis)。好消息是 iOS 18.4 beta 2 撤销了对应更改,所以升级系统版本将不会影响 Flutter Debug 模式的真机调试。
但 Flutter 团队还是想避免利用 get-task-allow 授权获取 JIT 的内存访问权限,并在该 issues 讨论了些解决方案。其中有个思路很值得大家学习,利用 lldb debugserver 将数据写入到"只读和可执行(RX)"的内存映射区域后,即可直接调用 mprotect 让内存权限在"只读和可执行(RX)"和"可读可写(RW)"之间切换,从而稳定地实现 JIT。虽然该事在 Flutter 官方的优先级只是 P2,也让我们期待下最终的解决方案吧!
🐕 Designing a custom lazy list in SwiftUI with better performance
@Barney:这篇文章介绍了如何在 SwiftUI 中创建一个自定义的惰性列表(Lazy List)。作者首先讲解了惰性列表的概念,然后展示了如何通过使用 LazyVStack
和 ForEach
实现具有动态加载功能的列表并提供了示例代码和优化性能的建议。
🐎 关于推理模型的一些误解和盲区
@JonyFang: 文中介绍了推理模型与通用大模型的性能差异及适用场景,指出推理模型在逻辑领域优势显著却受制于响应速度与创作力,揭示了温度参数对生成内容的影响规律,并探讨了混合架构趋势与开源蒸馏模型推动 AI 普惠的技术路径。
工具
XCFolder: 一个将 Xcode 项目 Group 转为 Folder 的工具
iOS 开发者都知道团队协作时 .xcodeproj 文件会经常冲突,这是因为 Xcode 项目会为每个文件和文件夹都生成 UUID 引用,多人同时修改项目结构时几乎必然会发生合并冲突。
好消息是,Xcode 16 带来了一个新功能 —— 将虚拟的 Group 转换为 Folder!基于 Folder 的项目不再为每个文件声明对应的 object,大幅减少了合并冲突的可能性。
但对于现有项目,手动迁移工作量巨大。这时 XCFolder 就可以派上用场了,这款由 ZhgChgLi 开发的工具能自动完成这一项工作,并且保持项目引用完整性,操作简单高效。
如果你厌倦了处理 Xcode 项目合并冲突,这个工具绝对值得一试。它不仅能帮助团队顺利过渡到 Xcode 16 的新项目结构,还能大幅提升团队协作效率。
音视频
🌟 🐢 Deep Dive into LLMs like ChatGPT
@Damien:LLM 时代已经到来,作为开发人员,我们也需要了解一些必备的 LLM 相关的知识,本视频为 AI 大神 Karpathy 出品的 LLM 视频,本视频深入浅出,适合零基础想要了解 LLM 的同学。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
[北京/上海] 美团 - 短视频 - iOS/Android
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #325 | 2025-03-03
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐎 Presenting and Managing Expandable Sections in SwiftUI
@DylanYang:作者为我们介绍了如何在 SwiftUI 中实现一个可通过交互来展开和收起的 Section。在 Section 的 header 上实现一个自定义 view,并在点击时反转 Section 的 isExpanded 属性来达成目标。文章内容非常简单基础,并且有丰富的代码演示,适合刚接触 SwiftUI 的同学学习。
🐕 First analysis of Apple's USB Restricted Mode bypass (CVE-2025-24200)
@david-clang:本文分析了 iOS 中 CVE-2025-24200 漏洞的技术细节,该漏洞利用 Accessibility 框架中状态管理不严密的问题,使得攻击者能够在设备锁定时绕过 USB Restricted Mode,从而实现未授权的 USB 数据连接。文章中的分析思路和手段很值得学习。
作者通过对比补丁前后的固件,详细说明了漏洞修复涉及的关键代码改动,例如在 AXSpringBoardServerInstance 和 profiled 守护进程中新增的状态检查逻辑。接着展示了利用辅助功能(如 Assistive Touch 或 Switch Control )触发漏洞的可能攻击路径,即在设备锁定且辅助功能激活时,通过触发警告弹窗诱导用户点击“ OK ”,进而调用 _setUSBRMPreferenceDisabled
函数禁用 USB Restricted Mode,使攻击者有机会绕过物理安全防护措施。
🐎 How Swift's server support powers Things Cloud
@阿权:文章分享了 Things App 如何将自身的后端服务使用 Swift 重写的经验。
Things Cloud(Things App 后端服务),原本是使用 Python 2 和 Google App Engine 构建的,虽然稳定,但面临内存占用高、响应速度慢、后端语言缺乏类型静态安全检查导致上线错误不可预知的问题。在探索了多种后端语言后,因为 Things App 开发已经深度使用 Swift,熟悉其优势(可能是客户端人力充足🐶),最终选择使用 Swift 重写后端。使用 Vapor + SwiftNIO 编写主要的后端业务,通过 RediStack 调用 Rdis、MySQLKit 调用 Aurora、Soto 调用 S3、APNSwift 调用 APNs。最终通过 Linux 编译产物,构建到 Docker 中以便部署到集群中。最终算力节省 3 倍多,响应时间缩短 4 倍多。
在降本增效的大流中,或许用 Swift 也能闯出一番天地。
🐕 What ’ s new in Swift 6.1?
@Cooper Chen:这篇文章介绍了 Swift 6.1 的最新特性和改进。Swift 6.1 是一个较小的版本,主要包含错误修复和用户体验提升。其中主要讨论了两个特性:
- Task Groups 的变化:Swift 6.1 对 TaskGroup 进行了改进,开发者不再需要显式定义子任务的返回类型。编译器可以根据第一个添加的任务自动推断类型,这样可以简化代码。
- 导入成员可见性的新模式:Swift 6.1 引入了一种新的成员可见性模式,允许开发者在导入特定模块时,仅使用该模块中的扩展。这解决了当多个模块中有相同函数名时,编译器可能产生混淆的问题。通过这种方式,开发者可以更明确地控制代码中使用的扩展,避免意外调用错误版本的函数。
总体而言,这些改进增强了 Swift 的易用性,提升了开发体验。
工具
🐎 Interactive & Beautiful CLI Tools with Noora
@Smallfly:Noora 是一款创新性的 Swift 命令行工具包,致力于将枯燥的黑白终端转化为专业、交互式的开发者体验。它提供了丰富的组件——从醒目的成功 / 错误提示、智能的 Yes/No 选择框,到动态进度指示器,再到灵活的主题定制功能——让 CLI 工具瞬间焕发活力。如果你的应用需要进行命令行交互,值得一试。
🐎 基于 WWDC 内容的 AI 问答平台 Ask WWDC
@xiaofei86:Ask WWDC 以 WWDC 内容对 LLM 进行检索增强。基于 LangChain 和 GPT-4o,目前免费使用,响应速度尚可。作者同时开放了其基于 Next.js、Upstash 和 ModalLabs 的服务,用户也可以构建自己的 Ask Site。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #324 | 2025-02-24
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
iOS & iPadOS 18.4 Beta 1: Here’s everything new
对于中国用户最期待的自然是中文版本的 Apple Intelligence 终于可以使用了,Release Notes 有两条相关提醒:
- 对于中文(非英语),使用 Apple Intelligence 需要前置打开 Siri ,并允许通过任意方式唤醒 Siri 。
- 还原设备后,可能出现 Apple Intelligence 出现 "Downloading support …" 的报错,此时重启设备后问题可能可以解决(原文用词是 might resolve ,尚不清楚是否有 bad case)。
文章
🐎 Understanding SwiftUI Preferences
@JonyFang: 本篇主要介绍了 SwiftUI 中的 Preferences 机制,讲述了其在父子视图间传递数据的作用。 作者通过具体示例,展示了如何利用 Preferences 构建自定义视图,如表单验证功能。 此外,文章还讨论了 Swift 6 中与 Preferences 相关的问题,提供了对开发者有价值的见解。 总的来说,这篇文章为开发者深入理解和应用 SwiftUI 的 Preferences 提供了清晰的指导。
🐢 The Synchronization Framework in Swift 6
@DylanYang:作者为我们介绍了 Swift 6 和 iOS 18 下的新同步框架,其中主要包含了两个底层结构 Mutex 和 Atomics。作者在本文中对这两个新的能力做了较为详细的说明和性能比对。Mutex 能使得对被他包裹的数据的访问自动上锁,在性能上和手动通过代码上锁区别不大,但是相比使用 Actor 有不少提升。不过相比 Actor 的缺点自然是锁会阻塞当前线程。而 Atomic 则可以使被他包裹的操作都为原子操作不会被并发打断。从性能上看它和 Actor 比并没有较大优势,因此大多数情况下使用 Actor 已经足够。对同步框架感兴趣的读者可以花时间阅读下本文。
🐎 The Framework Next Door
@BluesJiang: 这篇文章分享了他们在制作密室逃脱场景下,使用 TabletopKit 来开发一个 VisionOS 的应用。这个主要是针对桌面游戏的需求来设计的框架,支持多人互动,桌面的 Persona 布局,还有丰富的交互能力。有兴趣给 Vision Pro 开发桌面游戏的可以调研一下这个框架。
🐎 解决 Xcode 16 "Waiting to reconnect to ..." 问题
@Cooper Chen:这篇文章主要解决了在升级到 Xcode 16 后,无法在 Apple TV(tvOS 17.7)上构建应用的问题。错误提示显示 DDI(Developer Disk Image)内容过时,导致设备无法连接。最终,运行 xcrun devicectl manage ddis update
命令更新 DDI 后,问题得以解决。这个方法不仅适用于 tvOS,也可以解决 iOS 开发中的类似问题,帮助开发者应对 Xcode 16 引入的新 DDI 管理方式。
🐢 asm lessons
@老驴:很多人敲碗等待的 FFmpeg 汇编课终于来了。FFmpeg 现在基本是业界最重要的开源视频编解码库了。这种对于性能极度敏感的库,自然会有一些特殊手段来进一步优化性能。FFmpeg 团队就在库里使用了大量的汇编,按照他们的说法,可以大幅提升性能。但是现在会手写汇编语言的人也越来越少,所以很多人就敲碗让团队出一个汇编课程。这就是这个课程的来历。略微可惜的是,这个课程目前是基于 x86 的汇编,不过团队也说之后会添加 ARM 的汇编内容。鉴于 FFmpeg 在业界的地位,值得大家花一点时间来学习一下。
工具
🐎 你的 iPhone 也可以离线运行 DeepSeek「含原理介绍」
@EyreFree:本文为大家介绍了一款能在 iPhone 上运行 LLM 的应用 fullmoon,它的下载链接为 https://apps.apple.com/app/id6727014156,能直接运行 mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-4bit 模型,还给出了配置步骤,其原理基于苹果的 MLX Swift 实现,iOS 开发者可通过修改 LLMEval 例子来运行 DeepSeek。作者自测 iPhone 16 Pro 能运行 1.5B 和 7B 模型,感兴趣的朋友可以下载体验。
Tips
🐎 DispatchConcurrentQueue 可用性提示
@Damien:DispatchConcurrentQueue 实际要在 iOS 17 才开始能够使用,但是 Xcode 15 标注错误并且可以通过编译检查,但是在 Runtime 期间会引发 Crash。有使用到的同学请特别注意。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #323 | 2025-02-17
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
Updating the Visual Studio Code extension for Swift
@Cooper Chen:Swift 团队正式支持 Visual Studio Code 中的新版本 Swift 扩展,旨在提升跨平台开发体验。原有扩展已迁移至 GitHub /swiftlang 组织,确保更广泛的社区支持和持续更新。对于现有开发者,升级过程无缝衔接,旧版扩展会自动替换为新版,用户可以轻松过渡。如果你是 Swift 开发者,可以尽快更新以体验更多功能和改进。
文章
🐕 Creating a reusable action menu component in SwiftUI
@AidenRao:这篇文章详细介绍了如何通过 SwiftUI 构建一个高度复用、和 Apple Mail 中的操作菜单风格一致的动作菜单组件:
- 视图构建器与解耦:通过
@ViewBuilder
允许动态注入菜单内容,提升组件的通用性 - SwiftUI 风格系统:利用
LabelStyle
和ButtonStyle
统一管理样式,确保视觉一致性 - 封装与复用:通过视图修饰符将复杂逻辑隐藏,调用时仅需链式语法(如
.actionMenu {title: ..., isPresented: ...}
),类似 SwiftUI 原生 API 的体验
作者也提供了配套的 GitHub 库(ActionMenu),支持通过 Swift Package Manager 集成。
🐎 Attaching debugger to system apps
@Kyle-Ye: 作者分享了调试 iOS 模拟器中系统 App 的一些经验:在关闭 macOS SIP 后我们即可对任何进程进行调试,然后使用 simctl
命名启动对应系统 App 并获取 PID,最后在 Xcode 中对该 process 进行 debug 即可。
🐎 Attending Apple Intelligence and App Intents workshop at Paris
@Smallfly:这是一篇苹果在巴黎举办的技术研讨会议内容,主题围绕如何通过 Apple Intelligence 和 App Intents 框架增强应用功能,提升系统集成能力。涵盖从代码实现到系统集成的关键步骤,并透露出苹果在智能化和本地化功能上的战略布局。
iOS App Intents 是苹果生态中实现「功能原子化」的核心工具,通过标准化接口打通应用与系统的边界。开发者通过定义意图和实体,即可将应用融入 Siri、搜索、自动化等场景,为用户提供无缝、智能的体验。随着 Apple Intelligence 的深化整合,其应用潜力将进一步释放,对于关注 AI 集成的开发者,有较高的参考价值。
🐢 Flutter 3.29 发布,看起来会是一个“大坑”的版本
@david-clang:本文结构和内容参考 Flutter 技术项目经理的 What ’ s new in Flutter 3.29 ,作者在官方软文报喜不报忧的基础上,给出开发者角度的担忧,例如:
- Dart 代码会直接在 Android 和 iOS 的主 UI 线程上运行,而不是单独的 Dart UI 线程,此时 Dart 和平台调用直接可以同步执行。
- 没有 Vulkan 驱动的 Android 设备将回退到在 OpenGLES 上运行的 Impeller,而不是使用 Skia。
- 移除了 Flutter Gradle 插件,之前没迁移的需要手动迁移适配。
而且 Flutter 创始人 Eric 也对“废弃 Dart 独立 UI 线程”发表了 comment,表怀疑态度,比如 Dart 和 Native 平台同一线程之后,那么「滚动 / 动画」是否会因此出现相互影响,特别是第三方插件处理不当的时候,反而可能更加卡顿。官方回复 Eric 这利大于弊,而 Eric 表示后面有空整理文档回复该讨论。
工具
🐢 SweetPad: Develop Swift/iOS projects using VSCode
@阿权:之前你可能听说过 VSCode 插件 Swift Programming Language,官方大力宣传可以 Swift 可以跨平台开发了,但也就仅限于开发 Swift 了(语法高亮、代码补全、错误检查、Swift Package Only),还是不能取代 Xcode 进行 iOS 开发。
SweetPad 或许能做到这一点,其也是一款 VSCode 插件,旨在使用 VSCode 开发 Swift/iOS 项目,成为 Xcode 以外的替代 IDE 方案。SweetPad 通过集成各种开源工具(swift-format、swiftlint、xcodebuild、xcrun、xcode-build-server、sourcekit-lsp 等)直接在 Xcode 生成(当然也可以用 XcodeGen 或 Tuist 生成)的项目文件进行开发、运行和调试。换句话说,SweetPad 通过各种命令行工具实现并对齐 Xcode 的各项能力。
SweetPad 目前实现能力有:
- Xcode 项目文件编辑:通过 Tuist 工具实现。
- 自动补全(SourceKit-LSP)、单元测试:通过 Swift 插件 + xcode-build-server 工具实现。
- 调试:通过 CodeLLDB 实现。
- 运行到模拟器和真机:通过
xcrun simctl
和xcrun devicectl
命令行实现。 - 格式化:通过 swift-format 实现。
SweetPad 还没使用最近开源的 swift-build,还是使用 xcodebuild
+ sourcekit-lsp
的方案,所以还是得安装 Xcode 环境。另外,诸如 SwiftUI Preview、XIB/Stroyboard 可视化、签名证书管理等也尚未支持。
之前 #224 周报有提到 用 VSCode 基于 Bazel 打造 Apple 生态开发环境 则是实现一套 Bis + Bazel 编译系统的 VSCode 开发环境,感兴趣的同学可以对比着阅读。
Tips
一个使用 Instrument 的小技巧
@Barney:Instrument 录制结束卡顿很久或者秒退时,可用的设置。只采集最后几秒的数据,对于一些需要前置操作一段时间才能复现的问题时,会有较大帮助。在处理大量长时间数据时,Instrument 会有较大卡顿并消耗大量内存,此时就可以开启这个选项。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #322 | 2025-02-10
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
周报编辑组又来新人啦~
欢迎 zhangferry 加入老司机技术!ferry 是我们的老朋友了,作为摸鱼周报的主编输出了大量优质内容,同时也深度参与了历年 WWDC 内参担任审核。目前 ferry 在抖音基础技术团队从事代码分析相关工作,对 LLM 与 Stable Diffusion 也有涉猎。
希望 ferry 的加入也能为大家带来更多元化的内容输出!
新闻
Apple 开源 Xcode 底层构建引擎
@kemchenj:Apple 近日开源了 swift-build,它是 Xcode、Swift Playground 底层使用的构建引擎(在 Xcode 里名为 XCBBuildService)。
目前 Swift Package Manager 使用的是另一套单独编写的构建引擎,同时维护两套除了行为不同会让用户困惑,并且维护成本也很高,所以后续 SPM 也会改为使用 swift-build,统一构建系统。
这样也给了我们机会一窥 Xcode 里的构建逻辑,以往很多问题都可以直接在这个库里找到答案,对于 Xcode 构建逻辑感兴趣的你千万别错过。
不再依赖 CallKit,iOS 微信使用新方案实现通话弹窗接听
苹果上线了新的 LiveCommunicationKit 作为在中国大陆替代 CallKit ,从用户视角分析,与 CallKit 最大的区别就是适配了灵动岛。目前文档内容不多,期待 WWDC25 中能有更详细的内容。
文章
🌟 🐢 Debugging An Undebuggable App
@ChengzhiHuang:作者记录了他尝试注入一个应用时遇到的全过程,其中使用的技巧与思路清晰明确,值得所有需要逆向相关工作的同学阅读。简单列举一些其中让我感到受益匪浅的知识(并非全部):
- 直接调用
ptrace(PT_DENY_ATTACH, 0, 0, 0);
可以阻止后续所有的 debugger(lldb) attch。需要注意 ptrace 在 iOS 上是私有函数,需要通过 dlsym 查找。如果应用使用这种方式加固,则可以通过符号断点并thread return
跳过当前函数的剩余指令解决。 - ptrace 本质是
svc #0x80
等汇编指令的集合,因此可以直接通过汇编指令调用,就能避免应用程序绕过 dlsym 寻找 ptrace 来进行调用(这样也能避免一些审核时的私有 API 扫描)。 - 在未知的二进制中搜索带有特殊含义的汇编,例如搜索
mov x16, #0x1a
与mov w16, #0x1a
就比搜索 svc 效率更高。因为 x16/x17 是一般是跳转校验用的特殊寄存器,很少挪作他用。 br s -a 0x102A2BB14 -s XXXBinary
意思是设置断点,在相对 XXXBinary 的 loadAddress + 0x102A2BB14 的位置。这样可以避免每次启动 App 时 iOS 的 ASLR 机制会随机 loadAdfress 位置而需要重复计算实际的断点地址。同样我们日常调试时也可以相对我们自己的二进制或者系统库(UIKit / SwiftFoundation 等)设置断点。- 通过无限循环调用 [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES/NO] 可以制造出 OOM ,进而直接让 iOS 系统崩溃而重启(System OOM)。
🐎 Advantages of Using withAnimation
@含笑饮砒霜:这篇文章比较了 SwiftUI 中在视图声明上使用 .animation(...) 和在操作中使用 withAnimation 的差异。前者仅动画视图自身,当需要让布局或其他视图也平滑过渡时就会出现视图跳动等问题。使用 withAnimation 则能让所有相关布局变化一并参与动画,尤其在 ScrollView 等场景下可确保整体体验平滑无跳跃。
🐢 Hardcore Debugging
@zhangferry:当调试应用发生崩溃,崩溃信息只有系统堆栈没有源码时,会影响我们定位问题。针对这类场景,文中提供了两种解决方案:
- 利用
git bisect
,在正常 commit 和引入问题 commit 之间,通过二分法定位首次引入问题的 commit,来最大限度缩小排查范围。 - 提取崩溃日志,利用 atos 进行符号化,可以更精准定位问题代码。其中还分享了一个 tips,当 atos 执行异常时,可以根据偏移地址在 dSYM 里的
Relocations/aarch64/xx.yml
文件中手动解析符号。
🐎 Compose 多平台是真实存在的!
@极速男孩:该文章分享了作者使用 Kotlin Multiplatform 与 Compose Multiplatform 的体验。通过网页工具快速生成项目模板,并在 Android Studio 中打开,然后简单实现了一个 PhotoApp,实现多平台代码共享。虽然依赖配置略有挑战,但可直接在 Android Studio 中运行 iOS 应用。
🐢 深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件
@david-clang:本文深入介绍 Android 侧 Flutter 和 Compose 在内嵌 Platform Views 的实现对比。虽然 Compose 和「传统 XML View」 在上层开发是两种写法,但因为底层渲染机制都是 Android Native View 的同一套渲染机制,所以无论内嵌 Platform Views 是否为 SurfaceView,都能正常渲染,甚至官方还推出了 SurfaceView 对应的 Compose 封装 AndroidExternalSurfaceScope。而 Flutter 和内嵌的 Platform Views 是两套渲染流程,连渲染数据的生产线程都不同,而且在内嵌 SurfaceView 时的渲染模式会从 TLHC 降级为 VD(这会影响 SurfaceView 交互逻辑,如无障碍功能可能失效),对此官方还没很完美的兼容方案(截止 2 月 9 日,Android 侧 Platform Views 相关的 issue 还有 100 个是 open 状态)。
🐕 深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比
@Crazy:这是一篇针对 Flutter 与 Compose 两个框架的 Diff 机制讲解的文章,本篇文章首先对 Flutter 的 Diff 机制进行分析,从 setState 方法开始逐步讲解 Flutter 框架的 Element 树是如何进行对比判断与循环更新的。很多 Flutter 开发者开发了两三年的 Flutter 也不知道 Widget 中的 Key 的作用,这篇文章很好的告诉了你 Key 与 runtimeType 的对比位置,也会让大家对 Key 的理解有更深的体会。文章对 Compose 的 Diff 算法进行了分析,Compose 与 Flutter 不同,Compose 是两个树来进行 UI 管理,同样在 Compose 的对比过程中,它的 Key 也启到了至关重要的作用,Compose 的 Diff 相较于 Flutter 更加的复杂,因为涉及到了多个模块的协作问题。本文读起来很快,但是需要大家反复阅读,如果有时间也可以根据文章所说的对源码进行自己的分析,会有不一样的效果。
工具
🐎 Network Link Conditioner: Simulating Slow Networking
@阿权:Network Link Conditioner 是苹果提供的慢网模拟工具,支持 macOS 和 iOS,其提供几套预设的网络环境供用户直接切换,常用于调试网络环境不佳下的网络请求或其他连接,优化用户体验,文章详细介绍了在该工具在各平台的使用方法。
比较有趣的是在模拟器上模拟慢网时还提到了另外一款工具 RocketSim,该工具可以独立控制模拟器的慢网模拟,不影响 macOS 其他进程,另外该工具还支持网络抓包、UI 稿对比、网格像素对齐、标尺、程序状态切换、Deeplink 测试、推送测试、权限控制、定位模拟等功能,功能丰富强大,可惜只能作用在模拟器。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
老司机 iOS 周报 #321 | 2025-01-20
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
这就是春节前最后一期周报啦,下周老司机编辑部也会开始春节假期,提前祝大家新春快乐!
文章
🌟 🐎 探究 SwiftUI Preview 的工作原理
@JonyFang: 在 SwiftUI 开发中,Xcode Preview 常出现崩溃或卡死问题,如果不了解其工作原理,通常只能用清除缓存、重启 Xcode 等方法解决。作者通过将 DerivedData 文件夹加入 Git 管理,观察其变化来研究 Preview 原理。其运行机制上,Xcode 16 起 Build and Run 与 Preview 共享构建产物,Preview 用 JIT 方式运行且有特殊预处理过程。Preview 有 Small、Middle、Large 三种重构建策略,依源代码修改程度决定范围与刷新方式。与 Flutter 的 Hot Reload 相比 Xcode Preview 的表现逊色,不支持断点调试,视图状态会重置,实现更黑盒,但仍期待 Xcode 后续对 Preview 优化。
🐢 Using Copilot to write a raindrop audio synthesizer using AVAudioEngine
@EyreFree:本文分享了作者使用 GitHub Copilot 开发一个用 AVAudioEngine 实现的雨滴音频合成器的经历。文章评估了 Copilot 在实际开发中的优缺点:
优点:
- 在处理不熟悉的 SDK 时能快速提供解决方案;
- 能实现复杂算法(如粉噪音生成);
- 擅长跨语言代码转换(如 C++ 到 Swift)且基本不会产生语法错误。
缺点:
- 代码质量欠佳,存在大量重复和不必要的抽象,常忽略指令的部分要求;
- 对最新的语言特性支持不足,线程安全处理不当;
- 手动修改代码后容易与 Copilot 聊天上下文不同步。
使用 Copilot 就像在指导一个热情但经验不足的新手程序员,虽然在某些场景下能提高效率,但需要权衡使用 Copilot 编写代码与手动修复其产生的问题之间的时间成本,因为和 Copilot 的交互是「一次性」的,AI 并不会真的累积这些进步。
🐎 Creating interactive tutorials using DocC
@Kyle-Ye: 文章介绍了如何使用 DocC 创建交互式教程。通过 DocC,可以将静态的文档内容转变为交互式的体验,允许用户在文档中点击、操作,并快速找到他们所需的信息。此外,文章还展示了如何集成代码示例、自定义预览图片和课后小测,提供了更具互动性和可操作性的开发者学习体验。
🐎 Creating a SwiftUI text view with tappable links
@Bluesjiang: 文章介绍了一种在 SwiftUI 中实现可点击超链接效果的文本。因为 SwiftUI 原生没有提供对应中间。文章的作者很巧妙的利用了 SwiftUI 中 Text
支持 Markdown 的渲染来实现这一效果。作者还简单编写了一个组件来帮你快捷的构建 Markdown 超链接的内容。比较适合刚入门 SwiftUI 的同学实践自定义 UI。
🐕 Size Matters: An Exploration of Virtual Memory on iOS
@阿权:文章作者发现开启扩展虚拟内存(Extended Virtual Addressing)能够解决调试 App OOM 的问题。文中详细介绍了以下内容:
- 虚拟内存的原理、作用;
- iOS 中虚拟内存:
- iOS 虚拟内存的特殊性:No Page Outs;
- iOS 虚拟内存空间大小的计算方式;
- iOS 不同设备进程可用的虚拟地址空间大小;
- 调试 App 出现 OOM 的原因:除了程序自身的 Mach-O、依赖库占用内存,还需为调试环境预留内存;
- 通过开启扩展虚拟内存(Extended Virtual Addressing)来防止调试出现 OOM。
文章遇到的情况在许多大型项目跑在低端设备上都会经常出现,了解虚拟内存对调试开发都很有帮助。
🐢 Type-Driven Design with Swift
@DylanYang:作者通过一系列文章向我们介绍了类型驱动设计的概念。类型驱动设计的核心是通过类型自身来传递更多信息,一个非空类型比一个 Optional 类型包含了更多信息(非空),一个自定义的 Email 类型可以比单纯的 String 包含更多信息,例如在一个 Email 结构的初始化中校验 String 的格式是否正确,通过传递 Email 类型而不是 String 来保留这份格式校验的信息。以此类推,把更多的逻辑通过自定义类型封装起来,通过巧妙的设计类型来抹除原本可能出现的错误状态,然后在类型和类型之间通过领域化来划分、拆解,使得整个设计思路更清晰。本系列通过丰富的 demo 对类型驱动设计这一概念有较深入的阐释,感兴趣的读者可以花时间阅读下这个系列。
代码
🐎 echarts
@极速男孩: ECharts 是一个开源的可视化库,广泛用于创建交互式图表。线性图表常用于表示数据趋势,X 轴通常为时间或类别,Y 轴为数值。ECharts 支持多条数据线展示、交互式操作(如悬停显示数据),并可高度自定义图表样式,如颜色、线条类型、动画等。用户通过 JSON 配置来定义图表内容,适用于销售、气温等多种数据展示。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
# 老司机 iOS 周报 #320 | 2025-01-13
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
🐎 Algorithm changes to server connections for Apple Pay on the Web
@Damien:从 2025 年 2 月 4 日开始,苹果将改变支持 Apple Pay 在 Web 上的服务器连接的安全算法。为了保持服务不间断,你需要确保你的生产服务器在这个日期之前支持指定的六种密码之一。
文章
🐕 Xcode Library customization with SPM plugin
@Kyle-Ye: 本文探讨了如何通过 Swift Package Manager 插件自动将自定义 SwiftUI 视图和修饰符集成到 Xcode Library 中。
通过实现 LibraryContentProvider
协议,开发者可以将自定义组件引入库中,提升可重用性和发现性。然而,手动维护这些集成可能会很繁琐。作者通过利用 SwiftSyntax,开发了一份插件来自动化此过程,这种方法简化了将自定义组件集成到 Xcode 库中的过程,减少了手动操作和潜在错误。
🐕 数据编织在AB实验自动化中的应用 | 京东零售技术实践
@Barney:本文讨论了数据编织在 AB 实验中的应用,强调其重要性以及面临的数据科学性、一致性和时效性挑战,并提出相应的自动化解决方案。内容涵盖数据编织的管理理念、逻辑数据平台构建、标准语义建立及自动编排等关键技术。最后,展示了 AB 实验链路的自动化实施进展及未来规划,强调提升交付效率和数据治理的必要性。
🐢 使用火山引擎 APMPlus 优化 iOS 内存性能的全套指南
@阿权:文章本是 APMPlus 的软文,一套全面的性能监控的解决方案,但偏偏还为大家罗列了 21 条内存管理的最佳实践,并介绍了 OOM 监控的基本原理与手段。干货满满,都是我们日常开发中高频遇到的场景,或许它能成为内存问题踩坑时的自查小册。
🐕 What happens when you move a file in git?
@JonyFang: 文章主要介绍了在 Git 中移动或重命名文件及文件夹时的内部工作原理,包括文件以快照形式存储、文件夹与提交的关联、重命名或移动操作对存储的影响及优化方法,还提及了大文件的特殊处理情况。文中对 Git 文件的操作机制的介绍,对日常开发中文件结构调整会有帮助,降低因操作不当引发的仓库性能问题风险。
代码
🚧 Now we’re all Forked!
@Cooper Chen:Forked 是一个简化共享数据管理的 Swift 工具,专为多设备数据同步和冲突解决设计。借鉴 Git 的分支和合并机制,Forked 能轻松实现三方合并(3-way merge),并自动处理并发冲突。该工具支持与 iCloud 等云服务同步,确保跨设备的数据一致性,并通过简洁的 API 帮助开发者快速实现数据合并和冲突解决。无论是离线编辑还是实时协作,Forked 都能提供高效、可靠的数据管理方案。如果你需要在应用中实现智能数据同步和冲突解决,Forked 是一个理想选择。了解更多并开始使用 Forked,查看官方文档:Forked GitHub 仓库。
🐢 解密小红书与美团的合作案例
@EyreFree:播客主要探讨了小红书与美团两大平台的战略合作,美团正在寻求从单纯的效果营销转向更注重品牌价值和用户心智的增长方式,而小红书则凭借其独特的内容生态和用户群体特征,成为流行生活趋势的策源地。双方合作的核心在于优势互补:美团有流量但缺乏优质内容,小红书拥有丰富的 UGC 内容但需要商业变现出口。这次合作反映了内容平台与交易平台的融合趋势,也展示了"反漏斗模型"在实际商业场景中的应用。虽然可能离具体的技术开发较远,但对互联网商业逻辑感兴趣的朋友可以听一下。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)