老司机 iOS 周报 #86 | 2019-10-14

5,609 阅读6分钟

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

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

新闻

Twitter 重新上架 macOS 客户端

@张嘉夫:10 月 11 日,Twitter 重新上架了经过 Project Catalyst 重写后的 Twitter for Mac 客户端。新版 Twitter 客户端支持拖拽、深色模式、多窗口浏览以及快捷键操作等功能。

文章

🐕 Swift 的字符串为什么这么难用?

@Damonwong: Swift 的字符串的设计可以说是 Swift 中最难以理解的语法之一了。不过,我们周报的小伙伴 @kemchenj 同学写了一篇通俗易懂的文章,详细阐述了

  • 为什么会存在 Collection.Index 这个设计
  • 目前的 Collection.Index 是怎么设计的,存在哪些问题
  • 未来的 Collection.Index 会怎么改进

感兴趣的同学可以仔细阅读一下,算是一篇不错的 Swift 语法进阶文章。

🐕 iOS 端 h5 页面秒开优化实践

@莲叔:基于移动端的 H5 快开优化已经成为各大 App 的标配模块,通常的做法有资源缓存、离线包、data prefetch等等。本文作者首先分析了 H5 页面加载的流程,并在 iOS 上基于 WkWebview 通过实现请求的拦截,实现了资源缓存的机制。文章整体不算体系,因为并没有包含很多 state of the art 的优化方式,但在 WkWebview 的使用技巧上介绍的还比较详细,仍是一篇值得一看的文章。

🐕 The Simple Life(cycle) of a SwiftUI View

@老驴: 相信大家对 UIKit 中 UIView,UIViewController 的生命周期一定是熟悉到不能更熟悉了,这些知识点也一直是面试中的常考问题。那么在 SwiftUI 中,View的生命周期又是怎么样的呢?这篇文章就介绍了作者对其的理解。有兴趣使用 SwiftUI 的同学么可以简单的了解一下。

🐕 Reducing iOS storyboard merge hell

@J_Knight_:作者介绍了几种避免在合并代码时在 storyboard 引起的冲突的方法:使用 SwiftUI,使用 nib,Diff 工具,锁定文件等方法。经常使用 storyboard 开发的朋友可以看一下。

🐕 iOS 13

@老峰:本文来自 Mattt (@mattt) 分享了 iOS 13 中的一些新的 API 及框架:

文章还分享了 MapKit、JavaScriptCore、UIKit 等新的 API,限于篇幅不一一列举。

🐎 Alternatives to protocols in Swift

@四娘:Swift By Sundell 这周探讨的是 protocol 的替代品,虽然 Swift 称自己为 protocol-oriented,但实际上有很多问题都不适合使用 protocol,作者列举了一些例子并且提供了更好的解决方案。

🐎 重磅|庖丁解牛之——Flutter for Web

@邦Ben:众所周知,1.9 版本加入了 Flutter Web 的支持,但也仅限于技术预览。该文通过移动端原理和 Web 方式进行对比,直观感受到两者区别(差异主要在 dart:ui 和 engine 这一层)。

优点:通过 HTML + CSS + Canvas 的方式更好的兼容,低成本迁移(Flutter 上层直接兼容) 缺点:dart2js 生成的代码过大,功能尚不完备,使用的 BitmapCanvas 会导致一些缩放场景有性能问题

在这么一个优秀的分层设计中,Flutter Web 仍值得继续期待,等到可用版本出现。

🐕 A Comprehensive Guide to All 120+ Settings URLs Supported by iOS and iPadOS 13.1

@享耳先森:iOS 的 Settings App 一直都支持通过 URL Scheme 的方式打开某一个子项,本文作者收集了 120+ 个在 iOS 13 下支持的 URL,大家可以浏览看是否有满足自己需求的点。需要注意的是:这些 URLs 随时可能在未来 iOS 版本中移除或被 Apple 审核团队以 Private API 为由拒绝上架。

🐕 Reverse Engineering Swift Applications

@极速男孩:本篇文章主要介绍了如何去反编译一个 Swift 的 app 。首先介绍了使用如何通过 Name Mangling 和 swift-demangle 来反编译得到一个 Swift 的 app 中的方法。Class Dump 现在已经对 Swift 提供了有限的支持。最后探索了去 hook swift 中的方法的可能。

代码

基于 NSProxy 开发的支持数据绑定、事件绑定的库

@含笑饮砒霜:GICDataBinding 是一款基于 NSProxy 开发的数据绑定库,支持数据绑定(单向、双向)和事件绑定,重要的是支持 JS 表达式,当然也支持 Swift 开发,但是要求 Swift 中的数据类型必须是 NSObject 子类。基于 GICDataBinding 数据绑定系统,可以做一些之前实现起来比较复杂的功能,比如重新思考 ViewModel 的定义,将 ViewModel JS 化、配合 Texture 实现整个 UI 基于绑定系统的可响应式设计等。

Flutter 动画组件

@CrazyCoderShiFlutter Animation Set 由 YYFlutter 团队开发, 简洁的 API , 简化了动画实现, 特别是组合动画. 项目默认实现了不少酷炫的效果, 开箱即用.

Yaap: Yet Another (Swift) Argument Parser

@anotheren:Yaap 是一个 Swift 写的 CLI 库,它使用了 MirrorProperty Wrapper 简化参数和选项的声明,并具有以下特性:

  • 强类型的参数和配置解析;
  • 自动生成帮助和使用信息;
  • 多命令路由;
  • 智能拼写错误提示

如果你也在从事命令行相关的开发,不妨试一试。

xcderiveddata

@Jimq:用于打印 Xcode 工程的派生数据目录(derived data directory)的命令行工具,也支持把结果传递给 xcodebuild 或其他命令去自行化你的构建过程。

音视频

ggtalk | 互联网公司的开发流程

@ggtalk:最近几个月翻译组的大事之一,就是蓉老师的开发流程调研。为了获得最新最全的信息,专程去广州和各位大佬讨论开发流程。蓉老师基本聊遍了国内的一线互联网公司,整理了一份文档,会在这期中详细介绍。

除了介绍流程,我们还讨论了一些相关内容,比如流程存在的问题、国内流程做的好的公司、研究流程对我们自己的意义等等。如果你的团队正面临流程问题,应该能从这期节目中获得一些灵感。

这期讲的内容比较长,容易走神,大家可以对照着文字版来听:文字版流程整理摸我

内推

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

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

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

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

关注我们

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

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

说明

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

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