Releases: SwiftOldDriver/iOS-Weekly
老司机 iOS 周报 #336 | 2025-05-26
老司机 iOS 周报 #336 | 2025-05-26
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🌟 🐢 LLM 学习笔记:最好的学习方法是带着问题去寻找答案
@Cooper Chen:这篇文章以日常 AI 聊天场景为切入点,生动解析了大语言模型背后的技术原理。特别值得关注的是:
- 完整训练流程剖析
- 数据清洗:详细讲解如何通过 MinHash 去重、PII 移除、Gopher 过滤等技术处理海量原始数据
- Tokenization 优化:深入解析 BPE/WordPiece 算法,对比不同模型的词汇表设计(如 GPT-4 的 10 万 token 词汇表)
- 分布式训练:揭秘千亿参数模型如何在数千 GPU 上高效并行训练
- 监督微调(SFT):展示如何用人工标注的高质量对话数据优化模型输出
- 奖励建模(RM):详解如何训练小型网络评估回答质量,实现人类偏好对齐
- DeepSeek-R1 的创新实践
-
GRPO 算法详解:
- 创新性地采用分组相对策略优化(Group Relative Policy Optimization)
- 通过分组奖励估计替代传统批评模型,降低 40% 训练成本
- 结合准确性奖励(基于规则验证)和格式奖励(强制结构化输出)
-
自主推理能力涌现:
- 训练过程中自然发展出自我验证和反思能力
- 在数学(AIME 2024)任务上 pass@1 达 71%
- 自动生成长思维链(CoT)推理过程,平均生成 500+ 推理 token
文章用大量实例和图表,将复杂的模型训练过程讲解得通俗易懂。无论是想了解 AI 工作原理的初学者,还是希望深入掌握训练技巧的开发者都能从中获得启发。
🐎 What's new in Swift 6.2?
@Smallfly:这篇文章介绍了 Swift 6.2 将会迎来的重大更新,聚焦于提升开发效率与代码安全性。其核心改进包括:
- 并发编程简化:通过编译器标志
-default-isolation MainActor
支持模块级主线程默认隔离,大幅降低异步代码复杂度;新增Task.immediate
实现同步任务初始化,优化执行逻辑。 - 语法增强:引入原始标识符(如
`Strip HTML tags`()
)提升测试可读性,字符串插值支持默认值(\(age, default: "Unknown")
),KeyPath 扩展支持方法调用(map(\.uppercased())
)。 - 工具升级:
Backtrace
API 提供运行时堆栈追踪,任务命名功能(Task(name: "FetchNews")
)助力异步调试,InlineArray
实现高性能定长存储。 - 测试革新:支持验证程序崩溃逻辑(
#expect(processExitsWith:)
),失败测试可附加日志 / 数据(Attachment.record()
)。 - 安全强化:严格内存检查要求显式标记
@unsafe
代码,全局 Actor 隔离协议提升并发安全。
此次更新通过 20+ 项提案优化了语言一致性,为开发者提供更简洁、安全的工具链,尤其助力 SwiftUI 和服务器端开发的深度整合。
🐎 Dependency container on top of task local values in Swift
@Cooper Chen:这篇文章由 Swift 专家 Majid 撰写,深入探讨了 Swift 并发编程中的 Task Local Values(任务本地值),并创新性地将其应用于依赖注入容器的实现。
文章首先解析了 @TaskLocal 宏的核心机制,展示了它如何在异步任务间隐式传递数据,类似于 SwiftUI 的 Environment。随后,作者通过构建一个支持多环境(生产 / 测试)的依赖容器,演示了如何利用这一特性优雅地管理全局依赖,特别是在单元测试中快速切换 mock 实现。适合中高级 Swift 开发者学习现代并发编程范式,为复杂应用架构提供新思路。
🐎 2025 上半年 Flutter iOS 大坑超汇总,看看你踩中了没
@david-clang:本文汇总了 2025 上半年 Flutter iOS 影响比较大的 6 个问题,好在这些问题都有对应的解决办法,它们分别是:
- iOS 18.4 Beta 的 JIT 权限问题(#163984)
- macOS 15.4 打包 IPA 的 ITMS-90048 错误(#166367)
- macOS 15.4 模拟器的调试服务问题(#166333)
- iOS 设备 Hot Restart 延迟(#165656)
- iOS 18.5 Beta 字体粗细异常(#167343)
- iOS 输入框崩溃问题(#138464)
🐎 Default isolation with Swift 6.2
@DylanYang:本文作者通过 Swift 默认可见性的类比形象的为大家解释了默认隔离态 (Isolation) 的含义。修改默认隔离态是 Swift 6.2 新引入的特性,帮助开发者方便的修改一个模块默认的隔离态。原先模块默认的隔离态均为无隔离 (nonisolated),而通过修改默认隔离态,我们可以将一个模块的隔离态默认改为使用主线程隔离,相当于默认带上了 @MainActor
。不过作者随后也提到此修改有利有弊,大家实际使用时需要认真权衡。
代码
OpenAsyncImage
SwiftUI 的 AsyncImage
开源 backport:
- 最低支持 iOS 13
- 基于 iOS 18 的
State.wrappedValue
setter 进行优化 - 全平台统一一致的行为
内推
重新开始更新「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 周报 #335 | 2025-05-19
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
Apple 公布将于今年晚些时候推出的强大辅助功能
苹果在辅助功能的上的设计还是非常先进的,现有的一些辅助功能适配起来相对来说还是比较轻松的,期待苹果更多的辅助功能。
文章
🐎 UIApplication delegate deprecation coming in iOS 19 SDK
@Damien:作者通过关注 WebKit 提交记录发现 iOS 19 SDK 中 UIApplicationDelegate 协议中的部分 API 将被弃用,原因是修复因新 SDK 导致的弃用警告,作者预测“新 SDK ”指的是即将在 6 月 WWDC 发布的 iOS 19,苹果工程师们已经在用 iOS 19 SDK 编译 WebKit,所以出现了这些弃用警告。
🐕 Using Model Context Protocol in iOS apps
@含笑饮砒霜:MCP(Model Context Protocol,模型上下文协议)是一种用于大语言模型(LLM)与外部工具交互的协议。它允许模型在对话过程中调用开发者自定义的函数(称为“工具”),以访问本地或远程的数据和服务,从而增强模型的实际能力。这篇文章介绍了如何在 iOS 应用中使用 Model Context Protocol(MCP)集成大模型能力。作者通过示例展示了如何实现一个 MCP Server(用于获取 Apple Health 中的血压数据)和一个 MCP Client(通过 Anthropic Claude API 实现聊天功能)。整个流程包括定义工具、调用本地服务、解析大模型响应,并在用户请求与工具调用之间建立桥梁,实现智能对话与本地数据交互的结合。
🐕 Xtool: cross-platform Xcode replacement. Build iOS apps on Linux and more!
@Kyle-Ye: 这篇贴子介绍了作者的开发名为 Xtool 的跨平台 Xcode 替代工具。Xtool 可以在 Linux 和 Windows 上构建和部署 iOS 应用程序 , 同时也可以在 macOS 上替代 Xcode。它支持使用 SwiftPM 构建 iOS 应用程序、签名和安装应用程序。中间还提到了一些 Xtool 目前还不支持的功能 , 如 Interface Builder、资产目录和 LLDB 调试等,作者表示未来会继续完善这些功能。
🐕 Vibe Xcoding your apps
@EyreFree:本文探讨了 LLMs 驱动的氛围编程(Vibe Coding)在 Xcode 生态的应用,介绍了 Alex、CopilotForXcode 等社区开发的 AI 代码助手,提及 MCP 协议对上下文交互的作用。同时指出了 Xcode 的扩展性局限,期待苹果开放底层接口(如借鉴 VSCode 模式)优化集成,强调了上下文、运行时数据和文档对 AI 辅助的重要性。作者认为氛围编程将推动苹果革新开发者工具,建议感兴趣的朋友持续关注社区在 Xcode 与 AI 整合方面的探索。
🐎 A flowing WebGL gradient, deconstructed
@莲叔: 一篇非常棒的科普文章,通过由浅入深的例子,娓娓道来的揭开了复杂动效的神秘面纱。本质上,绝大多数动画都可以解构为 时间 + 公式 + 图形 api。本篇文章从渐变开始、过度到波浪、贝塞尔曲线等复杂动效,都以思路,公式到代码予以实现,一直到最后实现了一个非常炫酷的动态模糊效果,标题中虽然有 WebGL,但绝大多数代码其实可以非常方便的移植到其他图形 api,如 OpenGL 和 Metal 等等。对动画和图形学有兴趣的同学千万不能错过。
🐕 Unlocking the Real Power of Swift 6's Typed Throws with Error Chains
@阿权:本文围绕 Swift 6 的类型化抛出(Typed Throws)特性展开,重点解决错误处理中的「嵌套地狱」问题,核心内容如下:
- 类型化抛出的优势与挑战
- 优势:编译时错误检查、类型安全、自文档化 API、IDE 支持。
- 挑战:抛出类型只能指定一个,不支持嵌套。多层架构中错误需手动转换,导致代码冗余、类型激增和上下文丢失。
- Catching 协议与 ErrorKit 解决方案
- 引入 ErrorKit,通过
Catching
协议为错误类型添加caught(Error)
case,统一包装子层错误。 - 关键函数:
catch
函数:自动将闭包中抛出的错误包装为当前层错误类型,避免手动转换。errorChainDescription
函数:递归构建层级化错误链,保留原始错误上下文,提升调试效率。
- 引入 ErrorKit,通过
- 总结
- 类型化抛出结合
Catching
协议,在保证类型安全的同时简化错误处理,ErrorKit 提供的工具链进一步增强了调试能力。 - 适用于复杂多层架构,尤其适合需要清晰错误追踪和高效调试的场景。
- 类型化抛出结合
🐕 Debug crashes in iOS using MetricKit
@Barney:文章介绍如何通过苹果 MetricKit 实现系统级崩溃诊断,捕获内存 / 系统信号等传统工具遗漏的崩溃。涵盖框架配置、调用栈分析和 iOS 版本差异化报告机制(13-14 每日汇总,15+ 即时推送),提供崩溃模拟方案,并展示与 Zoho Apptics 整合实现符号解析与数据可视化。
🐕 Fitting the Lapse experience into 15 MegaBytes
@DylanYang:本文讲述了作者在开发 App Clip 时如何将包体压缩到 15 MB 的方式。作者通过重构依赖关系,减少核心功能的依赖库大小,减少、压缩内置的图片、字体等文件,分割核心模块,较少不必要的代码,裁剪字体包,编译优化等各种手段来极致的压缩包体。虽然这是 App Clip,但是对 App 本体的包体有诉求的开发者也有不错的参考价值。
代码
ButtonKit
@Smallfly:ButtonKit 的设计背景源于 SwiftUI 对异步任务交互的不足,旨在简化开发者在处理复杂用户交互时的工作量。其主要作用是提供一个支持异步操作、进度展示和自定义样式的按钮组件,特别适合需要处理网络请求、文件操作或其他耗时任务的 SwiftUI 应用。开发者可以通过这个库减少样板代码,提升代码可读性和用户体验。
内推
重新开始更新「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 周报 #334 | 2025-05-12
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐕 Adding dependencies to binary Swift packages
@含笑饮砒霜:这篇文章介绍了作者如何为 Swift 的二进制包(binary Swift packages)添加依赖的问题和解决方案。普通 Swift 包可以直接声明依赖,但二进制包无法这样做,这给闭源 SDK 的开发带来了挑战。过去作者采用复制依赖库源代码到二进制包中的方式来解决,但这种方式混乱、低效、并增加了编译时间。后来作者发现可以通过在 Swift 包中同时声明多个二进制目标(binary target),并将它们一起加入到产品中,从而实现依赖的间接引入,这样包管理器就会自动下载和链接所需的依赖库。作者用这种方法解决了 VietnameseInput 这类闭源 SDK 的依赖管理问题,大大简化了项目结构并提升了构建效率,同时也指出这种方案尚未在更多场景下验证,需要更多开发者一起探索和交流。
🐎 支付宝客户端 Kotlin/Native 包体积优化实践
@Kyle-Ye:支付宝在使用 Kotlin/Native 进行跨端开发时 , 针对应用安装包体积过大的问题 , 采取了一系列优化措施。通过增加 LLVM 优化参数和 DCE 优化,支付宝团队成功将 iOS 和鸿蒙平台上的 Kotlin/Native 应用包体积分别减少了 50% 和 15% 以上。对于正在使用或计划使用 Kotlin/Native 的开发者来说,这篇文章或是一份很好的优化实践参考。
🐢 使用 AVPlayer 播放 FairPlay DRM 视频的最佳实践
@阿权:DRM,数字版权管理,可以简单理解为加密媒体 / 音视频。文章围绕使用 AVPlayer 播放 FairPlay DRM 视频展开,详细介绍了相关技术要点和操作方法,具体内容如下:
- DRM 介绍:DRM 原理、方案;FairPlay 播放 DRM 视频原理。
- FairPlay 密钥的两种管理方式:AVAssetResourceLoader、AVContentKeySession,及其应用场景。
- 使用 AVAssetDownloadTask 下载 DRM 资产:使用流程、下载后本地文件组成。
对于 DRM 视频,其场景不仅可用于点播视频,直播视频场景也可以使用。只要是 Apple 支持的格式,使用系统的 AVPlayer 播放 DRM 足矣,系统提供一定自由度来让用户定义自己的加解密业务流程,剩下的音视频编解码就交由 AVPlayer 自身管理了。这样实现一个满足自身业务的 DRM 播放器门槛自然就低了很多,也不一定都要白手起家捣鼓起 FFmpeg 来。
🐕 Gatekeeper change in macOS 15.4
@Cooper Chen:苹果在 macOS 15.4 中调整了安全策略:用户下载文件后,拖拽至部分应用(如 TextEdit)时会反复弹出安全警告,而 Preview 等应用却不受影响。
问题核心:
- 触发条件取决于应用声明的文件类型。若包含"高危类型"(如 Unix 可执行文件),任何下载文件都会触发警告
- 文件扩展名直接影响判定结果,暴露逻辑漏洞
解决方案:
- 普通用户:终端执行 xattr -d com.apple.quarantine 文件名
- 开发者:需检查应用配置,避免声明高危文件类型
这一调整究竟是安全升级还是过度防护?目前苹果尚未回应,用户可暂用上述方法应对。
🐎 How a Single Line Of Code Could Brick Your iPhone
@david-clang:本文介绍了 Darwin Notify 的系统漏洞,仅一行代码 notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted")
即可让设备进入“恢复中”界面且无法退出,只能重启设备,再利用 iOS 自动唤醒小组件的机制,使设备在每次重启后重复触发漏洞,最终实现一行代码把 iPhone 变砖。不限制该敏感通知发送权限的漏洞疑似 iOS 18.2 beta 2 引入的,在作者报告漏洞后,iOS 18.3 已修复。
工具
DeepWiki
@EyreFree:DeepWiki 是一个将 GitHub 仓库转化为交互式 wiki 的工具网站,它能够根据项目代码、文档等内容为 GitHub 上的 Public 项目生成详细文档、绘制交互式图表、提供对话式 AI 助手等。用法是把 GitHub 项目 URL 中的 github
换成 deepwiki
,例如 kingfisher 的对应访问地址就是 deepwiki.com/onevcat/Kingfisher,或直接在 DeepWiki 官网搜索仓库名称,主流项目基本上已经做了预处理,搜不到的话在主页点击 Add repo
等待处理即可。
代码
swift-subprocess
@kemchenj:Swift 近日开源了 swift-subprocess 这个库,作为 Swift Foundation 团队的提案,旨在提高 Process 相关 API 的易用性,支持更多的 Swift 现代化的特性,设计部份参考了 Python 和 Rust,目前属于 0.1 版本,并且在后续可能会直接加入 Swift Foundation 库。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
- [深圳] Lalamove 司机端(Huolala 海外业务)- 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 周报 #333 | 2025-04-28
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
下周就是五一劳动节了,老司机周报轮休一周,提前祝大家劳动节快乐!
新闻
重磅上线 | 一次性购买通知 ONE_TIME_CHARGE 即将正式发布 / A new App Store Server Notification type will soon be available
@SeaHub:自 2024/06/10 沙箱环境首发以来,该通知历经大半年的稳定性验证,现即将进入现网发布阶段。以下内容值得我们重点关注:
-
全商品类型覆盖能力
突破原有仅自动续期订阅型存在后台发货通知的限制。新通知囊括消耗型商品、非续期订阅型商品及非消耗型商品等所有类型,彻底解决一次性购买场景的后台通知缺位问题 -
客户端依赖解耦
通过一次性购买通知,针对发货阶段,我们不再需要依赖客户端与服务端通信。客户端不再作为发货主路径,实现发货逻辑的解耦 -
实时发货闭环
结合一次性购买通知与 appAccountToken 订单透传字段,可构建起媲美国内主流支付平台(微信支付 / 支付宝)的实时发货体系
该通知于 2025/05/27 正式上线,推荐大家优先接入。我们通过一次性购买通知更加优雅的处理订单发货场景,构建更健壮的业务履约体系
新手推荐
🐎 Using singletons in Swift 6
@Smallfly:本文介绍了 Swift 6 中单例模式因并发安全性触发的编译错误及解决方案。针对「全局可变状态不安全」和「非 Sendable
类型共享状态」等典型问题,文章提出多场景应对策略:通过 MainActor
隔离属性或类型、将共享实例重构为 actor
、使用 Sendable
协议确保类型安全,并谨慎使用 nonisolated(unsafe)
或 @unchecked Sendable
作为临时过渡。作者强调遵循 Swift 6 规范的同时,平衡代码安全性与迁移成本。
🐎 Using Swift ’ s defer keyword within async and throwing contexts
defer
常用在代码块(花括号)作用域结束时执行代码。我们常常用来清理在当前作用域内创建的资源或其他上下文,如配置 lock-unlock。这一思想在 async 方法中同样适用,defer
为异步流程提供一个处理成功或失败绝佳的节点,类似异步的 finally。不过 defer
会打破传统的流程控制流顺序,带来便利的同时也会削弱一些代码可读性。详细可阅读原文,文章从这几方面介绍了 defer
的应用:
defer
关键字基础介绍。- 在异常抛出场景中的应用。
- 在异步场景中的应用。
文章
🌟 🐕 Dynamically Constructing Generic Types in Swift
@JonyFang: 在 Swift 这种强类型语言里,运行时拼泛型一直是个痛点 —— 比如我们想动态生成 Optional<T>
、Array<T>
这样的类型,通常只能在编译期确定。
- 作者先带着扒了扒 Swift 元数据(Metadata)的底层结构,包含
Metadata
、ProtocolDescriptor
、ConditionalProtocolDescriptor
等核心数据布局,并封装成易用的辅助类型,帮你在运行时拿到任意类型的信息和协议类型。 - 接着用 SwiftUI 的
_ConditionalContent<TrueContent, FalseContent>
举例,演示如何调用元数据访问器函数,动态组装出三种常见场景下的泛型:optional
、either
、atom
,整个过程零配置、可复用。 - 最后给出一个基于 Swift Runtime 的完整实现方案,从元数据解析、函数指针调用到类型实例化全流程演示,并对该方案在 ABI 稳定性和未来演进方向上的局限性给出了思考。
如果你在做框架或底层库,需要在运行期才知道类型,或者想探索 Swift ABI / Runtime 的更多玩法,这篇文章绝对值得一读。
🐕 20 years of Git. Still weird, still wonderful.
@AidenRao:这篇文章回顾了 Git 诞生 20 周年的历程,最初由 Linus 为解决 Linux 内核协作问题开发,以高效跟踪代码快照为核心设计。从仅 7 个底层命令的"内容跟踪器"起步,逐步整合社区贡献(如 rebase、log 功能),演变为分布式版本控制系统。GitHub 的诞生及其章鱼猫形象推动普及,使其成为全球开发基石。20 年来核心数据结构和"愚蠢但极快"的理念未变,持续支撑从代码管理到内容分发的创新(如 GitButler),奠定现代软件开发基础设施地位。
🐕 SwiftFiddle/swiftregex: Swift Regex is an online tool to learn, build and test Swift Regex Regex and Regex Builder.
@Barney:Swift Regex 是开源在线工具,支持 Swift 正则表达式及 Regex Builder 的实时测试与调试,提供语法高亮和错误定位。基于 Swift、JavaScript 及 Vapor 框架开发,采用 MIT 协议,含 Docker 部署配置。支持命名捕获组、自动化依赖更新及安全策略,适合开发者快速验证正则逻辑。
🐕 Creating MCP Servers in Swift
@Kyle-Ye:作者深入探讨了如何在 Swift 中创建 MCP 服务器。这篇文章不仅为开发者提供了有关 MCP(Multi-Channel Protocol)通信协议的详细背景,还通过代码示例展示了如何在 Swift 中实现一个基本的 MCP 服务器,最后介绍了如何在 VSCode 和其他客户端中使用该 MCP 服务器。
🐕 Make your app content show on Spotlight
@极速男孩:这篇文章介绍了如何让应用内容出现在 iOS 的 Spotlight 搜索中。主要有两种方法:一是通过 AppShortcutsProvider.updateAppShortcutParameters() 自动索引应用数据;二是使用 Core Spotlight API 手动创建索引,步骤包括为数据模型实现 IndexedEntity 协议、设置 attributeSet 元数据、在添加或删除内容时分别调用 indexAppEntities 和 deleteAppEntities 方法。文章还提到从 iOS 18.4 起,可以用 hideInSpotlight 控制内容是否显示在搜索结果中。
内推
重新开始更新「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 周报 #332 | 2025-04-21
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
文章
🐕 DocC for Multi-Platform Documentation
@Kyle-Ye: 这篇文章介绍了如何手动创建 Swift 包的跨平台文档。虽然 DocC SPM 插件最近添加了对多目标文档生成的支持,但目前仍不支持跨平台包的文档生成。作者分享了一种解决方案,通过直接使用 Xcode 自带的 DocC 工具来实现。
文章详细讲解了三个主要步骤:
- 为各平台构建项目并生成符号图
- 将.docc 包转换为 DocC 存档
- 将存档处理成可托管的 HTML 文件
作者提供了完整的代码示例,包括如何设置 DocC 包结构、创建 Info.plist 文件定义各平台的部署目标,以及编写 shell 脚本来自动化整个构建过程。这种方法可以有效地显示每个 API 在 iOS、watchOS、visionOS、tvOS 和 macOS 上的可用性。
🐕 iOS 静态代码检查方案解读
@含笑饮砒霜:这篇文章对比了 iOS 开发中三大主流静态代码检查工具:SonarQube、Infer 和 Clang Static Analyzer。SonarQube 存在资源消耗大、配置复杂及 Xcode 适配等问题;Infer 存在语言局限和误报、漏报等问题;Xcode 原生集成的 Clang Static Analyzer,相比 SonarQube 和 Infer,Clang 静态分析在底层问题检测、编译阶段的高效性和多语言支持方面具有显著优势。其凭借增量分析、路径敏感检测和零配置优势,通过脚本筛选增量文件并转换分析结果,可以实现高效自动化检查与定制化报告生成,成为平衡开发效率与质量的中大型项目优选方案。
🐕 How to inspect .ipa files and secure your iOS app from common mistakes
@Barney:本文介绍了如何检查 iOS 应用的 .ipa 文件结构,揭示潜在安全隐患。通过 Apple Configurator 等工具获取 .ipa 文件后,可解压分析 Info.plist(含明文密钥 /URL scheme)、Frameworks(第三方 SDK)和 Resources(测试账户 / 配置文件)。并提出三准则:勿在 Info.plist 存敏感数据,移除开发测试资料,避免明文存储密钥。强调攻击者常用逆向工具(如 Hopper)解析未加密信息,开发者应定期自查 .ipa 文件,强化安全防护。
🐎 你为什么需要了解 Dart AST?一个简单的 bug 带你快速认识下 Dart Kernel AST
@david-clang:作者在调用 extension 拓展 BuildContext 的 context.l10n 时报运行时错误 NoSuchMethodError
,最终通过 ast_to_text.dart 相关工具将 IR 层的 dill 文件转成可读文本,定位到问题根本原因是未显式声明函数参数是 BuildContext 类型,导致编译时 context 被推断为 dynamic 类型,最终导致运行时 NoSuchMethodError
错误。文章里通过分析 Dart AST 来找到代码根本问题的思路值得我们学习。
🐎 SwiftUI Keyboard Shortcut Scope
@Smallfly:本文聚焦 SwiftUI 键盘快捷键的「跨视图生效」问题,当控件通过导航跳转离开屏幕时,其关联的快捷键仍被系统识别并响应,导致操作冲突。核心原因是系统按视图层级解析快捷键,而非视图可见性。解决方案是利用状态变量动态禁用父视图控件,间接关闭其快捷键响应。若你在 SwiftUI 开发中需精准管理多层级导航的快捷键作用域,本文可帮助你快速定位逻辑隐患。
代码
🐎 Supercharging SwiftUI Text with Dynamic Content Styling
@阿权:文章提供了一种扩展 SwiftUI Text
视图的思路,通过自定义文本替换规则,允许对文本中的特定字符串(如单词或段落)应用自定义样式。核心实现包括:
TextReplacementView
:提供单个或多个替换规则的初始化接口。processReplacements
:查找文本中的匹配范围,按顺序处理非重叠替换,拼接生成带有不同样式的Text
视图。
文章最后展示了简单和复杂场景下的用法,支持灵活的视图修饰符(如字体、颜色、斜体等)。其优势在于简化了原有通过组合多个 Text
视图实现样式定制的繁琐流程,提供了更统一的解决方案。
更详细的实现和用法可前往开源库 TextReplacements。
内推
重新开始更新「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 周报 #331 | 2025-04-14
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新手推荐
🐎 Building a dependency injection framework
@阿权:文章介绍了在 Swift 中如何从零到一搭建轻量级级依赖注入(DI)容器,内容包括:
- DI 容器设计:实现注册(
register
)和解析(resolve
)依赖的基本功能,通过字典存储类型与工厂函数的映射。 - 生命周期管理:使用枚举
DependencyLifetime
区分瞬态(每次解析创建新实例)和单例(首次解析创建并缓存),通过单独的字典存储单例实例。 - 属性包装器
@Injected
:简化依赖注入,声明属性时自动从容器解析依赖,提升代码简洁性。 - 实战示例:通过协议定义、容器配置和 SwiftUI 集成演示完整流程。
文章中的实现覆盖了 DI 的核心机制,有了这篇文章的基础,推荐大家再去阅读 Swinject 的实现,会对 DI 的实现有更深刻的理解。
文章
🐎 注意,暂时不要升级 MacOS ,Flutter/RN 等构建 ipa 可能会因 「ITMS-90048」被拒绝
@david-clang:macOS 15.4 会导致 Flutter/RN 构建产物新增无效文件夹 .Symbols
,提交 App Store 审核会被拒。虽然文章还提供了临时解决办法,但还是建议非必要先不升级,因为调试 Flutter iOS 模拟器时会遇到 flutter attach
失效,无法 hot reload (#166333),该问题还没好的解决办法,可用真机调试先绕过。
🐕 New in Swift 6.1: Test Scoping Traits
@Cooper Chen:这篇文章介绍了 Swift 6.1 引入的 Test Scoping Traits 新特性,它彻底改变了测试代码的编写方式。通过自定义 TestTrait,开发者可以更优雅地管理测试上下文和全局状态,特别适合依赖注入和快照测试等场景。
新特性主要优势包括:
- 简化测试代码:用 @test(.trait) 替代复杂的闭包嵌套
- 支持并发安全:完美适配 Swift Testing 的并行测试
- 三大流行库已适配:Dependencies、SnapshotTesting 和 MacroTesting 都支持新特性
现在升级到最新版本即可体验这些改进,让测试代码更简洁高效。
🐕 Swiftdata Architecture Patterns And Practices
@Barney:本文以预算管理为例,展示了 Swift 原生框架下数据驱动的开发范式。主要介绍了苹果专为 SwiftUI
设计的 SwiftData
。
核心特性包括:
1 声明式建模 :@Model
宏简化模型定义,支持 Codable
类型与唯一性约束;
2 深度 SwiftUI 整合 :@Query
动态追踪数据变化,视图自动刷新;
3 业务逻辑内聚 :模型类直接嵌入唯一性验证、金额计算等规则;
4 灵活架构 :可选协议抽象数据层,适配长期维护或框架迁移;
5 云同步与预览 :默认 CloudKit
私有库同步,PreviewModifier
快速注入测试数据。
工具
🐎 Introducing swiftly 1.0
@DylanYang:Swift 正式发布了它的工具链版本管理工具 swiftly,它可以帮助开发者更方便的在不同的平台上下载、安装指定版本的 Swift。借助 swiftly 的版本申明,可以更简单的在团队开发或者 CI/CD 环境中保持 Swift 的版本一致性。swiftly 一大亮点是它自身是由 Swift 开发而成的,因此它可以直接使用 Swift 内的标准库处理 HTTP 请求和文件系统读写等场景,它也利用可以和 C 桥接的特性使用了 C 的压缩库。对具体的使用方式感兴趣的同学可以阅读文章做进一步的了解。
音视频
🐢 Spatial Rendering for Apple Vision Pro with ARKit, Metal, and Compositor Services by Warren Moore
@BluesJiang: 《Metal by Example》的作者亲自亲自视频授课。这个视频介绍了 Vision Pro 上做 3D 内容所涵盖的所有知识点,包括 ARKit 渲染,Metal 渲染,自定义渲染器,空间手势,手部追踪,物理等,内容覆盖的很全面,适合想了解 VisionOS 在 3D 渲染方面如何切入的读者。视频作者的书也很值得跟着学一学。
内推
重新开始更新「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 周报 #330 | 2025-04-07
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
🐕 Swift 6.1 Released
@AidenRao:Swift 6.1 正式推出,核心更新:
- 并发优化:
nonisolated
支持类型和扩展,任务组子任务结果类型自动推断; - OC 迁移: 新增
@implementation
支持,允许在 Swift 中实现 Objective-C 类型,便于逐步迁移; - 开发体验:尾随逗号支持扩展至参数列表、元组等场景;
- 包管理:新增
package traits
机制,适配跨平台条件编译; - 测试增强:支持自定义测试前后逻辑,异常处理更便捷;
- 文档工具:Swift-DocC 优化符号链接可读性。
推荐通过 Xcode 16.3 或 swiftly
工具链安装体验。
新手推荐
🐕 Modern URL construction in Swift
@阿权:本文介绍了 Swift 在 URL 构建方面的现代解决方案,通过类型扩展、宏和新 API 的结合,实现了更安全、简洁的 URL 处理方式。开发者可根据项目需求选择合适方案,提升代码质量。具体内容为:
- 静态字符串构建 URL 使用 Optional 方式显得冗余,应直接强制解包。
- 解法 1:添加 URL 扩展直接创建 URL 实例,内部解包为空时 fatallError,输出信息。
- 解法 2:通过自定义宏创建 URL 实例,实现解包并抛出错误的逻辑。
- 对于动态构建的 URL,应使用更结构的 URL、URLComponents 拼接、构建方法,甚至能够直接获取本地常见目录的 URL。
文章
🐕 Deploying a Swift Server App to Fly.io and Railway
@Kyle-Ye: 本文介绍了如何使用 Vapor 框架部署 Swift 服务端应用程序到 Fly.io 和 Railway 平台。文章涵盖了初始化 Vapor 项目、编写 Dockerfile、以及在两个平台上部署应用的具体步骤。此外 , 还提到了一些进阶主题 , 如自定义域名和添加数据库服务等。
🐢 AI 产品经理进阶:万字深析大模型的 MCP(上 & 下)
@EyreFree:这篇文章深度剖析了大模型的 MCP 技术。MCP 是 Anthropic 于 2024 年底开源的开放标准协议,旨在统一 AI 与外部数据源和工具的连接方式,降低集成成本。它采用客户端 - 服务器架构,基于 JSON-RPC 2.0 通信,定义多种原语规范交互。该技术已在智能问答、编程辅助、办公自动化等场景崭露头角。文章还全面分析了 MCP 的优势与局限,如标准统一、开源灵活,但也存在生态不完善、远程支持不足等问题。此外,还展望了其未来在完善远程云支持、构建 “应用商店” 式分发机制、拓展多模态应用等方面的演进方向,为 AI 从业者或对之感兴趣的同学提供了极具价值的参考。
🐕 Fast & Fluid: Integrating Rust egui into SwiftUI
@david-clang:作者在开发实时预览 SwiftData 和 CoreData 数据库的 Mac App DataScout 时,发现 SwiftUI 的 Table
性能相当差,尝试用 AppKit 的 NSTableView
也无法满足需求,最后用 Rust 的 UI 框架 egui
去优化性能。作者把 SwiftUI 中嵌入 egui
渲染视图的 Demo 整理成文章,还用代码示例展示如何在 SwiftUI 的 NavigationSplitView
中嵌入 egui
渲染的视图。以下是 egui
和传统 UI 框架的对比:
- 传统 UI 框架(如 SwiftUI、UIKit)多采用保留模式(Retained Mode),需显式管理 UI 组件状态(例如按钮状态、列表数据等),框架内部通过对比新旧状态差异来局部更新界面。
egui
的即时模式(Immediate Mode) 则相反:每帧完全丢弃旧 UI 状态,根据当前数据重新生成整个界面,通过高频重建实现“无状态化”。
虽然 Demo 中使用 egui_wgpu_backend
作为渲染后端,但它在 Metal 上渲染单帧需要 10 毫秒,作者在开发 DataScout 时,通过自定义渲染后端,把帧渲染时间缩短到仅 1-2 毫秒,最终才实现高性能需求,可见把 “ SwiftUI 中嵌入 egui
渲染视图” 封装成成熟框架会比较难,但本文优化 SwiftUI 性能的思路值得我们学习。
🐎 得物 iOS 启动优化之 Building Closure
@Smallfly:本文深入解析了 iOS 应用启动优化中常被忽视的 Building Closure 阶段(由 dyld 动态链接器负责),聚焦其耗时问题与优化实践。文章通过真实案例,揭示了某版本因 Building Closure 阶段耗时暴增 200ms 的根因定位过程,并最终通过 解决Perfect Hash 算法的哈希冲突,将关键函数耗时从 1200ms 降至 110ms。
文中详细剖析了 Building Closure 的工作原理(如首次启动生成缓存、Swift/ObjC 协议一致性处理),并提供了 文件结构解析、耗时定位方法(Instrument 工具)及优化方案,适合以下读者参考:
- iOS 开发工程师:需优化应用启动速度,尤其是冷启动场景;
- 性能调优团队:关注底层 dyld 机制,探索启动耗时优化新方向;
- 技术管理者:了解复杂问题排查流程与跨团队协作经验。
内推
重新开始更新「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 周报 #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)