老司机 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 离我们越来越近了,了解一下最近的进展吧
- 二进制不向下兼容,容易理解,Swift 新版本就没有向下兼容过
- 必须强制迁移 Swift3.0 的代码,不然你只能使用 Swift4.2 来编译了
- 现在提供了 Swift5.0 的尝鲜版
- 预计2018年11月16日对于 Swift5.0 是一个很关键的时间结点(真的吗?)
- 希望你们会喜欢 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 开发可能苦于前端众多的名词,众多的框架不知从何下手,这篇文章刚好适合你。
? UIFieldBehavior
文章以悬浮框为例,讲解了 iOS 物理引擎 UIKit Dynamics 中的 UIFieldBehavior 的相关内容。首先描述了 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 扩展时的开发笔记。后来他为了分享自己捣鼓开源项目 AudioKit 和 Synth 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代码
- 正确对待 OSLog,他本来就帮你分了 log 的等级
- Console.app 能够帮你更好地查看客户端的 log (如果你用的是 os_log 的话)
- 尽量使用 os_log
- 更多应该注意的细节
代码
andreamazz/SubtleVolume
SubtleVolume 是一个音量条组件,也支持在 iPhone X(S/R) 的刘海上做文章,如果你的播放器需要一个自定义音量条,不妨看看它。
设计
一定要会的Sketch设计方法和工作流
泊学关于 Sketch 入门相关的视频课程。
内推
-
北京-百度网盘 持续招 iOS 开发:社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 @小非86 聊聊~
-
北京-蚂蚁金服 招iOS/安卓/前端开发:负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 @折腾范儿_味精 了解情况。
-
上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 @JasonYuh。
-
杭州奇志科技招聘 iOS、前端:奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 @没故事的卓同学 了解。
-
深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目:如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~
-
北京字节跳动 iOS 团队持续招人中:简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我(@AidenRao)的微信 jingmu1994 了解更多公司及岗位信息。
-
北京百度教育事业部招 iOS 开发:百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。
关注我们
我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。
同时也支持了 RSS 订阅:github.com/SwiftOldDri… 。
本期编辑
@没故事的卓同学,@四娘,@享耳先森,@Damonwong,@折腾范儿_味精,@张嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋,kyo,tom510230,anotheren,水水,looping,@JasonYuh,@老老老老老老老驴,@小非86
说明
? 表示需翻墙,? 表示编辑推荐
预计阅读时间:? 很快就能读完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)