阅读 3356

老司机 iOS 周报 #38 | 2018-10-08

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

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

新闻

TestFlight 开始支持邀请链接

在今年的 WWDC 中,苹果就已经透露将在下半年推出 TestFlight 的公开链接邀请功能,现在这个功能已经正式开放。

另外 dustturtle 也第一时间分享了自己的实践成果 - 千呼万唤始出来 - TestFlight public link 功能正式发布了!

Apple’s use of Swift in iOS 12

iOS 中使用 swift 的地方在持续增加,在 iOS 12 中包含 swift 的库相比 iOS 11 增加了一倍。

Swift 5.0 Release Process

Swift5.0 离我们越来越近了,了解一下最近的进展吧

  1. 二进制不向下兼容,容易理解,Swift 新版本就没有向下兼容过
  2. 必须强制迁移 Swift3.0 的代码,不然你只能使用 Swift4.2 来编译了
  3. 现在提供了 Swift5.0 的尝鲜版
  4. 预计2018年11月16日对于 Swift5.0 是一个很关键的时间结点(真的吗?)
  5. 希望你们会喜欢 Swift5.0 的新编程思想(又变?)

专栏

iOS 上修改私有方法的几种方式解析

iOS 开发中,或多或少都会有遇到修改私有方法的需求,这篇文章总结了目前我们能够使用的方式,并从面试官的角度推荐应聘者应该怎么回答这类开放性问题。

文章

🐢 Mirror 的工作原理

这篇文章主要介绍了 Mirror 的工作原理,Mirror 简单来说就是用来做类型反射的 API,可以在运行时里获取实例的类型信息,例如 Playground 里的变量数据预览就是基于这一套 API 来完成的。

文章主要分为两个部分,第一部分是元类型的抽象(类型的类型),运行时函数动态派发的实现原理,第二部分就是 enum / struct / class / tupe 四种元类型各自的实现。

通篇看完感觉其实 Mirror 的实现非常直截了当,因为 Swift 的泛型功能要求它必须有足够丰富完整的 Metadata,才能在运行时更好的描述泛型实例的存在,完成函数派发,属性存取和类型转换的工作。

在这么一个背景下,Mirror 的实现基本就是从已有 Metadata 里获取类型数据,然后展示出来,或者是通过 Metadata 定位成员变量的相对位置,然后进行存取操作。

🐢 AR Face Tracking Tutorial for iOS: Getting Started

Ray Wenderlich 的又发新教程了。这次是教你如何用 TrueDepth Camera 来做 AR 面部追踪。

和往常一样,他家教程类文章会有非常详细的步骤和截图,带你一步一步的操作,非常适合对文章中涉及的知识领域不是很熟悉的同学们。

另外这篇文章也是免费教程的一部分,所以并不需要进行任何付费。

🐎 Why #if DEBUG Conditional Should Be Avoided in Library Code

文章作者分享了一次自己使用 Carthage 导入自己的库时遇到的坑,来说明了为什么在 SDK 的开发中尽量避免条件编译指令,因为你不知道使用你 SDK 的人的编译环境会有怎样的变数,文章很短,算是一次有趣的小分享。

🐢 [译] Metal 渲染管线教程

Apple 在 2018 的 WWDC 上正式宣布 OpenGL ES 标记为 deprecated,推荐使用 Metal 来做 3D 渲染,很有勇气。在细致的了解 Metal 后,就能发现苹果的勇气不是没有原因的,Metal 几乎最大限度的利用了 iOS 的硬件特性来提升性能,是 iOS 的首要选择。

本篇文章的文风很像很多经典的 OpenGL 教程,从渲染的概念,流程讲起,并一步步教你如何画出第一个三维的物体,强烈推荐有兴趣的同学仔细阅读。

推荐人:史前图腾

🐢 beeshell:开源的 React Native 组件库

文章介绍了美团所开发的基于 React Native 的组件库,提供了一系列基础 UI 组件,包括按钮、弹窗、表单、输入框等等,覆盖了 iOS 和安卓两端,并分析了一些设计理念。

🐕 从 FE 视角看大前端

大前端是现在比较流行的话题与方向,相信也有很多移动端的同学对这个方向有很浓厚的兴趣,而这篇文章的目标阅读群体刚好适合对前端 FE 感兴趣的 Native 开发同学, 聚焦在 PC 和 H5 浏览器层面。可以让你对前端开发有全景方式的了解, 以及引发大家的兴趣。很多 native 开发可能苦于前端众多的名词,众多的框架不知从何下手,这篇文章刚好适合你。

🐕 UIField​Behavior

文章以悬浮框为例,讲解了 iOS 物理引擎 UIKit Dynamics 中的 UIField​Behavior 的相关内容。首先描述了 Field Behaviors 是什么,接着讲解了 Spring Fields 怎么用,最后结合 Behaviors 的一些特性实现了一个适用于开发调试的悬浮框。

推荐人:WXGBridgeQ

🐕 巧妙实现 debugOnly 函数

作者在学习 Vapor 的源码看到一段不需要宏定义的 debugOnly 函数实现。代码如下:

func debugOnly(_ body: () -> Void) {
    assert({ body(); return true }())
}
复制代码

对于大部分项目来说,这个功能看似没有什么用处,但是仔细考虑一下,对于一个可以被任何一个项目依赖的 SDK 来说,这个 debugOnly 实现可以说是很完美了。

🐢 Bloom Filters and Swift 4.2

文中实现了 Bloom Filter,并使用了 Swift 4.2 中 Hasher 新特性来优化代码。

🐕 驴妈妈客户端频道页模块化设计思路

对于做偏运营类的应用开发,有一项很重要的技术需求就是能够做到对应用内容进行实时更新,而且是越灵活越好。本文就详细介绍了驴妈妈客户端团队在 SOLID 原则的指导下,重点围绕面向接口、数据驱动、模块隔离这三个点设计了适合自身业务场景的模块化框架。它既满足了缩短内容上线周期的需求,也为创建一个统一规范的业务组件库提供了思路和方向,同时框架的整体设计也是非常值得参考和学习的。

🐕 INSIDE AUDIOKIT SYNTH ONE: A BRIEF TOUR FOR DEVELOPERS

本文的大部分内容是作者在对 Synth One 应用添加 AUv3 扩展时的开发笔记。后来他为了分享自己捣鼓开源项目 AudioKitSynth One 的经历,就写了这篇文章,也希望借此帮助那些想要做类似 iOS 音乐合成器开发的人能够快速了解框架内部的设计。

🐎 代码评审的不可能三角

Code Review 是保证代码质量的重要手段之一,但许多研发团队中它常常由于各种原因并未得到真正的落地。为什么会这样呢?本文作者用一个非常简单的观点理解了这个现象,并据此给出一点优化的想法。希望本文的想法对同样被评审困扰的同学有帮助 :)

🐕 利用函数组合提升代码可维护性

在平时的开发中,我们可能会遇到一些场景,开发起来,代码写的很繁琐,例如文中作者举的例子:

process1(_ param: String) -> String
process2(_ param: String) -> String
process3(_ param: String) -> String
process4(_ param: String) -> String
复制代码

这种情况,如果直接采用函数式编程,可读性又不会太好。而为了重构让代码变得具有更好的可维护性,作者利用函数的组合来解决这个问题。除了上面函数签名致的例子,作者还提到了函数签名不一致,以及异步操作这两种情况的解决方案。

推荐人:matthew

🐎 MMKV中的简单LRU缓存(LRUCache)

本文简明地分析了开源库 MMKV 中 LRUCache 的实现。MMKV 中的 LRUCache 实现简单易懂,文章中的源代码也加上了注释,大家看一遍这篇文章就能明白具体的实现原理。

🐕 Migrating to Unified Logging, Swift Edition

本文介绍了一种更优雅的打log方式,使得开发人员不要再混乱地管理log代码

  1. 正确对待 OSLog,他本来就帮你分了 log 的等级
  2. Console.app 能够帮你更好地查看客户端的 log (如果你用的是 os_log 的话)
  3. 尽量使用 os_log
  4. 更多应该注意的细节

代码

andreamazz/SubtleVolume

SubtleVolume 是一个音量条组件,也支持在 iPhone X(S/R) 的刘海上做文章,如果你的播放器需要一个自定义音量条,不妨看看它。

设计

一定要会的Sketch设计方法和工作流

泊学关于 Sketch 入门相关的视频课程。

内推

关注我们

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

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

本期编辑

@没故事的卓同学@四娘@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驴@小非86

说明

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

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

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