# 老司机 iOS 周报 #334 | 2025-05-12

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

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

## 文章

### 🐕 [Adding dependencies to binary Swift packages](https://danielsaidi.com/blog/2025/05/02/adding-dependencies-to-binary-swift-packages)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：这篇文章介绍了作者如何为 Swift 的二进制包（binary Swift packages）添加依赖的问题和解决方案。普通 Swift 包可以直接声明依赖，但二进制包无法这样做，这给闭源 SDK 的开发带来了挑战。过去作者采用复制依赖库源代码到二进制包中的方式来解决，但这种方式混乱、低效、并增加了编译时间。后来作者发现可以通过在 Swift 包中同时声明多个二进制目标（binary target），并将它们一起加入到产品中，从而实现依赖的间接引入，这样包管理器就会自动下载和链接所需的依赖库。作者用这种方法解决了 VietnameseInput 这类闭源 SDK 的依赖管理问题，大大简化了项目结构并提升了构建效率，同时也指出这种方案尚未在更多场景下验证，需要更多开发者一起探索和交流。

### 🐎 [支付宝客户端 Kotlin/Native 包体积优化实践](https://mp.weixin.qq.com/s/vcuo2YJsrn3kQcTNuoLuGQ)

[@Kyle-Ye](https://github.com/Kyle-Ye)：支付宝在使用 Kotlin/Native 进行跨端开发时 , 针对应用安装包体积过大的问题 , 采取了一系列优化措施。通过增加 LLVM 优化参数和 DCE 优化，支付宝团队成功将 iOS 和鸿蒙平台上的 Kotlin/Native 应用包体积分别减少了 50% 和 15% 以上。对于正在使用或计划使用 Kotlin/Native 的开发者来说，这篇文章或是一份很好的优化实践参考。

### 🐢 [使用 AVPlayer 播放 FairPlay DRM 视频的最佳实践](https://mp.weixin.qq.com/s/vnK8GZP9ucvML6GQ7EJkeQ)

[@阿权](https://github.com/bqlin)：DRM，数字版权管理，可以简单理解为加密媒体 / 音视频。文章围绕使用 AVPlayer 播放 FairPlay DRM 视频展开，详细介绍了相关技术要点和操作方法，具体内容如下：

1. DRM 介绍：DRM 原理、方案；FairPlay 播放 DRM 视频原理。
2. FairPlay 密钥的两种管理方式：AVAssetResourceLoader、AVContentKeySession，及其应用场景。
3. 使用 AVAssetDownloadTask 下载 DRM 资产：使用流程、下载后本地文件组成。

对于 DRM 视频，其场景不仅可用于点播视频，直播视频场景也可以使用。只要是 Apple 支持的格式，使用系统的 AVPlayer 播放 DRM 足矣，系统提供一定自由度来让用户定义自己的加解密业务流程，剩下的音视频编解码就交由 AVPlayer 自身管理了。这样实现一个满足自身业务的 DRM 播放器门槛自然就低了很多，也不一定都要白手起家捣鼓起 FFmpeg 来。

### 🐕 [Gatekeeper change in macOS 15.4](https://lapcatsoftware.com/articles/2025/4/8.html)

[@Cooper Chen](https://github.com/cjlcooper)：苹果在 macOS 15.4 中调整了安全策略：用户下载文件后，拖拽至部分应用（如 TextEdit）时会反复弹出安全警告，而 Preview 等应用却不受影响。
问题核心：
- 触发条件取决于应用声明的文件类型。若包含"高危类型"（如 Unix 可执行文件），任何下载文件都会触发警告
- 文件扩展名直接影响判定结果，暴露逻辑漏洞

解决方案：
- 普通用户：终端执行 xattr -d com.apple.quarantine 文件名
- 开发者：需检查应用配置，避免声明高危文件类型

这一调整究竟是安全升级还是过度防护？目前苹果尚未回应，用户可暂用上述方法应对。

### 🐎 [How a Single Line Of Code Could Brick Your iPhone](https://rambo.codes/posts/2025-04-24-how-a-single-line-of-code-could-brick-your-iphone)

[@david-clang](https://github.com/david-clang)：本文介绍了 [Darwin Notify](https://developer.apple.com/documentation/darwinnotify) 的系统漏洞，仅一行代码 `notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted")` 即可让设备进入“恢复中”界面且无法退出，只能重启设备，再利用 iOS 自动唤醒小组件的机制，使设备在每次重启后重复触发漏洞，最终实现一行代码把 iPhone 变砖。不限制该敏感通知发送权限的漏洞疑似 [iOS 18.2 beta 2](https://github.com/blacktop/ipsw-diffs/blob/fee5b3c8c18e4639e74677dd3cc1fa80203e64f6/18_2_22C5109p__vs_18_2_22C5125e/Entitlements.md?plain=1#L2336) 引入的，在作者报告漏洞后，[iOS 18.3](https://support.apple.com/zh-cn/122066) 已修复。

## 工具

### [DeepWiki](https://deepwiki.com/)

[@EyreFree](https://github.com/EyreFree)：DeepWiki 是一个将 GitHub 仓库转化为交互式 wiki 的工具网站，它能够根据项目代码、文档等内容为 GitHub 上的 Public 项目生成详细文档、绘制交互式图表、提供对话式 AI 助手等。用法是把 GitHub 项目 URL 中的 `github` 换成 `deepwiki`，例如 kingfisher 的对应访问地址就是 [deepwiki.com/onevcat/Kingfisher](https://deepwiki.com/onevcat/Kingfisher)，或直接在 DeepWiki 官网搜索仓库名称，主流项目基本上已经做了预处理，搜不到的话在主页点击 `Add repo` 等待处理即可。

## 代码

### [swift-subprocess](https://github.com/swiftlang/swift-subprocess)

[@kemchenj](https://kemchenj.github.io/)：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 及往年内参**

![](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）
