# 老司机 iOS 周报 #172 | 2021-08-23

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

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

## 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21)

[@Parsifal](https://github.com/ParsifalC)：本周内参更新，4 篇高质量内容已经发布，总更新文章已达 92 篇，实际包含 session 内容超过 100 个~

### [【WWDC21 10012 】App Clip 新特性](https://xiaozhuanlan.com/topic/2048796351)

@昊泽：App Clip 是 WWCD20 的一大亮点，它提供了一种“即时使用”的方式，基于苹果提供的各种唤醒方式，让用户在特定场景下很方便地体验 App 内的核心功能。现在一年过去了，世界各地的开发者开发出了各种优秀的 App Clip。同时 Apple 提供了一种全新的 App Clip Card 的展示方式，也一并完善和优化了本地体验，并提供了命令行工具来帮助开发者们生成轻应用码。 让我们一起来看看吧。

### [【WWDC21 10076】使用 Object Capture 创建 3D 模型](https://xiaozhuanlan.com/topic/8026419753)

@Hays：Apple 自 2017 年推出 ARKit 以来一直在推动增强现实技术在其各个平台上的应用和发展，但 AR 内容的匮乏与高成本一直是制约开发者们投入 AR 的重要因素。在本次 WWDC 上，Apple 将 3D 模型的构建效率提升了到了前所未有的高度，RealityKit 2 框架中的新 Object Capture API 为我们提供了一种非常便捷的方式来为生活中的物体创建 3D 模型，而你需要的仅仅是为目标物拍摄几张照片。此外，配合 AR Quick Look 可以轻松将创建好的模型集成到你的应用之中。

### [【WWDC21 10109】探索 Foundation 新增功能](https://xiaozhuanlan.com/topic/7093142658)

@leejunhui：`Foundation` 作为最核心的系统库之一，今年带来了三大部分的新内容，分别是属性字符串，格式化器以及自动语法协议。这些内容的核心要点都表明 `Apple` 想要摒弃掉 `Objective-C` 时代留下的繁琐的 `API` 以及编程范式。

### [【WWDC21 10153】基于苹果芯片的图像处理](https://xiaozhuanlan.com/topic/5796308412)

@潘名扬：这篇 WWDC 的分享主要介绍了如何针对苹果芯片对图像处理应用进行优化，探索了如何充分发挥 Metal 渲染命令编码器、切片渲染、统一内存架构，以及 memoryless attachments 的优势。在文中的示例里，工程师为我们展示了如何针对苹果 GPU 的 TBDR 架构来降低应用的内存占用，减少能耗。通过本篇分享，你还可以了解到将应用中的图形运算从独立显卡迁移到苹果芯片的最佳实践。

## 新闻

### 🐎 ["同播共享"发布计划的更新](https://developer.apple.com/cn/news/?id=mxaeu6er)

[@zvving](https://github.com/zvving)：在最新的 iOS15 developer beta 6 中 SharePlay 被禁用。这意味着 iOS15 正式版发布临近，最初版本不会包含 SharePlay， SharePlay 会在后续更新版本中提供。

在开发 SharePlay、GroupActivities 相关功能的朋友可以从原文下载配置文件确保开发不被中断，同时需要留意近期 App 提交不要包含 GroupActivities 授权配置，等待对应功能放开后再进行提交。

## 文章

### 🌟 🐎 [Making efficient use of the libdispatch (GCD) · GitHub](https://gist.github.com/tclementdev/6af616354912b0347cdf6db159c37057)

[@Barney](https://github.com/BarneyZhaoooo)：本文针对 **libdispatch** 总结了很多使用技巧，列举了一些常见的误区。类似各种高效 tips 整合文章，方便大家找到自己不了解的地方深入学习。

### 🐕 [微信跨平台硬件直播组件](https://mp.weixin.qq.com/s/qK73om3ueP_S6i8qp8hgHQ)

[@anotheren](https://github.com/anotheren)：微信视频号已提供跨平台硬件直播组件，支持移动平台(iOS/Android)、PC 平台(Windows/macOS)和嵌入式平台(以 Raspberrypi 为例)。文章简要介绍了其解决的问题以及实现的方案。相比传统的移动平台，广大云厂商早已推出了各自的成套解决方案，微信视频号这次应该是奔着相关直播硬件而来，只是不知会擦出怎样的火花。有嵌入式硬件需求，或者在设计直播组件的同学都可以仔细看看。

### 🐕 [Creating Custom Parseable Format Styles in iOS 15](https://emptytheory.com/2021/08/14/creating-custom-parseable-format-styles-in-ios-15/)

[@AidenRao](https://weibo.com/AidenRao)：在 iOS 15 之前，为了将数字或日期转换为字符串，你通常需要多行代码，维护一个 Formatter 派生类，编码过程较复杂且不易维护。iOS 15 及更新的版本，不需要任何 Formatter，我们可以在大部分场景，一行代码搞定格式化。

如果需要更灵活的格式化方式，可以自定义新的格式样式，本文实现了一个将简单的电话号码，格式化成标准美国格式电话号码的示例，413555212 → (413) - 555-1212，作为实现参考。

## 摸鱼周报

[@摸鱼周报 #23](https://mp.weixin.qq.com/s/1Vs50Lbo0Z27dnU-ARQ96A)：第二十三期摸鱼周报来啦，一起来看下本期概要：

- 话题：本期邀请 CoderStar 聊一下他的公众号和学习方法。
- Tips：简版 PromiseKit 的设计思路；如何通过 embedded.mobileprovision 区分包类型。
- 面试模块：isMemberOfClass、 isKindOfClass 的含义与区别。
- 优秀博客：整理了Swift 指针、Swift 属性包裹器相关的几篇文章。
- 学习资料：介绍三个机器学习的网站。
- 开发工具：帮助解析 Shell 脚本的网站：explainshell。

## 工具

### [onefetch](https://github.com/o2sh/onefetch)

[@EyreFree](https://github.com/EyreFree)：Onefetch 是一款由 Rust 编写的命令行 Git 信息展示工具，它能够在终端中展示本地 Git 仓库的项目详情和代码统计等内容。使用时不需要网络连接，完全离线可用。它会自动从文本中检测开源许可证，并为用户提供有价值的信息，例如代码分发、pending、依赖数量、主要贡献者、占用磁盘大小、创建日期、代码行数等。Onefetch 可以通过命令行参数进行配置，以准确显示您想要的内容和方式：您可以自定义 ASCII/文本格式、禁用信息行、忽略文件和目录、以多种格式输出（Json、Yaml）等等。有需要的朋友们快试试吧。

### [网页 ipa 一键砸壳](https://www.dumpapp.com)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：iOS 中所有 APP 上传到 APP Store 后都会被加上一层保护壳，如果我们想拿到 IPA 进行研究分析， 需要对 IPA 进行脱壳。这个平台可以实现导出全网 IPA 进行自动脱壳功能，不过有些功能需要付费才能体验。


## 代码

### [AnyCodable](https://github.com/Flight-School/AnyCodable)

[@Smallfly](https://github.com/iostalks)：[AnyCodable](https://github.com/Flight-School/AnyCodable) 对遵循 `Encodable`, `Decodable` 和 `Codable` 协议的 Model 进行包装，抹掉其具体的类型。当需要在不同模块之间传递数据时，可以使用它实现模块对 Model 的解耦。


### [Epoxy - Airbnb 声明式 iOS UI 框架开源啦！](https://mp.weixin.qq.com/s/DQ8avDt3pgMxQcb7p3WkwA)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：[仓库地址](https://github.com/airbnb/epoxy-ios) ，一套完整的 Swift 实现的声明式 UI 框架。Airbnb 团队遇到的问题是：更新页面时，会需要手动操作 indexPath 来进行动画刷新，而操作 indexPath 稍有差错就会导致 crash，同时繁复的计算逻辑可读性也较差。可以回忆下即使使用 IGListKit 这样强大框架的 ListDiffPaths 计算 diff 并刷新列表，也依旧较为复杂，更不用说还需要手动控制动画了。

因此 Airbnb 团队选择了声明式编程，**描述目标 - 让页面更新至最新内容**。

- 一套描述页面渲染内容的语义接口：使用「内容」和「样式」两种类型来描述一个 view，并分别封装在 Content 和 Style 里
- 搭建能自动更新页面渲染内容的计算框架，使用了 fast O(N) diffing 算法
- 应用单向数据流，进一步简化数据状态管理，使页面的行为更易理解

同时还提供了如 EpoxyLayoutGroups 、EpoxyPresentations 、EpoxyNavigationController 等组件，提供了 UI 层面的完整方案。

[英文原文](https://medium.com/airbnb-engineering/introducing-epoxy-for-ios-6bf062be1670)

## 赞助者

### flomo 浮墨笔记

新一代卡片笔记，像聊天一样无压力输入，帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码（可以获得 45 天 PRO 会员）：https://flomoapp.com/register2/?Mjk4Njk

### 产品沉思录

一份由少楠& fonter 打理的付费邮件周刊及知识库，创建于 2017 年，累计 3000+ 用户付费订阅。涵盖了产品设计，服务设计，互联网技术，经济学，社会学等领域。我们尽量选择那些半衰期较长的内容，以确保这些知识能跨越时间。欢迎访问我们的免费精选集：https://index.pmthinking.com

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 iTDriverr 哦~**

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们开通了公众号，每期发布时公众号（LSJCoding）会推送消息，欢迎关注。

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