老司机 iOS 周报 #128 | 2020-09-14
老司机 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)
转载自:https://juejin.cn/post/6872233282096873486