老司机 iOS 周报 #95 | 2019-12-16

4,376 阅读7分钟

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

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

新闻

🌟 🐢 Flutter 1.12 重磅发布:支持 Web 与 macOS

@CrazyCoderShi:随着 Flutter Interact 的落幕,Flutter 1.12 稳定版本如期而至,此次不仅完成了成吨的 issues 修复 (关闭了 5303 个 issue,合并了来自 484 个贡献者的 5950 个 PR),而且带来诸多新功能和优化.

  • 增加了对 Android App Bundles 和 iOS 13 的支持
  • 改进后的 Add-to-App
  • Dart 2.7 Release
  • Flutter 1.12 的 master、dev 和 beta 频道都提供了改进的 Web 支持
  • macOS 支持
  • 新版 DartPad
  • Hot UI
  • Layout Explorer
  • 🌟多设备调试
  • 还有更多新功能和社区插件等你探索...

🌟 App Store Connect 的部分功能将于 12 月 23 日 - 27 日暂停使用

一年一度的美国长假又来了,App Store Connect 已经正式向所有开发者推送节假日安排,时间段是 12.23-12.27。

App Store Connect:请确保您的 App 为最新版本,以准备迎接假期。App Store Connect 在 12 月 23 日 - 27 日(太平洋时间)期间不接受新 App 和 App 更新,因此请提前处理任何与发布相关的计划、提交和审批事宜。其他 App Store Connect 功能将不受影响。

文章

🌟 🐕 Lightweight API design in Swift

@zvving

  • 强大、灵活、易用?在 API 设计过程中你更在意哪一点?或者说,该如何把握这三者间的平衡?
  • 面对 Swift 诸多新特性,我们会困惑:都能实现功能,我为什么要知道这些特性?

本文尝试通过两个技术方案的设计变迁,回答上面的问题:(请留意每次设计变迁要解决的问题及其所带来的优劣)

  1. 协议(强大功能与灵活性) -> 带参枚举(更加易用) -> Self 为返回类型的静态方法(摒除 enum 带来的弊端,更灵活易用)
  2. 数组参数 -> 可变参数(更易用灵活) -> 提供 group 实现(向后兼容)-> 新场景(展示灵活性)

就像文中所说,我们的最初目标是让 API 更易用,而更易用也能带来更易组合、灵活性更高的副产品。

事实上, 在实践过程中,建议首要设计目标定义为(对使用者)易用,其次是(可预期的灵活性),最后才是功能强大。 因为迫于问题领域的业务需要,功能强大是最容易并且一定会达成的目标。

以易用性为目标,要在两个方向上持续前进:一是在业务领域不断深入思考问题本质,定义简明扼要的抽象;二是在『API 设计的工具箱』中选用最合适的工具,在提供强大功能与可预期的灵活性的前提下(记住这是一定可达成的),尽可能提升易用性。

如果仅限于用类和协议抽象,设计时可用的手段将捉襟见肘。你手中『API 设计的工具箱』更丰富,就能有更多手段达成易用的目标。熟练掌握 Swift 语言特性,相信你能设计出更易用的 API。

🐎 用故事说透 HTTPS

@J_Knight_:本文作者通过漫画故事的方式介绍了 HTTP 的不安全性,并讲解了 HTTPS 的几个概念:对称加密、非对称加密,数字证书以及数字签名,而且模拟了中间人攻击的场景,生动形象,易于理解。对 HTTPS 不熟悉的朋友可以阅读此文帮助理解。

🐎 The Advanced Guide to UserDefaults in Swift

@老峰:本文主要介绍了 UserDefaults 的基础概念以及内部实现细节,如何使用 Swift5 中 Property Wrapper 和 UserDefaults 实现类型安全的键值存储;如何使用观察者模式监听 UserDefaults 的值变化。

🐕 iOS 图片内存优化

@EyreFree:本文介绍了作者对 iOS 平台上的 HEIF 图片格式使用过程中的性能问题进行优化的经验,结合实践针对 HEIF 图片加载过程中的内存暴涨和 CPU 高占用原因进行了分析,并给出了自己的解决方案,有遇到类似问题的朋友可以参考。

🐕 Quick tip: clearing your app’s launch screen cache on iOS

@Jimq:iOS 13 Launch screen 的缓存机制有所改变,当我们想动态改变 Launch screen 时会发现并不能看到自己想要的效果,作为 Xcode 的资深用户,我们莫逆于心,使出清缓存、重启真机/模拟器、重启 Xcode、删掉 App 的手法,但可能还是不能如愿,那么试试这篇文章里的方法吧,或许可以缓解痛苦,起码作者推文(🚧)下面一伙人是这么认为的。

🐕 如何对 iOS 启动阶段耗时进行分析

@五子棋:网上关于 App 启动优化的文章已经不计其数,但是这篇来自戴铭的文章对启动优化问题进行了很充分的定义。从问题分析 - 纬度联系 - 如何执行 - 优化维持等多个角度对优化所涉及的知识点进行了完整的描绘。同时文章提供了大量资料和工具来帮助大家更好地完成启动优化,是一篇不可多得的佳作!

工具

Pecker

@张嘉夫pecker 是用来自动查找无用代码的工具,基于 IndexStoreDB and SwiftSyntax,可以检测无用类、结构体、枚举、协议、函数、别名以及运算符。目前有五种规则,分别是 skip_public, xctest, attributes, xml, comment,可以禁用不需要的规则。

NativeConnect

@anotherenNativeConnect 是一款为 macOS 开发的 App Store Connect 原生桌面工具,相比直接使用游览器访问,它更加快捷。它采用工程化的设计,交互逻辑类似于 Xcode,方便你把项目分享给工作伙伴。目前支持应用元数据、用户评论的管理。

代码

Diagnostics

@老驴Diagnostics 是一个帮助开发者诊断用户反馈信息的库。它可以快速集成入 App,自动生成邮件格式,添加包含系统日志在内的附件,甚至可以过滤日志中的敏感信息。在大公司的大型项目中,一般都有专门的组来完成这样的支持,而这样的开源项目,则可以帮助个人开发者或是小项目,快速轻松补全反馈功能。

超甜的 Swift 初始化语法糖 - Then

@水水: Swift 初始化语法糖开源库,让你的代码更简洁。实现超简单,对实现感兴趣的朋友可以看看哦~

程序员的副业

让我们来探索一下 Coding 以外的世界,看看程序员除了在 996 之后还会在做点什么?

团队成员 @J_Knight_ 从去年年末开始了自己的股票和基金的投资之旅,用部分的业余时间学习投资理财方面的知识,从今年年初到现在的股票收益超过40%,基金收益超过20%;并在今年下半年开设了个人投资理财公众号「复利维他命」:该公众号主要分享理财,股票和基金投资的相关知识和实战经验,以及相关书籍的读书笔记。

在这里分享他在上个月发布的一篇文章: 我为什么把投资作为自己的一项兴趣爱好。这篇文章总结了他在这一年之内投资股票和基金的心得和体会,以及为什么把投资理财作为了自己的一项兴趣爱好的原因。本文对还没有开始投资股票和基金的朋友会有一些启发;对已经开始投资股票和基金的朋友可能也会有一定的借鉴意义。

内推

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

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

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

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

关注我们

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

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

说明

🚧 表示需翻墙,🌟 表示编辑推荐

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