# 老司机 iOS 周报 #136 | 2020-11-16

![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) 提出。

## WWDC20

本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章，每篇都很精彩！

- [使你的 Metal 应用程序更好地运行在 Apple Silicon 架构上](https://mp.weixin.qq.com/s/sQKC4Bf_NLYK6ZuMYOUmuw)
- [在 Apple Silicon 上优化你的 Metal 应用程序](https://mp.weixin.qq.com/s/QQ2cPufxwZoWCCB3-1MxfA)

## 新闻

### [TestFlight 3](https://developer.apple.com/news/releases/?id=11112020)

[@Parsifal](https://github.com/ParsifalC)：TestFlight 是苹果官方推荐的内测分发渠道，但一直以来都不能像 App Store 一样支持自动更新，这对于参与内测的用户十分不友好，也同样让开发者增加每次邀请内测的成本。TestFlight 3 终于带来了自动更新这一功能，目前还不是默认开启，升级 TestFlight 3 后首次进入 App，苹果会提示你是否开启，之后就需要到内测 App 详情页中开启手动开启。

## 新手推荐

### 🐎 🚧 [10 Tips & Shortcuts You Should Be Using Right Now On Xcode](https://medium.com/@mpesate/10-tips-shortcuts-you-should-be-using-right-now-on-xcode-2e9e1b01511e)

[@Parsifal](https://github.com/ParsifalC)：非常实用的提高你编码效率的 10 个快捷键，图文并茂，一看就会用，老少咸宜~

## 文章

### 🌟 🐢 [The Missing Guide for Mac Catalyst Apps](https://www.craft.do/maccatalyst-guide)

[@Parsifal](https://github.com/ParsifalC)：本周双十一，苹果在本年度最后一次 Apple Events 上发布了全新的 ARM 芯片 M1、以及三款搭载了 M1 的 Mac：MacBook Air、MacBook Pro 13‘ 和 Mac Mini。Mac Catalyst 赋予了 iOS/iPad OS App 能够直接运行在 macOS 上的能力。但实际上，这些原移动端的 App 直接移植到 macOS 上运行，仍然不能尽如人意。Craft 团队早在一年前就开始 Catalyst app 的研究，这次他们将自己的经验整理成一份非常详尽的引导，弥补了苹果官方并不完善的 Catalyst app 文档。引导分为设计、研发和发布测试三大部分，对于想尝试 Catalyst app 的开发者和团队非常有借鉴意义。

### 🐎 🚧 [XCFrameworks — New Format for Packaging Frameworks in iOS](https://medium.com/dev-jam/xcframeworks-new-format-of-packaging-frameworks-in-ios-306cda40b24f)

[@Leo](https://github.com/LeoMobileDeveloper)：随着 Apple 逐步切换到 Apple Silicon 和 Xcode 12 的发布，传统的使用 lipo 创建 Fat Frameworks 的方式不再生效，因为模拟器和 iOS 都使用 arm64 的架构，可以通过 WWDC 2019 推出的 XCFrameworks 来解决这个问题，后者可以把多平台的 Framework 打包成一个 Bundle 。

### 🐕 [PodSpec 管理策略](https://mp.weixin.qq.com/s/Kb2IxY2E3soxSlGykNZTuQ)

[@JonyFang](https://github.com/JonyFang)：本文介绍了 PodSpec 仓库是如何被管理及 PodSpec 文件的更新和查找是如何进行的。

Spec Repo 作为 PodSpec 的聚合仓库，记录着所有 pod 所发布的不同版本的 PodSpec 文件。Spec Repo 对应到 Core 的数据结构即为 Source，文中介绍了 Source 的依赖关系及版本迭代的一些优化改进。

接着引出 Metadata，Metadata 的作用是用于记录 Source 所支持的 Cocoapods 的版本及仓库分片规则（文中以 AFNetworking 为例展开说明）。

最后介绍了如何找到 Podfile 中限定版本号范围的 PodSpec。通过 Metadata 和 pod_name 得出 pod 所在目录，找到 pod 目录下的 Versions 列表，比较 Version 得出最终需要的 PodSpec 文件。同时引出 Semantic Versioning（语义化版本号）的作用及规则。

### 🐕 [React Native 优化实践之拆包与预热](https://mp.weixin.qq.com/s/vh2TaGcGFXCz24nqRYbbLQ)

[@looping](https://github.com/looping)：我们在周报 [#127](https://github.com/SwiftOldDriver/iOS-Weekly/releases/tag/%23127) 期推荐过 [云音乐 React Native 体系建设与发展](https://juejin.im/post/6867722436369416206)，这次网易云音乐团队又给我们带来了优化 React Native 打开速度的实践分享。他们通过业界通用的预热 + 拆分基础包方案进行改造，分散了容器初始化和基础库加载时间，最终达到双端非常明显的优化效果。虽然使用的是通用解决方案，但具体实践的思路细节也有值得参考学习的，有在做这块优化的同学可以相互对比一下，在优化策略上或许会有一些启发。

### 🐎 [使用 Property Wrapper 为 Codable 解码设定默认值](https://mp.weixin.qq.com/s/jOyHRS2Wx6MJpuYuENhVgg)

[@Damien](https://github.com/ZengyiMa)：本篇是喵神(onevcat)的一篇精彩好文，本文介绍了一个使用 Swift Codable 解码时难以设置默认值问题，由此引出利用 Property Wrapper 给出了一种相对优雅的解决方式，来在 key 不存在时或者解码失败时，为某个属性设置默认值。这为编解码系统提供了更好的稳定性和可扩展性。

### 🐎 [Debugging JSON Data in LLDB](https://soffes.blog/debugging-json-data-in-lldb)

[@Parsifal](https://github.com/ParsifalC)：LLDB 上直接打印 JSON String 的话，是不能清晰地看到 Key-Value 的。作者自己动手扩展了 LLDB 能力，使用新增的 JSON 命令就可以格式化输出 JSON String。
如果你也有扩展 LLDB 的需求，不妨也像作者一样，自己动手试试~

## 工具

### [Periphery 2.0](https://github.com/peripheryapp/periphery/wiki/What%27s-new-in-Periphery-2.0)

[@zvving](https://github.com/zvving)：Periphery 是用于扫描 Swift 项目无用代码的工具。2.0 除提供 Comment Commands，SPM 支持等特性外，从根本上调整了对源码建立索引的方式：从 [老出问题的 SourceKit](https://github.com/peripheryapp/periphery/issues/49) 调整到 [Index-While-Building](https://docs.google.com/document/d/1cH2sTpgSnJZCkZtJl1aY-rzy4uGPcrI-6RrUpdATO2Q/edit)，分析过程更快，结果更准确，值得及时跟进。

## 赞助者

[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS 开发辅助工具，提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能，在工作中能极大提升开发效率，Mac App Store免费下载！

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 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）
