老司机 iOS 周报 #128 | 2020-09-14

6,784 阅读8分钟

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

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

WWDC20

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

新闻

🌟 Apple 特别活动 - 秋季发布会将于本周三凌晨举行

@Parsifal:苹果今年的秋季新品发布会将于本周三(北京时间 9 月 16 日)凌晨 1 点在 Apple Park 举行,与今年的 WWDC 20 一样,此次发布会依然采用了线上视频形式,国内用户可以在爱奇艺、哔哩哔哩、腾讯视频和新浪微博观看本次直播。根据一些媒体消息,本次发布会可能不会发布 iPhone 12,不知苹果是否能带来惊喜。

文章

🌟🐕 如何提高代码质量

@享耳先森:高质量代码简单来说就是「好看和好用」,好看是指代码可读性好,容易理解、容易维护,别人接手了不骂你;好用则指代码健壮,不容易出错,机器跑着不骂你。即使出错,也容易定位,容易止损和恢复。

如何才能拥有高质量的代码,有两种途径:

  • 第一种途径:先有好的设计--->然后用优秀的编码去实现--->再把优秀的编码风格延续下去
  • 第二种途径:从糟糕的代码开始--->不断去重构,向优秀的设计方案和代码风格不断逼近--->再延续下去

本文重点从「途径一」的角度介绍如何能产生好代码,分别从规范、实践、度量及改进几个角度深入阐述,建议阅读。

🐕 App Clip 离落地有多远?

@JonyFang:WWDC2020 引出了 App Clips,之前的《WWDC20 内参》已经介绍过《App Clips 的配置及链接处理》。截止这里,我们已经知道了 App Clips 所带来的利,如及时可用等。本篇从业务和技术两个角度,列出了 App Clips 真正落地可能会遇到的问题,度量的角度可以作为我们实际业务落地过程中的参考。

这里列出 App Clips 落地过程中值得思考的几点:

  • 业务角度
    • 国内市场线下支付的支持
    • 国内小程序的竞争
    • 仅支持 iOS 14+ 用户
    • 虽然提供了多种唤起 App Clips 的方式,但触发的条件比较严苛。如 Clip Code 只能 通过系统相机才能够唤起
    • 对于纯线上 App 最有利的唤起方式是通过 Safari,但操作路径步骤比较多
  • 技术角度
    • 需要针对业务做代码拆分或做足够彻底的组件化
    • 10M App Clips 包大小的限制
    • App Clips 不支持后台处理活动。如后台不支持网络请求
    • App Clips 的用户怎么和对应的 App 用户一样做到唯一标识和绑定
    • App Clips 支持唤起三方 App,但三方 App 不支持唤起 App Clips。所以会影响到三 方登录、三方分享、三方支付的场景
    • 不支持企业包
    • CocoaPods 对 App Clips 的支持还不完善

🐕 iOS 性能优化 - Allocations 分析内存分配

@JonyFang:开发过程中,我们有时会遇到内存分析相关的问题,本篇介绍了 Allocations 工具。Allocations 工具提供了几种内存分析的方式:

  • Statistics
  • Call Tree
  • Allocations List
  • Generation

通过上述几种分析方式,我们可以定位找出需要进行内存优化的代码块。阅读过程中可以配 合作者提供的 Demo 进行手动分析操作。Demo 地址 :github.com/LeoMobileDe…

🐎 LeetCode Cookbook

@Damien:还在为如何提高算法能力苦恼吗?来看看霜神 (一缕殇流化隐半边冰霜)的 LeetCode Cookbook 吧,精美的排版和简单易懂的题解帮助 你的算法道路上披荆斩棘。

🐎 Interviewing for an iOS Design System Engineer role at Spotify

@老驴:你是不是还在疑惑国内外互联网公司面试的区别?你是不是还在好奇海外互联网公司面试需要哪些技能?来,这篇来自一位 Spotify 工程师的经验总结文章可以让你一探究竟。

🐢 Agora Talk 回顾 | 深入聊聊不一样的 Flutter

@含笑饮砒霜:Flutter 自出道以来可以说是突飞 猛进,因为它独特的底层设计和开发语言,但是作为一个跨平台框架它也是备受追捧和争议 。

目前 Flutter 被吐槽最多的有以下几点:

  • Flutter 嵌套恶心
  • 使用 dart 不使用 js
  • 混合开发比 RN 更麻烦
  • 不支持热更新

但是 Flutter 也有自己独有的一些优势:

  • Flutter 普及迅速
  • 对 Web、Linux、Win 等平台也在快速推进
  • 在 UI 兼容性和代码复用上表现优秀
  • 对比其他跨平台框架性能更好

文中不仅详细介绍了 Flutter 的槽点和优势,还分析了 Flutter 世界中一些有意思的设定 ,比如 Widget 和 Element 的关系,组成 Dart 层渲染闭环的其他元素等。

🐢 Flutter 1.20 下的 Hybrid Composition 深度解析

@CrazyCoderShi: Flutter 在很早期的版本中就提 供了 PlatformView 来解决 View 级别的 NativeVivew 和 Flutter 混合,但 PlatformView 不管从开发体验还是性能表现都有点儿差强人意。

在官方和社区不懈的努力下, 1.20 版本开始在 Android 上新增了 Hybrid Composition 的 PlatformView 实现,该实现将解决以前存在于 Android 上的大部分和 PlatformView 相关的问题,比如华为手机上键盘弹出后 Web 界面离奇消失等玄学异常。

本文详细的讲解了 Hybrid Composition 接入和底层原理实现。

🐕 Private APIs, Objective-C runtime, and Swift

@四娘:Foundation 里有一些 API 被标记为 NS_SWIFT_UNAVAILABLE,例如 NSInvocation / NSMethodSignature,由于它们不安 全或者没办法很好地融入到 Swift 的体系里所以被标记为不可用。

但有时候我们面对平台 SDK 的问题,又不得不跟这些 API 打交道,那么此时在 Swift 里 如何调用并且封装这些 API 就成了一个问题,这篇文章的作者就详细地介绍了他的解决方 案:

let object = NSDate()
let objectPrivate = object as! NSObjectPrivate
let selector = Selector("description")
let signature = objectPrivate.methodSignature(for: selector)!
let invocation = NSInvocationClass.invocation(methodSignature: signature)
invocation.selector = selector
invocation.invoke(target: object)
var unmanagedResult: Unmanaged<NSString>? = nil
invocation.getReturnValue(&unmanagedResult)
let result = unmanagedResult?.takeRetainedValue()
print(result ?? "<nil>")

🐕 iPhone 屏幕尺寸进化历程背后的 App 设计哲学

@张嘉夫:从 2007 年发布的第一代 iPhone 到 2019 年发布的 iPhone 11 系列,iPhone 的屏幕尺寸已涵盖 3.5 寸、4 寸、4.7 寸、5.5 寸、5.8 寸、6.1 寸、6.5 寸七种,传闻将于今年秋季发布的 iPhone 12 还会增加 5.4 寸 、6.7 寸两种尺寸。随着时间轴的推移,iPhone 的屏幕尺寸已经变得越来越多,越来越复 杂,一个 app 要适配所有的这些屏幕尺寸,在从设计、开发到推广的整个过程中都需要考 虑诸多因素。在这 13 年间 iPhone 的屏幕尺寸是怎样一步步进化到此的?基于软硬一体的 设计,屏幕物理尺寸的变化背后包含着怎样的进化规律?这些变化对我们朝夕相处的手机 app 又产生了什么影响?根据已有的进化规律,我们是否可以展望未来的 iPhone 还会走向 何方?基于 iOS 14 Beta 中发现的新线索,我们又可以推断出 iPhone 12 的哪些更多信息 呢?作者 Allen Chu 在这篇文章里对这些问题进行了探讨。

代码

🐎 VAP

@EyreFree:VAP(Video Animation Player)是企鹅电 竞开发,用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点,且同时支持 iOS、Android、Web 平台。

  • 相比 WebP、APNG 动图方案,具有高压缩率(素材更小)、硬件解码(解码更快)的优点
  • 相比 Lottie,能实现更复杂的动画效果(比如粒子特效)

内推

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

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

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

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

关注我们

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

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

说明

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

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