老司机 iOS 周报 #127 | 2020-09-07

6,209 阅读3分钟

老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

WWDC20

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

新闻

App Review process updates

@anotheren:苹果正式上线了其在 WWDC20 上公布的应用审核流程优化。对于已经在 App Store 上发布的应用,除了与法律问题有关的应用外,将不再因违反准则而延迟错误修复。现在,除了对应用程序是否违反指南的决定提出上诉外,你还可以对指南提出修改建议。苹果鼓励你提交对于 App Store 和苹果开发平台的建议。

文章

🌟 🐕 云音乐 React Native 体系建设与发展

@looping:本文介绍了网易云音乐团队在优化会员收银台到达率时,选择了重建整个 RN 技术体系作为长期技术演进的方案。他们从自动部署、离线预加载、RN 框架升级等几个方向进行重构,最终取得了重大突破,到达率提升到 99%。他们未来还会围绕性能、效率、监控这三大方向进行基础建设。对构建跨端开发体系感兴趣的同学,或是在维护年久失修的基础项目,在仔细阅读文章后,相信都能找到一些可供参考的思路。

🌟 🐕 3. CocoaPods 命令解析 - CLAide

@JonyFang:本篇主要介绍了 CocoaPods 提供的命令行解析器 CLAide,它负责解析我们使用到的 Pods 命令,如 pod update Alamofire --no-repo-update --exclude-pods=SwiftyJSON 命令执行时 CLAide 在其中起到的解析作用。作者主要描述的几个点:

  • 简介 Ruby 中的 Open Classes 特性,其中需要留意的是 Open Class 可以跨文件、跨模块进行访问。
  • 概述 CLAide 功能及其目录结构
  • 介绍用于构建命令行界面的基础抽象类 Command。我们添加的命令都需要继承自 Command,不同的配置得到 abstract commandnormal command。pod 命令正是由多个 Pod::Command < CLAide::Command 的子类组成了 abstract command,通过这种方式可以达到多级嵌套命令的效果。
  • 接着以 pod update Alamofire --no-repo-update --exclude-pods=SwiftyJSON 为例介绍 CLAide 中 ARGV 是如何解析命令行传入的参数的。
  • 之后介绍 Command 的管理类 PluginManager 的执行流程。它会在第一次运行命令 self.run 时进行加载,且仅加载命令类中指定前缀标识的文件下的命令。
  • 最后,结合前面介绍的类职责及执行流程,通过创建一个 CLAide 命令来自己实现一款 🥤 贩卖机。(作者提供的 Demo 源码

🐕 Abusing iOS’ Screenshot Cropping Mechanism

@老驴:iOS 14 系统中自带的截图工具新增了一个非常好用的小功能:工具在选择截取范围时会自动吸附屏幕上元素的边缘,方便做出更加精准的截取。这个功能之前网上有很多的猜测是怎么实现的,本文的作者就做了深入的研究,并且得出了结论。对实现原理好奇的同学们不妨来了解一下。

🐕 Handling view controllers that have custom initializers

@张嘉夫:如果我们在开发中使用依赖注入(dependency injection)模式为对象在初始化时提供外部依赖,我们通常会希望替换 UIViewController 等 UIKit 类自带的初始化方法,这篇文章为你介绍如何处理使用自定义初始化方法的 view controller。包括如何实现 init(coder:) 方法,在 iOS 13 中使用 UIStoryboardinstantiateViewController 方法,以及通过 @IBSegueAction 方法来使用 storyboard segue 从而避免手动创建 view controller 等以便兼容 storyboard。

🐕 学 AR 到底学什么?我的 AR 之路反思与展望

@莲叔:从近年历届 WWDC 中不难发现,AR 和 ML 一直是苹果坚持的下一代的技术方向,从观感来看的话,AR 可能更加富含科技感。炫酷的效果背后,是 AR 技术包含了非常宽的技术栈。本篇文章可以说是一个不错的扫盲贴,介绍了 AR 技术体系的几个主要组成:SLAM、场景感知、3D 渲染、协作共享,并推荐了一系列学习的教材,不过文章内容停留在一个比较浅的层面,比较适合对 AR 感兴趣不知道从何开始的小白阅读,找找初步感觉。

🐎 多级 MVC 和项目最佳实践

@J_Knight_:为了解决在 UIViewController 之间存在依赖的问题,作者介绍了一种新的 MVC 方案:在 UIViewController 之上引入了一组新的 MVC 关系:将 Presenter 作为容器来整合 Controller,View;View 通过 Coordinator 来向 Presenter 通信;而高一级的 Presenter 持有低级 Presenter,低级的 Presenter 通过 Coordinator 向高一级通信。结构如下:

RootPresenter: UITabBarController
 ├─ HomePresenter
 ├─ MarketsPresenter
 ├─ TradeNavigationPresenter: UINavigationController
 └─ WalletsPresenter

采用该方案的优点是可以随着业务增长不断调整的能力,感兴趣的读者朋友可以原文链接阅读。

🐎 Turning the ChibiStudio canvas into an App Clip for iOS 14

@Damien:Apple 在 WWDC20 上发布的 AppClips 在具有更小的体积的同时也有着和原生一样的用户体验,吸引了众多开发者的目光。本文的作者也将他的一款名叫 ChibiStudio 的 App 在 AppClips 上做了尝试,本文将会深入介绍 App 往 AppClips 上迁移的步骤和注意事项。正在适配 AppClips 的同学不妨一读。

🐢 让 Objective-C 库支持 Swift Package Manager

@老峰:Swift Package Manager 已经发布四年,但目前较 CocoaPods 普及率很低,不过今年 WWDC 迎来了最要更新支持二进制分发以及资源文件。本文作者 @君赏 结合自己实际项目经验分享了 Objective-C 源码库支持 SwiftPM 以及 打包二进制闭源 XCFramework 支持 SwiftPM 的经验,对 SwiftPM 感兴趣的读者不妨阅读。

🐢 SF Symbols Changes in iOS 14

SF Symbols 是苹果在 WWDC 2019 介绍的一套矢量图形,iOS 14 中,苹果对 SF Symbols 进行了大量更新:

  • 新增近 900 个新符号(有些符号的使用受到限制)。
  • iOS 13 中的 60 个符号已被重新命名。
  • 158 个符号有多色支持。
  • 本地化支持:新增许多右到左的符号。
  • 错误修复:修复了一些与名称不匹配的图片。

工具

YYDebugDatabase

@红纸:YYDebugDatabase 来自 y500 的远端调试数据库工具,其可以通过阅览器远程调试应用内的数据库。其允许我们直接在浏览器中查看和编辑数据库,包括直接查询,更新,插入和删除数据。我们也可以下载完整的数据库,在 Mac 上进行调试。由于其基于 FMDB 进行开发,支持的数据库格式有限,只能调试 SQLite 格式的数据库。

推荐人:y500

代码

FlutterUnit

@极速男孩:FlutterUnit 是一个 flutter 的开源项目,集成了 flutter 中 260 个左右的组件,适合新手来学习 flutter 的时候来熟悉 flutter 中各种组件的使用。

🐎 Pigeon

@zvving:为 SwiftUI 提供服务端数据异步加载能力,支持可定制的缓存、序列化、分页等。

整体设计借鉴 React Query:声明式语法,实现较简洁,有相关使用经验的同学推荐选用。

🐎 Parma

@EyreFree:一个可以用来在 SwiftUI 构建的应用中展示 Markdown 的组件,支持大部分常用的 Markdown 样式,可通过 SPM 集成,有需要可以试用。持续开发中,感兴趣的同学也可以尝试贡献代码。

内推

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

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

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

关注我们

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

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

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)