阅读 2705

老司机 iOS 周报 #60 | 2019-03-25

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

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

新闻

3 月 27 日起上传 App Store 最低需须使用 iOS 12.1 SDK 编译

Apple 发布公告:请注意,自2019年3月27日起,iPhone 或 iPad 的所有新 App 和 App 更新(包括通用 App)都需要使用 iOS 12.1 SDK 构建并支持 iPhone XS Max 或 12.9 英寸 iPad Pro(第 3 代)。还需要提供这些设备的屏幕截图。Apple Watch 的所有新 App 和 App 更新都需要使用 watchOS 5.1 SDK 构建,并支持 Apple Watch Series 4。

新手推荐

🐎 Flutter 您需要知道的知识点

最近整理周报的时候发现关于 Flutter 的文章一下子多了起来,看来最近研究 Flutter 的人应该有不少,不过我觉得对于大部分读者来说,目前对于 Flutter 还是处于一个萌新的状态,所以为了能看懂一些先行者到底在讲什么,这周给大家推荐两篇比较基础的文章:

这篇文章主要讲了 Flutter 是什么,能做什么,什么样的人适合使用 Flutter 以及 Flutter 需要怎么样入门以及如何使用。

在看完上面一篇文章的基本介绍之后,就要了解一下 Flutter 里面的内容了,这篇文章大概介绍了关于 Flutter 的 SDK 主要功能,支持的编辑器,开发的灵感来源以及是否包含测试框架等一系列问题。

🐎 UIApplicationDelegate 中方法的调用顺序

本文介绍了在 UIApplicationDelegate 中的各个方法在各个不同状态下启动和打开是所调用顺序。

文章

🐕 即将开源 | 让 Flutter 真正支持 View 级别的混合开发

本文介绍了今日头条主客户端上接入 Flutter 进行混合开发的经验,主要是解决如下问题

  1. FlutterView 在一些小场景碎片化的问题。譬如短期内无法完成页面级别的 Flutter 化,Native View 和多个 Flutter View 必须混合存在的情况。类似的还有 Feed 流中的 Flutter Cell,列表页中的某些 ItemView 是 FlutterView。
  2. 内存管理问题:回收不活跃页面占用的内存
  3. 共享线程:收敛全局线程为公共的4个线程
  4. SurfaceView 改 TextureView :主要是解决手势动画的问题

总结来说,字节跳动客户端基础技术 Team 目前对于 Flutter 已经有了一定的研究,并且能够支持到 View 级别开发,目前文中提到的方案正在进行公司内部开源审查程序,通过后会在字节跳动官方 Github 上开源。

🐢 如何构建具有多种 Cell 类型的表视图

iOS 开发中,可以说几乎所有的项目都离不开 UITableView 的使用,甚至它的各种变形扩展都无处不在。UITableView 运用广泛的主要原因在于其 Cell 的多变性,在 Cell 数量和顺序恒定或展示内容相似的时候,这是比较常规的用法。但是当数量顺序甚至展示内容不尽相同的时候,这是比较有趣又极具挑战的。本文作者则指出传统写法在这种复杂情境中的弊端,并使用 MVVM 模式去构建这种动态试图:

  1. 模仿服务器响应,创建简单 JSON 数据,将 JSON 映射到 Model
  2. 基于 Model 创建 ViewModel,它将负责向 UITableView 提供数据,ViewModel 具有一个 Item 数组,它对应着 UITableView 包含的 Section 数组
  3. 每种Cell 对应 ViewModel 中的 Item 属性,可修改或者删除数据而不需要做任何代码修改

这种模式最大的好处,就是在复杂业务情境下将业务和页面区分出来,免去各种分支判断及数据修改造成的大量代码修改,并且 ViewModel 也易被重用。

🐕 UTF-8 String

文章内介绍了,Swift 5 将字符串的编码格式从 UTF-16 改成 UTF-8,以此提高性能。Unicode-rich textASCII 在 5 之前,用 UTF-16 存储,在这之后都用单个的 UTF-8 存储。

选用 UTF-8 的原因:

  • ASCIIUTF-8UTF16 占用少50%。
  • 高兼容性(对操作系统,开发工具,C / Objective-C 桥接)。
  • 减少代码大小和编译时间成本。
  • 无需修改现有代码。

更加详细的说明,请打开链接。

🐕 Mastering the VIPER architecture

作者介绍了面向协议编程在 VIPER 架构上的实践,并结合代码示例讲解了 Module, Presenter 和 Entity 协议的定义和使用方法。

推荐阅读:

🐕 Swift AVFoundation framework — Text-To-Speech tool

本文介绍了 AVFoundation 文字转语音的相关接口,并详细介绍了 AVSpeechSynthesizer, AVSpeechUtterance, AVSpeechSynthesizerDelegate 在实际应用中的流程与注意事项。

🐎 Better tests for delegates

文中介绍了两种测试 delegate 调用的两种决策:面向实现、面向行为。在面向实现过程中,我们更多的关注状态变化,需要更多的测试 delegate 响应方法的实现。而在面向行为的决策中,我们不需要关注其参数细节,只需要关注其实现的内容。

工具

CocoaPods 历险 - 总览

是否应该使用 CocoaPods 在几年前还是一个争论不休的问题,然而现在,但凡稍具规模的项目,就没有不使用 CocoaPods 的。作为一个三方库版本管理的工具, CocoaPods 对于组件的拆分粒度是非常细微的,我们所调用的 pod 命令都是执行本地对应目录下的脚本,那这些脚本文件到底执行了什么呢?本文主要分析了 pod install 命令执行的详细过程,当我们知道大致过程后,就可以对其做一些修改和控制,以达到我们的预期。

代码

Snail: An observables framework for Swift

一个轻量级的 observables 库,不用 KVO & RxSwift 也可以轻松观察变量的变化 & 响应事件了。

swift-log

官方的日志接口包(Logging API package),使用方(比如 Swift 服务端、跨平台的应用或库)可以根据自己的需求配置 log 输出的具体实现。

音视频

ggtalk | 区块链到底能干嘛?

区块链近年来一个是技术圈的热点,风头甚至盖过了 AI,不少技术圈的名人也纷纷投身了区块链相关的创业中。本期 ggtalk 邀请到了微博上链圈名人赏味不足,来一起聊聊区块链的一些入门知识,强烈推荐感兴趣但一直没入门的同学收听。

内推

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

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

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

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

关注我们

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

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

本期编辑

@四娘@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@Parsifal@aaaron7@kyo@tom510230@anotheren@水水@looping@老老老老老老老驴@小非86@邦ben@红纸@含笑饮砒霜@JimQ@老峰@zvving@J_Knight_@极速男孩

说明

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

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

关注下面的标签,发现更多相似文章
评论