普通视图

发现新文章,点击刷新页面。
昨天以前iOS 老司机

老司机 iOS 周报 #330 | 2025-04-07

作者 ChengzhiHuang
2025年4月6日 20:09

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

🐕 Swift 6.1 Released

@AidenRao:Swift 6.1 正式推出,核心更新:

  1. 并发优化: nonisolated 支持类型和扩展,任务组子任务结果类型自动推断;
  2. OC 迁移: 新增 @implementation 支持,允许在 Swift 中实现 Objective-C 类型,便于逐步迁移;
  3. 开发体验:尾随逗号支持扩展至参数列表、元组等场景;
  4. 包管理:新增 package traits 机制,适配跨平台条件编译;
  5. 测试增强:支持自定义测试前后逻辑,异常处理更便捷;
  6. 文档工具:Swift-DocC 优化符号链接可读性。

推荐通过 Xcode 16.3 或 swiftly 工具链安装体验。

新手推荐

🐕 Modern URL construction in Swift

@阿权:本文介绍了 Swift 在 URL 构建方面的现代解决方案,通过类型扩展、宏和新 API 的结合,实现了更安全、简洁的 URL 处理方式。开发者可根据项目需求选择合适方案,提升代码质量。具体内容为:

  1. 静态字符串构建 URL 使用 Optional 方式显得冗余,应直接强制解包。
    1. 解法 1:添加 URL 扩展直接创建 URL 实例,内部解包为空时 fatallError,输出信息。
    2. 解法 2:通过自定义宏创建 URL 实例,实现解包并抛出错误的逻辑。
  2. 对于动态构建的 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 工具)及优化方案,适合以下读者参考:

  1. iOS 开发工程师:需优化应用启动速度,尤其是冷启动场景;
  2. 性能调优团队:关注底层 dyld 机制,探索启动耗时优化新方向;
  3. 技术管理者:了解复杂问题排查流程与跨团队协作经验。

内推

重新开始更新「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

作者 ChengzhiHuang
2025年3月30日 21:50

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 应用中实时检测视频流中的人体姿态。主要步骤包括:

  1. 通过 AVCaptureSession 管理视频采集,处理权限申请,配置视频输入 / 输出格式,并调整画面方向以适应界面显示
  2. 使用 UIViewRepresentable 协议将 AVCaptureVideoPreviewLayer 集成到 SwiftUI 视图中,实现实时画面展示
  3. 创建 PoseEstimationViewModel 类处理视频帧,利用 Vision 的 VNHumanBodyPoseRequest 检测 19 个关键身体节点(如头、肩、肘、腕等),并建立关节连接关系(如肩到肘、膝到踝等)。
  4. 通过检测到的身体坐标点动态绘制骨骼连线,最终实现在视频流上叠加姿态骨架图的效果

文章提供了完整的代码实现思路,适用于健身追踪、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

作者 ChengzhiHuang
2025年3月23日 22:09

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🌟 🐎 Understanding SwiftUI's Namespace

@Smallfly:这篇文章介绍了 SwiftUI Namespace 的工作原理,从底层实现到实际应用,再到高级用法,内容详实且易于理解。作者不仅解释了 Namespace 如何生成唯一标识符,还通过实际代码示例展示了如何利用它实现平滑的几何动画。相信无论是初学者还是有一定经验的开发者,都能从中获得一些启发。

🐕 Designing a custom lazy list in SwiftUI with better performance

@Barney:这篇文章探讨了 SwiftUI 中 animationwithAnimation 的区别。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

@AidenRaoGlyphixTextFx 主要实现了类似 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

作者 ChengzhiHuang
2025年3月17日 10:12

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

iOS Versions Market Share in 2025

网页展示了使用 iOS 系统(包括 iPadOS)的用户的分布变化,其中有两条结论:

  1. 自 2024 年 9 月推出以来,iOS 18 已成为迄今为止份额最高的版本。截至 2025 年 2 月底,该比例为 79.54%。
  2. 截至 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 是一样的。文章内容大致包含下面几块:

  1. IR 的 静态单一分配 (static single assigment representation)
  2. 开启 mem2reg 讲解生成的 IR 代码
  3. 再对比 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) 理论如何帮助企业理解用户真正的需求,并通过精准定位驱动更强的产品变现能力。主要内容如下:

  1. 了解用户购买动机:痛点驱动 vs. 需求驱动
  2. 如何进行 Jobs to Be Done 访谈,发现变现关键点
  3. 三种核心驱动力:功能、情感和社交
  4. 如何优化定价、转化和留存
  5. 利用 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

作者 ChengzhiHuang
2025年3月10日 10:02

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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)。作者首先讲解了惰性列表的概念,然后展示了如何通过使用 LazyVStackForEach 实现具有动态加载功能的列表并提供了示例代码和优化性能的建议。

🐎 关于推理模型的一些误解和盲区

@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

作者 ChengzhiHuang
2025年3月3日 09:55

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 是一个较小的版本,主要包含错误修复和用户体验提升。其中主要讨论了两个特性:

  1. Task Groups 的变化:Swift 6.1 对 TaskGroup 进行了改进,开发者不再需要显式定义子任务的返回类型。编译器可以根据第一个添加的任务自动推断类型,这样可以简化代码。
  2. 导入成员可见性的新模式: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

作者 ChengzhiHuang
2025年2月24日 10:04

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

iOS & iPadOS 18.4 Beta 1: Here’s everything new

对于中国用户最期待的自然是中文版本的 Apple Intelligence 终于可以使用了,Release Notes 有两条相关提醒:

  1. 对于中文(非英语),使用 Apple Intelligence 需要前置打开 Siri ,并允许通过任意方式唤醒 Siri 。
  2. 还原设备后,可能出现 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。有使用到的同学请特别注意。

Xcode 15
image

Xcode 16
image

内推

重新开始更新「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

作者 ChengzhiHuang
2025年2月16日 21:22

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 ,作者在官方软文报喜不报忧的基础上,给出开发者角度的担忧,例如:

  1. Dart 代码会直接在 Android 和 iOS 的主 UI 线程上运行,而不是单独的 Dart UI 线程,此时 Dart 和平台调用直接可以同步执行。
  2. 没有 Vulkan 驱动的 Android 设备将回退到在 OpenGLES 上运行的 Impeller,而不是使用 Skia。
  3. 移除了 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 生成(当然也可以用 XcodeGenTuist 生成)的项目文件进行开发、运行和调试。换句话说,SweetPad 通过各种命令行工具实现并对齐 Xcode 的各项能力。

SweetPad 目前实现能力有:

  • Xcode 项目文件编辑:通过 Tuist 工具实现。
  • 自动补全(SourceKit-LSP)、单元测试:通过 Swift 插件 + xcode-build-server 工具实现。
  • 调试:通过 CodeLLDB 实现。
  • 运行到模拟器和真机:通过 xcrun simctlxcrun 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 会有较大卡顿并消耗大量内存,此时就可以开启这个选项。

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

作者 ChengzhiHuang
2025年2月10日 08:55

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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:作者记录了他尝试注入一个应用时遇到的全过程,其中使用的技巧与思路清晰明确,值得所有需要逆向相关工作的同学阅读。简单列举一些其中让我感到受益匪浅的知识(并非全部):

  1. 直接调用 ptrace(PT_DENY_ATTACH, 0, 0, 0); 可以阻止后续所有的 debugger(lldb) attch。需要注意 ptrace 在 iOS 上是私有函数,需要通过 dlsym 查找。如果应用使用这种方式加固,则可以通过符号断点并 thread return 跳过当前函数的剩余指令解决。
  2. ptrace 本质是 svc #0x80 等汇编指令的集合,因此可以直接通过汇编指令调用,就能避免应用程序绕过 dlsym 寻找 ptrace 来进行调用(这样也能避免一些审核时的私有 API 扫描)。
  3. 在未知的二进制中搜索带有特殊含义的汇编,例如搜索 mov x16, #0x1amov w16, #0x1a 就比搜索 svc 效率更高。因为 x16/x17 是一般是跳转校验用的特殊寄存器,很少挪作他用。
  4. br s -a 0x102A2BB14 -s XXXBinary 意思是设置断点,在相对 XXXBinary 的 loadAddress + 0x102A2BB14 的位置。这样可以避免每次启动 App 时 iOS 的 ASLR 机制会随机 loadAdfress 位置而需要重复计算实际的断点地址。同样我们日常调试时也可以相对我们自己的二进制或者系统库(UIKit / SwiftFoundation 等)设置断点。
  5. 通过无限循环调用 [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES/NO] 可以制造出 OOM ,进而直接让 iOS 系统崩溃而重启(System OOM)。

🐎 Advantages of Using withAnimation

@含笑饮砒霜:这篇文章比较了 SwiftUI 中在视图声明上使用 .animation(...) 和在操作中使用 withAnimation 的差异。前者仅动画视图自身,当需要让布局或其他视图也平滑过渡时就会出现视图跳动等问题。使用 withAnimation 则能让所有相关布局变化一并参与动画,尤其在 ScrollView 等场景下可确保整体体验平滑无跳跃。

🐢 Hardcore Debugging

@zhangferry:当调试应用发生崩溃,崩溃信息只有系统堆栈没有源码时,会影响我们定位问题。针对这类场景,文中提供了两种解决方案:

  1. 利用 git bisect,在正常 commit 和引入问题 commit 之间,通过二分法定位首次引入问题的 commit,来最大限度缩小排查范围。
  2. 提取崩溃日志,利用 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

作者 ChengzhiHuang
2025年1月20日 10:06

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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 在实际开发中的优缺点:

优点:

  1. 在处理不熟悉的 SDK 时能快速提供解决方案;
  2. 能实现复杂算法(如粉噪音生成);
  3. 擅长跨语言代码转换(如 C++ 到 Swift)且基本不会产生语法错误。

缺点:

  1. 代码质量欠佳,存在大量重复和不必要的抽象,常忽略指令的部分要求;
  2. 对最新的语言特性支持不足,线程安全处理不当;
  3. 手动修改代码后容易与 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 的问题。文中详细介绍了以下内容:

  1. 虚拟内存的原理、作用;
  2. iOS 中虚拟内存:
    1. iOS 虚拟内存的特殊性:No Page Outs;
    2. iOS 虚拟内存空间大小的计算方式;
    3. iOS 不同设备进程可用的虚拟地址空间大小;
    4. 调试 App 出现 OOM 的原因:除了程序自身的 Mach-O、依赖库占用内存,还需为调试环境预留内存;
    5. 通过开启扩展虚拟内存(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

作者 linwenbang
2025年1月13日 11:02

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 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)

老司机 iOS 周报 #319 | 2025-01-06

作者 ChengzhiHuang
2025年1月6日 10:15

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐎 聊聊 Flutter & Dart 里的内存泄漏和优化,也许没你想的那么复杂

@Crazy:本篇文章简单的聊了一下有关 Flutter 的内存泄漏问题,主要从持续引用和全局引用两个方面为大家讲解了一下 Flutter 最容易引起内存泄漏的几个地方。全文很短,作者集中测试了 Timer 与 AnimationController 两个类在引用上的区别,以及如何处理这两个类造成的内存泄漏问题。在 Android 与 iOS 原生应用的开发中,已经有成熟的框架来减少 context 导致的内存泄漏的问题了。同时也期待 Flutter 有一天可以开发出类似的框架,来解决关于 context 引用的问题。

🐕 百度 APP iOS 端磁盘优化实践(上)

@含笑饮砒霜:在 APP 开发中,磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长,高效管理磁盘空间直接关系到用户体验和 APP 性能。本文围绕百度 APP 的磁盘清理问题,从 iOS 沙盒文件存储机制出发,系统性地阐述了磁盘管理的重要性和技术实现。通过自动清理与手动清理的结合策略,以及多维度触发机制和灵活的用户交互设计,平衡了系统性能与用户体验。

🐎 Preventing Accidental API Breaks: A Swift Developer's Guide to API Diffing

@DylanYang:在 SDK 的维护过程中,检测是否有 API 破坏性变更的发生是非常重要的一件事。作者提供了三种方式用于这类检测。一是通过 swift package 自带的工具,但是对 iOS target 使用会有异常,第二种方式是结合 xcodebuild 和 swift-api-digester,第三种则是作者开源的一个工具 Swift Public API Diff,它的优点是输出结果的可读性更好。同时作者也给出了一些维护 API 稳定性的建议。感兴趣的读者可以阅读本文了解更多。

🐢 Compile Metal shader Bitcode to x86 and ARM assembly

@ChengzhiHuang:作者通过逆向的手段研究了从 metal 代码到 air 文件(LLVM Bitcode),最后到 metalib 文件(产物)的过程,期间根据经验进行合理猜测验证,通过寻找原始函数字符串、magic number 、长度偏移量 等还原了文件的结构,并最终提供了将 metalib 文件重新 disassemble 为 air 文件的脚本。

最后作者还尝试直接使用 LLVM 将 air 文件重新 compile 成最终的 ARM/x86 的机器码,尽管这些最终产物并不适合直接提交给 GPU 运行,但是也证明了 LLVM 是可以处理来自 metal 的 Bitcode 的。

内容与过程非常翔实,推荐工作中需要与 Metal 打交道的同学阅读。

前置知识:LLVM 是三段式的设计,而 LLVM 会将 IR 转为 Bitcode ,Bitcode 依旧是可以兼容多平台的中间代码,因此可以最终翻译为各个平台的代码。

🐢 什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

@CrazyCoderShi: 如标题所言,Flutter 的 UI 组件编码方式一直被开发者们所诟病,本文通过对与 SwiftUI 和 ArkUI 以及参考 Flutter 新一年的 roadmap 做出了一些简单类比。在小编看来这不失为是一个代码结构的优化,毕竟末尾的 '括号山' 还是很高的。

代码

🐢 Home Assistant iOS

Home Assistant iOS 客户端,代码全部开源。Home Assistant 是一款开源的智能家居自动化平台,允许用户控制所有连接到同一网络的智能家居设备。项目文档详实,甚至面向零基础用户,了解该项目是入门智能家居的最佳实践。了解各平台能力对比可阅读 Home Assistant Feature overview

内推

重新开始更新「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 周报 #318 | 2024-12-30

作者 ChengzhiHuang
2024年12月30日 10:07

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

周报编辑组又来新人啦~

欢迎 阿权 加入老司机技术,就职于字节剪映团队,喜欢音视频和图像处理,做过许多翻译和 WWDC 内参,热爱摇滚与爵士。喜欢文艺喜欢电影,曾经幻想诗与远方,却囿于昼夜、厨房与爱。

希望 阿权 的加入也能为大家带来更多元化的内容输出!

文章

🐕 Calling Hidden Swift Functions

@AidenRao:这篇博文介绍了在 Swift 中调用隐藏函数的方法。Swift 中有 6 种访问级别,从 open 到 private。但是,用 Swift 编写的 Apple 框架(尤其是 SwiftUI)包含供其他 Apple 框架使用但不供第三方应用程序使用的 API。文章探讨了如何在自己的代码中调用这些函数以使用隐藏功能。

🐕 Be careful wrapping a throwing function in a Task

@Barney:本文讨论了在 Swift 中将抛出函数包装在 Task 中时需要注意的事项。直接在 Task 中调用抛出函数可能导致不如预期的行为,因为 Task 默认会捕获并处理错误。作者举例说明了如何正确使用 Task 来执行抛出函数,并提供了实现的最佳实践,以确保错误被适当地处理。同时,文章还强调了在并发编程中理解错误处理的重要性,帮助开发者避免引入难以调试的问题。适合希望深入了解 Swift 并发特性与错误处理的开发者。

🐎 Enhance Xcode Previews with Unit Test Coverage

@DylanYang:本文介绍了如何利用单元测试加强 Xcode Previews 能力的可靠性。Xcode Previews 是一个非常方便的开发工具,但是它在有些时候也非常脆弱,如果有人在一个 view 上添加了 @EnvironmentObject 标志,所有调用到这个 view 的 preview 场景如果没有注入这个变量就会发生 crash。在代码量较少时还能及时发现,但是在一个庞大的项目中,view 的层级很深的话很难完全覆盖到所有需要修复的 preview 场景。而借助一个三方的 SnapshotPreviews 框架,它能够自动帮助我们在运行时查找所有实现了 PreviewProvider 的 preview 并添加到单元测试中进行执行。这样可以非常轻松的确保我们的 preview 都能成功运行了。

代码

MetalLibraryArchive

MetalLibraryArchive 是一个 Apple 的 metallib 的逆向库,可以解析出 metallib 的 library 类型,目标平台和包含的所有函数。

函数的信息包含了:

  • 函数名
  • 函数类型 - 例如 vertex/fragment/kernel 等等
  • Metal Shading Language 的版本
  • 函数的 bitcode 等效表达式(底层使用 llvm-dis)
  • 函数源码(如果 metallib 包含了源码的话)

另外也提供了一个在线的 demo,对于想要逆向 Metal 的朋友来说是非常有用的工具。

音视频

🐎 为什么 C 口数据线越来越乱?

@极速男孩:苹果在 2023 的 iPhone15 中首次才用了 USB-C 作为数据线,不少用户会发现在有些 Android 的充电线在 iPhone 上无法实现快充或者无法充电。这个视频主要介绍了 USB-C 协议这些年来的混乱的标准和不同公司使用的各种快充协议。

内推

重新开始更新「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 周报 #317 | 2024-12-23

作者 ChengzhiHuang
2024年12月23日 09:56

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

 Developer - 设计开发加速器

展望未来:打造出色的 visionOS App(线下)

参加在上海 Apple 开发者中心举办的为期一天活动,了解如何打造出色的 visionOS App。

你将通过三个讲座学习如何开始使用 SwiftUI,探索一流的 App,并深入了解 RealityKit 和 Reality Composer Pro。随后,你还将听取开发者社区成员的分享,并有机会体验一系列 visionOS App 示例。

文章

🐕 得物 iOS 函数调用栈及符号化调优实践|得物技术

@Smallfly:这篇文章介绍了得物技术团队如何解决 iOS 隐私合规检测的性能难题。文章详细解析了 +[NSThread callStackSymbols] 的内部机制,并通过逆向工程优化了调用栈的获取与符号化过程。实现包括自定义 callStackSymbols 方法、缩短堆栈长度以及智能缓存策略,显著降低了 CPU 占用,提升了检测效率。为 iOS 开发者提供了优秀的性能优化实践案例。

🐕 Exploring Apple Intelligence: Image Generation

@Cooper Chen:Apple 推出了几款创新的图像生成工具,推动个性化创作和数字交流。Image Playground 允许用户通过文本和视觉提示生成图像,并与 PencilKit 集成,带来 Image Wand 功能,让用户将手绘草图转化为精美图像。同时,Genmoji 让用户根据文本描述生成个性化表情符号,增强了数字沟通的表现力。这两款工具不仅注重创意自由,还在包容性和版权合规性上做出了努力。此外,开发者可以将这些功能集成到应用中,扩展数字创作的可能性。而这篇文章为数字创作和个性化互动提供了不错的参考,展示了 Apple 工具如何为用户和开发者带来创意支持。

🐕 Apple' s use of Swift and SwiftUI in iOS 18

@ZengyiMa:这篇文章分析了苹果在 iOS 18 中 Swift 和 SwiftUI 的使用情况。iOS 18 中使用 Swift 和 SwiftUI 的应用数量持续增长,甚至在安全固件的低级别部分开始使用 Swift。此外,新开发的技术,如 Apple Intelligence,也依赖于 Swift。截止目前,iOS 18 现在包含 592 个使用 SwiftUI 的二进制文件,Swift 代码的二进制文件数量相比较 iOS 17 增加了 50%。

🐎 JDImage - 京东自研鸿蒙图片库

@Crazy:JDImage 是京东使用 C++ 打造的一款跨平台的图片加载框架,主要解决系统和其他第三方加载组件的问题,比如加载速度较慢,格式支持不全等。JDImage 在架构上借鉴了 SDWebImage 与 Glide 等图片加载框架,将整体图片库分解为:图片缓存、解码器、图片源拉取、性能监控、图片组件五个部分,使用流水线设计灵活调整执行流程,满足各类的图片加载需求。最后关于 C++ 的跨端代码要根据自己项目的实际情况进行选择,使用之前对错误的捕捉与升降级一定要事先准备好。

工具

🐕 HuggingChat macOS

@EyreFree:HuggingChat macOS 是一款原生 macOS 聊天应用,由知名 AI 开源社区 Hugging Face 开发。该项目将先进的开源语言模型能力集成到桌面端,为用户提供流畅的 AI 对话体验,可以简单理解为 ChatGPT 客户端的本地大模型版。

  • 原生体验:专为 macOS 设计,支持全局快捷键(⌘ + Shift + Return)快速唤起;
  • 语音支持:支持实时同声传译(OpenAI Whisper);
  • 易于安装:提供直接下载和 Homebrew 安装两种方式;
  • IDE 集成:通过 VSCode 扩展支持代码上下文理解,提供更准确的编程建议;
  • 开源透明:基于 Swift 开发,代码完全开源,支持社区贡献;
  • 使用门槛低:仅需 macOS 14.0 以上系统即可运行,安装即用。对于开发者,项目提供完整的开发文档和贡献指南。

作为 Hugging Face 出品的官方客户端,该项目让优质开源 AI 模型触手可及,为想要摆脱商业 AI 服务的用户提供了绝佳选择。项目活跃度高,安装简单,值得一试。

🐢 Skip: Build native apps for iPhone and Android with Skip

@bq:通过 Skip 项目,你可以使用 Swift 同时编写 Android 和 iOS 原生应用。没看错,Swift 也有反客为主的一天了。Skip 项目的基本原理是:当你在编写 Swift 和 SwiftUI 源代码时,Skip Xcode 插件会不断构建用于 Android 的等效代码,因此最终 App 产物都能获取原生的性能和原生的交互体验。

  • 真正原生:与其他跨平台方案相比,Skip 项目是真正的原生代码。当编写 SwiftUI 代码时,将生成 Android 的 Jetpack Compose。

  • 完全透明:使用 Skip 时,不会在调试器中隐藏任何信息。Skip 库是开源的,也没有复杂的运行时需要调试。

  • 轻量:使用 SkipZero,iOS App 不依赖任何 Skip 框架;Android 也仅需几个 Skip 开源库。

  • 内存效率:无额外的托管运行时,Skip App 在两个平台都可能地高效。

  • 熟悉的 IDE:Skip 使用 Xcode IDE 进行编写,是 Swift 的首要开发环境。当需要高度自定义的 Android 能力时,则需在 Android Studio 中编写 Kotiln。

  • 完美整合:Skip 与 Kotlin 和 Compose 无缝衔接,因此也很轻松集成 Android 三方库。

  • 框架开放:Swift-on-Android 只是开始,Skip 的开发框架都是免费开源的。

  • CI 友好:支持跨平台的单元测试,确保逻辑在跨平台中保持一致。也支持在本地或远程执行测试。

  • 容易迁移:代码都是你自己的,包括 Swift 输入和 Android 输出,因此不会持续依赖 Skip 工具。

值得注意的是,虽然框架源码是开源的,但 Xcode 转译器插件针对大型商用还是需要收费的。

代码

SwiftUI-experiments

@DylanYang:作者是一个爱好自己通过代码实现创意的设计师,他通过 SwiftUI 实现了不少有创意的交互设计,并且都提供了原型 Demo。独立开发者们如果希望尝试一些有特色的交互的话可以参考参考。

内推

重新开始更新「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 周报 #316 | 2024-12-16

作者 ChengzhiHuang
2024年12月16日 10:04

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

🐢 Flutter 3.27 发布

@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

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

🐕 Why Can't You Loop Over Ranges of Characters in Swift

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

🐕 WebKit GPU Profiling

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

🐕 Concurrency Step-by-Step: Reading from Storage

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

代码

rmtrash

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

ml-cross-entropy

@Leo:由 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 及往年内参

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

说明

🚧 表示需某工具,🌟 表示编辑推荐

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)

老司机 iOS 周报 #315 | 2024-12-09

作者 ChengzhiHuang
2024年12月9日 10:32

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

CocoaPods Trunk Read-only Plan

Cocoapods 为将 Specs 仓库转为只读状态制定了时间表,预计在 2026 年 12 月 2 日正式不再接受新的提交。

文章

🐕 有意为之还是技术缺陷?SwiftUI 多层导航中的 onChange 异常 | 肘子的 Swift 记事本

@Barney:本文探讨了 SwiftUI 中 onChange 的异常行为,特别是在多层导航的情况下。文章分析了在使用 NavigationViewNavigationLink 时,onChange 修饰符可能会出现的问题,尤其是当视图层级嵌套较多时。作者提供了几个实际示例,演示如何管理状态变化和确保 onChange 正常响应。同时,提供了一些最佳实践,以帮助开发者避免常见陷阱并提升应用性能和用户体验。

🐕 Improving the approachability of data-race safety

@Smallfly:这篇文章提出了 Swift 并发特性面临的易用性挑战,包括过多的显式注释、数据竞争误报和异步代码编写困难。文中提出了解决方案包括减少并发注释、调整异步函数语义以减少误报、提供同步和异步代码之间的桥接工具,以及自动迁移代码等。目的是为了让 Swift 并发更易学易用,同时保持高性能。推荐给对 Swift 并发特性演进感兴趣的同学阅读。

🐎 深入探讨 C++ 多线程性能优化

@老驴:这篇来自腾讯技术工程的文章从实际案例出发,深入探讨了 C++ 多线程编程中的性能优化问题,包括锁竞争、缓存一致性等难点,并通过详细的 benchmark 数据对比锁与原子操作的性能差异。此外,文章还介绍了如 Epoch Based Reclamation 等高级优化方法。无论是提升性能还是理解底层机制,这篇文章都值得一读。

工具

Xcode + ChatGPT: Official Support is Available Now

@EyreFree:这篇文章介绍了 OpenAI 最新宣布的 ChatGPT for macOS 可以直接与 Xcode 集成的功能,除了 Xcode,该功能还支持 VS Code、TextEdit 和 Terminal 等开发工具。使用该功能需要按以下步骤:

  • 目前该功能仅向 ChatGPT Plus 和 Team 用户开放请先确保条件符合,Enterprise 和 Edu 用户将在近期获得访问权限
  • 确保 ChatGPT for macOS 应用已更新到最新版本
  • 在 ChatGPT 设置中启用 Enable Work with Apps 选项以获取辅助功能权限
  • 使用快捷键 Option + Space 打开 ChatGPT 聊天栏
  • 点击 Work With Apps 按钮并选择 Xcode

通过这种集成,ChatGPT 可以直接查看和理解开发者的代码库(Codebase),从而提供更准确的回答和建议。作者以开发 SwiftUI 动画的卡片翻转游戏为例,展示了这个新功能的应用。AI 辅助编程近来发展迅速,这次与 Xcode 的原生集成让开发体验更加流畅,标志着 AI 编程助手进入新阶段。

Easydict: 一个简洁优雅的词典翻译 macOS App

@Cooper Chen:Easydict 是一个开源的词典翻译 macOS App,能够轻松优雅地查找单词或翻译文本。Easydict 开箱即用,能自动识别输入文本语言,支持输入翻译,划词翻译和 OCR 截图翻译,可同时查询多个翻译服务结果,目前支持市面上绝多数主流的翻译 App,使用者可以通过 Homrebrew 快速安装使用,Easydict 支持鼠标滑词、OCR 识别等功能,是 Mac 平台上非常高效的翻译软件,值得推荐。

代码

swift-sharing

@bq:如其名,sharing,你能想到的状态共享,跨模块间的状态共享、持久化、观察监听,它都做了,无论是实现业务逻辑、Combine、SwiftUI、UIKit 都能无痛接入。关键人家实现还非常优雅,宏、属性包装器、清晰的职责实现,都是很优秀的实践,单单接入就能让你的代码耳目一新了。还是那句话,Point-Free 出品,必属精品。

内推

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

[北京] 比图科技 - 高级 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 周报 #314 | 2024-12-02

作者 ChengzhiHuang
2024年12月2日 09:57

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

文章

🐎 AutoConsis:UI 内容一致性智能检测

@Damien:这篇文章介绍了美团技术团队与复旦大学计算机学院合作开发的 AutoConsis 系统,这是一个自动化智能检测流程,用于检测移动 App 中 UI 界面内容的一致性。该系统通过目标区域识别、目标信息提取和一致性校验三个关键步骤,实现了低成本、高泛化性和高置信度的 UI 内容一致性检测。AutoConsis 在美团 App 的多类营销业务场景中得到应用,有效提升了 UI 质量保障,并在 ICSE 2024 会议上发表了相关论文。

🐎 Lazy vars in @Observable classes in Swift

@zoeGuo:从 ObservableObject 协议迁移到 @observable 宏时,如果之前使用 lazy 修饰了该类型的变量,那么迁移后将会遇到报错的情况。文中解释了这种情况并提出可以使用 @ObservationIgnored 来解决。

🐎 Exploring Apple Intelligence: Writing Tools

@EyreFree:本文介绍了 Apple Intelligence 新推出的 Writing Tools 写作工具功能。该功能集成于 Apple 生态系统中,可在 iOS 和 macOS 设备上使用,主要提供以下功能:

  • 智能校对:自动识别并修正语法和拼写错误
  • 文本重写:支持改写文本,可选择友好、专业或简洁的语气
  • 文本转换:将文本转换为要点、列表或表格(测试版暂未提供)
  • 文本摘要:生成长文本的简明摘要(测试版暂未提供)
  • AI 集成:支持 AI 辅助写作(测试版暂未提供)

对开发者而言,Writing Tools 已自动集成到 SwiftUI 的 Text、TextField 和 TextEditor 等原生组件中。开发者可以通过 writingToolsBehavior 修饰符来自定义写作工具的行为,还可以在 UIKit 中实现更灵活的控制。这套工具已无缝集成到 Mail、Messages、Notes 和 Safari 等 Apple 生态系统应用中,显著提升了在这些应用中的写作体验。

🐕 货拉拉 iOS 疑难 Crash 治理-系统键盘语音

@xiaofei86:本文主要介绍了货拉拉解决系统键盘语音转文字崩溃的整个排查过程。通过崩溃类型、崩溃堆栈和偏移指令等信息,结合汇编指令调试,最终确定崩溃根本原因,并进行有效治理。感兴趣的同学可以阅读原文学习更多疑难崩溃的分析思路。

🐢 Google Deepmind LLM 研究员解读 OpenAI o1 及 LLM+ 强化学习新范式 | 3 小时播客全文精华

@含笑饮砒霜:这篇文章是对一个长达 162 分钟播客内容的深入解读,该播客深入探讨了 OpenAI 的 o1 模型及其与 LLM(大型语言模型)和强化学习(RL)结合的新范式。以下是播客内容的主要总结:

    1. Agent 系统
    • 基础:推理能力是构建 agent 的基础,需解决 AI 间协作、竞争及任务分工。
    • 工具使用:关键在于提升模型对工具功能的理解和调用能力。
    • 构建要素:强大基础模型、高质量工具、优质 prompt 及学习使用工具的数据集。
    • 数据收集:理想方式是将数据标注嵌入用户日常工作流程。
    1. 思维链(CoT)与强化学习(RL)
    • 思维链:详细步骤提升模型表现,分显式(明确 token)和隐式(直觉思考)流派。
    • 强化学习:通过 agent 与 environment 交互和 reward 指引学习。
    • 模型反思:允许模型反思修正错误,显著提升 reasoning 任务表现。
    1. AI 反馈系统与 Human in the Loop
    • AI 优势:快速处理文本并总结,处理复杂评估任务有优势。
    • Human in the Loop:AI 简化复杂问题,人类做最终判断,提升可扩展性。
    1. Multi-Agent 与角色分类
    • Multi-Agent:更像 multi-task,需角色分离,如 generator 和 critic。
    • 角色分离:通过不同 persona 实现,提升 multi-agent 系统效率。
    1. Single-Agent 与 Multi-Agent
    • Single-Agent:在达到超人类水平前,Multi-Agent 表现更优。
    • 过渡阶段:Multi-Agent 可能是过渡产物,未来趋向单一全能模型。
    1. 数据与方法
    • 数据获取:高质量数据是训练关键,特别是在 reasoning 领域。
    • 合成数据:MCTS 等方法生成高质量合成数据。
    1. 未来展望
    • 一年内:期待 coding 技能商品化,多模态 reasoning 突破。
    • 三年内:希望看到接近 AGI 水平的模型,解决所有问题。
  • 嘉宾与主持人介绍

    • Kimi Kong:Google DeepMind 研究工程师,专注于强化学习。
    • Eric Li:Google Cloud 研究科学家,专注于 LLM 和 MCTS 结合的研究。
    • 苏辉:前微信 AI 研究员,现负责国内一线互联网公司的大模型训练。
    • Cage:原字节数据科学家,现拾象科技研究员。
    • Monica:美元 VC 投资人,前 AWS 硅谷团队和 AI 创业公司员工。

🐎 Syntax Highlighting SwiftUI Code with Swift Syntax

@Kyle-Ye: 作者总结了一些在使用 swift-syntax 时的经验和技巧 , 并最终在 DetailsPro 应用中实现了对 SwiftUI 代码实时更新的语法高亮显示功能。

代码

SwiftUIFX

@bq:SwiftUIFX 是一个 Final Cut Pro 插件,用于直接将 SwiftUI 视图渲染到视频中。该插件提供了一个容器,打通了从 SwiftUI 到 Final Cut Pro 上屏渲染的链路。项目创造性地解决了几个问题:

  1. 如何实现一个 Final Cut Pro 插件。
  2. 如何将 UI 绘制成支持输出到 Final Cut Pro 的数据帧(实现比我们想象的要简单😜)。
  3. 如何在外部使用 dylib 将我们编写的 SwiftUI 视图跑起来。

思路很有趣,逻辑较简单,是个很好的入门制作 Final Cut Pro 插件的契机。了解更多插件制作可浏览 Apple 官方文档

NSDockTilePlugIn

@Cooper ChenNSDockTilePlugIn 是一个用于在 Mac 开发中用于应用未运行时自定义 Dock 图标的插件。通过实现这个插件,开发者可以在应用程序未启动的情况下修改其 Dock 图标,并提供自定义的 Dock 菜单。插件的名称通过应用的 Info.plist 文件进行指定,并在登录时或图标被添加到 Dock 时加载。插件可以通过实现 setDockTile(_:) 来定制图标,并通过 dockMenu() 提供自定义菜单选项。当图标不再有效时(例如应用被移除出 Dock),插件会接收到 nil 参数进行销毁操作,这个插件对于部分 Mac 开发用不错的借鉴价值。

内推

重新开始更新「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 周报 #313 | 2024-11-25

作者 ChengzhiHuang
2024年11月25日 10:09

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

Can't install any apps on my new iPhone 16 Pro with iOS 18 from Xcode

苹果的开发工程师对于从 Xcode 16 Beta/rc 升级到 Xcode 16 正式版用户会遇到无法安装 app 到 iPhone 16 系列手机的问题给出了解决方案:手动通过指令安装 XcodeSystemResources 。该问题在 Xcode 16.1 Beta 2 中修复。

sudo installer -pkg /Applications/Xcode.app/Contents/Resources/Packages/XcodeSystemResources.pkg -target /

文章

🐎 编译器,靠你了!使用类型改善状态设计

@Kyle-Ye: 作者通过一个实际工作中碰到的端到端消息发送的例子,讲述了如何利用 Swift 的类型系统 , 将状态逻辑编码到类型中 , 由编译器来保证程序执行正确性,从而减少使用和维护的心智负担。

🐕 MainActor usage in Swift explained to dispatch to the main thread

@AidenRao:在构建应用程序时,在主线程上执行 UI 更新任务是至关重要的,而使用多个后台线程时可能会遇到点麻烦。使用 @mainactor 属性将有助于确保您的 UI 总是在主线程上更新。文章详细解释了什么是 MainActor,全局 actor 的概念,以及如何在 Swift 中使用 MainActor。

🐎 Flutter vs. Kotlin Multiplatform: Which Should You Choose for Cross-Platform Development?

@Crazy:从 React Native 开始,移动端的开发就发起了跨平台的改革,如今 Flutter,KMP,C++,都进入了跨平台的研发序列。本文主要对 Flutter 与 Kotlin 两个现今比较火的跨平台框架进行了对比。

Flutter 平台的优点主要为:

  1. 统一代码库
  2. 富有表现力和灵活的用户界面
  3. 快速的开发周期
  4. 强大的社区支持

KMP 平台的优点:

  1. 原生一般的性能
  2. 高互用性
  3. 高代码共享能力
  4. Google 的支持

总结一下:Flutter 主要用于项目启动、 MVP 功能、项目原型、有 UI 统一化的需求开发。KMP 主要用于大项目和已有代码库、需要高性能、需要多平台逻辑分享的功能开发。

🐢 Flutter 小技巧之 OverlayPortal 实现自限性和可共享的页面图层

@CrazyCoderShi: 本文从原理层讲解了 Overlay 和 OverlayPortal 之间的差异,并且对如何使用 OverlayPortal 做了更深一步的阐述,对于 Flutter 开发的小伙伴来说是一个不错的科普文!

🐕 Integrating Live Activity and Dynamic Island in iOS: A Complete Guide

@Barney:本文介绍了关于在 iOS 中集成 Live Activities 和 Dynamic Island 的完整指南。它涵盖了如何创建和管理 Live Activities,以便在锁屏和应用程序上显示实时信息。此外,指南还介绍了如何利用 Dynamic Island 来增强用户体验,让用户能够方便地访问和交互实时通知和活动。可供开发者参考,实现更具动态交互的应用程序。

🐎 Swift Format in Xcode

@DylanYang:本文介绍了在 Xcode 16 中首次集成的 swift-format 工具,swift-format 是和 swint-lint 类似的用于规范代码格式的工具。作者写了一段有问题的示例代码,并同时使用 swift-lint、Prettier 和 swift-format 进行代码自动矫正。从表现上来看 swift-format 并不如 swint-lint 一般全能,但是使用十分方便,也支持规则的自定义配置,在配置妥当后已经适用于大部分场景。同时作者也提到目前并没有官方的 Swift code style guidelines, swift-format 目前仅仅只指向了一个方向,具体的规则后面还有改动的可能。

内推

重新开始更新「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 周报 #312 | 2024-11-18

作者 ChengzhiHuang
2024年11月18日 10:09

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

🐎 We're forking Flutter. This is why.

@极速男孩: Flutter 社区在 Flutter 基金会的支持下,启动了名为 "Flock" 的 Flutter 新分支。此举是由于 Google 在处理桌面应用支持等方面的政策使一部分开发者感到不满,认为其发展速度和开放性不足。"Flock" 分支希望通过更加民主和包容的社区驱动模式,更好地响应开发者的需求。

A memory leak in Apple's Network Extension framework

macOS 15.0 Sequoia 被发现会存在大量的内存泄漏(14.0 也存在,但是量级很小),你可以通过 sudo leaks at.obdev.littlesnitch.networkextension | grep "total leaked bytes" 来查询自己是否受到影响。如果确实有大量内存泄漏,可以通过杀死 at.obdev.littlesnitch.networkextension 进程来强制释放。

 Developer - 设计开发加速器

案例研究:设计出色的 visionOS App

与我们一起探索出色的 visionOS App,了解设计师是如何针对无边画布进行创作的。在为期半天的讲座中,你将了解如何采用沉浸式功能、为眼睛和手设计交互体验,并充分利用深度、比例和空间。

另外还有 Apple Vision Pro 开发者实验室 的线下实验室,感兴趣的同学们可以积极报名。

文章

🐎 Xcode stops fetching Swift packages

@Smallfly:在 Xcode 16.1 中,Swift 包依赖突然无法获取,并出现 “ Fatal: cannot use bare repository ” 错误。经过排查,作者发现问题与 SourceTree 添加的全局 Git 配置 safe.bareRepository = explicit 有关。删除或注释掉该配置后,Xcode 恢复正常。

此配置的作用是提高安全性,建议不删除全局配置,而是通过命令手动标记相关仓库为安全:

git config --global --add safe.directory /path/to/repo

更详细的讨论可见 SPM 的 issue 8068,以及对应的 PR

🐕 逆流而上的设计 - Swift 所有权和 ~Copyable

@zoeGuo:Swift 5.9 中引入了不可复制类型的标记 ~Copyable(non-copyable),在今年的 Swift 6 中,之前类型扩展(extension)和泛型(generic)不支持 ~Copyable 的不足也得到了解决,~Copyable 的可用性得到了提升。文章用 ~Copyable 的工作方式、所有权转移关键字、在泛型或扩展中使用 ~Copyable,三个部分详细讲解了 ~Copyable 的概念、工作原理以及具体如何使用。作者在对 ~Copyable 的概念阐述中提到:“以往的协议是‘为类型增加功能’,而 ~Copyable 则是‘为类型解除限制’”,相信能帮助你更快理解 ~Copyable 协议。在文末:“只在确实需要独占资源或严格控制生命周期时才使用 ~Copyable,可能会是更加平滑和正确的方式”,也很好的总结了 ~Copyable 的使用场景。文中有大量代码例举以及内存管理的详细示意,强烈推荐阅读原文。

🐕 THREADS IOS PERFORMANCE

@DylanYang:本文是 Threads 开发讲述了 Threads 是如何优化 App 性能的。Threads 主要关注的性能指标包含了图片加载速度、网络内容的返回速度、发布成功率、页面加载耗时、发布可靠性等。本文对页面加载耗时和发布可靠性方面做了更深入的讲解,包括通过劣化实验推断页面加载耗时对业务数据的影响、提供 debug 工具帮助业务研发判断自己业务的性能水平以及发文草稿的磁盘占用对用户的体验影响等。本文对 Threads 各方面的性能监控、优化等都有涉及,想要优化自己 App 的读者可以细致阅读一下。

工具

screenshot-to-code

@EyreFree:screenshot-to-code 是一个开源 AI 代码生成工具,能将设计稿截图、Figma 设计稿或网页模型快速转换为干净、可用的代码。该工具支持多种技术栈,包括 HTML+Tailwind、React+Tailwind、Vue+Tailwind、Bootstrap 等。它支持 Claude Sonnet 3.5 和 GPT-4o 等模型。且近期加入了实验性功能,可以将网页交互的视频 / 屏幕录制转换为功能性原型。用户可以通过 Docker 快速部署。对于需要快速将设计转换为代码的开发者来说,这是一个非常实用的工具,感兴趣可以尝试。

音视频

🐕 SwiftConnection Videos, Material and Transcript

@Barney:该网站提供了关于 Swift 编程语言的会议资源,包括视频、材料和演讲稿。会议内容覆盖 Swift 性能优化、AI 集成、嵌入式 Swift 应用、可访问性构建等多个技术领域。这个平台为 Swift 开发者提供了丰富的学习材料和交流机会。

内推

重新开始更新「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)

❌
❌