Skip to content

老司机 iOS 周报 #321 | 2025-01-20

Latest
Compare
Choose a tag to compare
@ChengzhiHuang ChengzhiHuang released this 20 Jan 02:06
· 1 commit to master since this release

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)