# 老司机 iOS 周报 #282 | 2024-03-25

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/282.jpg?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## 新手推荐

[Cocoapods 之版本号问题](https://mp.weixin.qq.com/s/ghSD_wbfRuYse64m9TmBKw)

[@zoeGuo](https://github.com/zoeGuo)：文章是一篇关于 Cocoapods 版本号使用的一个建议：要注意使用标准化的版本号，不要在主干分支使用 prerelease 版本号。原因是 Podfile 中强指定一个库的版本号，如果是一个 prerelease 版本号，最终依赖的不一定是这个版本，这其中的不确定性便来于 Cocoapods 底层对 prerelease 版本的处理策略。文中解释了 Cocoapods 如何判断 Source 里面的版本是否满足依赖要求的，可以配合[语义化版本号规范](https://semver.org/)一起阅读。

## 文章

### 🌟🐕 [Apple 也在用的 Benchmark 框架](https://www.swift.org/blog/benchmarks/)

[@kemchenj](https://kemchenj.github.io/)：这篇文章介绍了一个专为 Swift 编写的 Benchmark 包，除了支持追踪常用的 CPU 时间和内存占用情况，还支持了 ARC 相关的数据，swift-foundation 之类的 Apple 官方开源项目也都在使用。

另外 [Benchmark 的文档](https://swiftpackageindex.com/ordo-one/package-benchmark/1.22.4/documentation/benchmark/gettingstarted)也写得非常好，手把手教你生成 baseline，生成可视化图表，甚至连 GitHub CI 的 workflow 都教你怎么写，直接评论到 PR 上看对比结果。

### 🐢 [A Gentle Introduction to LLVM IR](https://mcyoung.xyz/2023/08/01/llvm-ir/)

[@Kyle-Ye](https://github.com/Kyle-Ye): 本文由浅入深地介绍了 LLVM IR 的一些基本常识和概念，并给出了相关例子。

- % 和 @ 的在 LLVM IR 中的含义
- LLVM IR 的类型表示
- CFG 和不可达优化等

了解 LLVM IR 的主要用途是，在进行性能优化时，介于源代码和汇编代码之间的 LLVM IR 可能会是更方便的选择。

### 🐎 [Swift Tooling: Windows Edition](https://speakinginswift.substack.com/p/swift-tooling-windows-edition)

[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了 Arc 公司所推动 Swift on Windows 的最新进展和一些他们的开发体验分享

- 🔨 开发环境 : VSCode 是 Swift on Windows 上的首选开发环境。
- ✍️ 代码编辑 : VSCode IDE 目前已提供了代码补全、导航和错误显示功能等功能。
- 🧪 构建和测试 : 支持通过 Swift Package Manager 和 CMake 进行构建和测试。
- 🐛 调试能力 : LLDB 调试和命令行调试目前都已支持。

### 🐢 [Nerdy internals of an Apple text editor ](https://papereditor.app/internals) & [ 9 years of Apple text editor solo dev](https://papereditor.app/dev)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：作者作为一位全栈 Web 开发者，出于对 Mac 上独特应用程序生态系统的热爱，踏上了制作 Mac 原生文本编辑器的旅程。经过两年的努力，成功推出了名为 Paper 的 Mac 应用程序，随后又将其扩展到了 iOS 平台。作者尤其注重用户体验和应用程序的稳定性，因此选择了开发本土应用，充分利用了 Xcode、AppKit 和 Objective-C 等技术的优势。

正是作者的坚持和追求，使得 Paper 文本编辑器得以诞生并逐渐完善。而当我们深入了解 Paper 背后的工程细节时，不禁为作者的专业素养和技术实力所折服。Paper 的核心组件 TextView，通过 NSTextStorage、NSTextContainer 和 NSLayoutManager 等旗舰类的协同工作，实现了流畅而高效的文本编辑体验。这些技术细节不仅展示了作者的精湛技艺，更是他对用户体验极致追求的体现。

### 🐕 [lsregister: How Files Are Handled in Mac OS X](https://krypted.com/mac-security/lsregister-associating-file-types-in-mac-os-x/)

[@Barney](https://github.com/BarneyZhaoooo)：这篇文章主要讲述了如何使用 lsregister 命令管理 Mac OS X 中的 Launch Services 数据库，这个数据库决定了文件的默认打开方式。文章详细介绍了如何查询、导出、强制重新注册文件类型、取消应用程序的注册等操作，以及如何关闭文件类型默认被隔离的功能。同时，文章也指出了清理和重建大规模数据库的方法，以及如何指定某应用打开特定文件类型或网络协议。

### 🐕 [Sending trial notifications with provisional authorization on iOSX](https://nilcoalescing.com/blog/TrialNotificationsWithProvisionalAuthorizationOnIOS/)

[@享耳先森](https://github.com/iblacksun)：Push 是很好的吸引用户注意的方式，但难点是如何获取用户的授权，本文介绍了 `provisional notifications` 这一通知机制。

## 内推

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

[杭州] 淘宝 - Meta 技术团队 - iOS 工程师 / Vision Pro 工程师 （校招）

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2023」，领取 2023 及往年内参**

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

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

## 说明

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

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
