老司机 iOS 周报,只为你呈现有价值的信息。
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
新变化不多,但最新的 iOS 12 「剧透」了今年可能发布的新硬件 | 具透
在 iOS 12 的第四个公开测试版中,苹果可透露了不少新硬件的信息:比如支持双卡双待的 iPhone;支持 Face ID 的 iPad;支持无线充电的 AirPods 充电盒;以及 HomePod 将支持打电话。其他软件方面的改动也不少,具体还是仔细看看原文。当然,如果你问我自己能否瞧瞧固件里的秘密,IDA 和 Hopper 了解一下。
文章
? Swift 4 弱引用实现
原文作者 Mike Ash,是知名博客 Friday Q&A 作者,现在是 Swift 团队一员。
2015 年的时候 Mike Ash 就已经介绍过 Swift 弱引用的实现了,这次 Swift 4.0 的对象内存布局做了一些调整,加入了 side table 去存放额外的对象信息,改变了弱引用的实现。文章还对 Objective-C 和 Swift 4 之前的旧实现做了对比分析。
? 如何在几十个 Repo 中游刃有余
本文对“研发效率”这个话题进行了非常深入的讨论,平时我们为了提升研发效率,会开发一些脚手架,工程模板等,但大多数时候都不会有量化指标去衡量,秉承“不谈目标的优化都是耍流氓”的原则,作者提出了一系列衡量项目迭代和发布时间的指标,来帮助衡量优化的目标。除此之外,还探讨了在复杂系统开发中保持高效开发的经验,很有价值。专注研发效能、工程架构的同学可以重点参考。
另外,作者陈天也是我很喜欢的程序员,经常会发表一些质量很高的技术文章,推荐大家关注他的公众号。
? MessageThrottle Safety
MessageThrottle 是作者玉令天下开发的 Objective-C 节流限频组件,其原理基于 Hook 消息转发流程,在运行时应用了一套节流限频的规则。本文介绍了新版本中对于 hook 流程、多线程操作、规则管理的安全性实现细节。 本文是关于 MessageThrottle 的第四篇文章。前三篇如下:
- Objective-C Message Throttle and Debounce
- Associated Object 与 Dealloc
- MessageThrottle Performance Benchmark and Optimization
? Structuring Swift code
随着时间的流逝,几乎所有的 app 和框架都会变得更大、更复杂,所以维持一个稳定的、一致的架构就变得非常关键。这篇文章介绍了提升 Swift 项目架构的几个小技巧,包括"三个原则"(如果有三个相同类型的类、文件夹或文件,就将它们组合起来)、根据功能来组织架构的原则以及"侦查原则"(在改动代码库的时候时刻让文件处于更容易找到的位置)。
? Flutter 的编译模式
Flutter 在 Google I/O 之后也算是火了一把,虽然之后能不能继续火下去也还是个未知,但是能多学习了解新东西总是有益无害。
蚂蚁金服的 stephenwzl 在自己的微信公众号写了一系列关于 Flutter 基础知识的文章,对于还在学习 Flutter 的人来说,比较有学习价值。
本文介绍了 Flutter 编译中的一些基本概念,阐释了基本的编译过程和不同平台上的区别。除了这篇文章,还可以参考学习一下他的其他文章。
? Migrating an Objective-C class to Swift: a piecemeal approach
随着 Swift 越来越普及,很多人都会面临如何将 Swift 与已有的 OC 代码相结合的问题。对于一个已有的 OC 类,如果我们无法马上把它完全用 Swift 来重写,但是又想用 Swift 为它扩展功能,特别是添加不兼容于 OC 的存储属性(如带泛型的枚举类型),我们是无法把这个属性直接加到 OC 类定义里的。作者巧妙地做了一层简单的封装,轻松绕过了这个限制,相信对大家处理类似问题会有启发。
? Never
Never 是 Swift 标准库中一个很特别的类型。在 SE-0102 中提出用 Never 去代替 @noreturn。在文中 Mattt 先介绍了 Never 这个特殊的类型是什么,紧接着以 Result<Value, Error: Swift.Error>
为例介绍了一个 Never 用于解决不可能发生的场景的实际应用的妙处。最后在文章的末尾,Mattt 还写了一些对未来的 Swift 中 Never 可以以一个 Bottom Type 的角色去实现更多的功能的期待。
? JSON Web Token 入门教程
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文主要是介绍它的原理和用法。
对于用户认证来说,用户的 session 数据如果存在服务端,那对于服务器集群,或者是跨域的服务导向架构。session 数据的共享,会是一个比较麻烦的问题。 JWT 方案则是将不可篡改的 session 数据储存到客户端,每次请求再将 session 数据发回给服务端进行用户认证。不同服务器之间,不再需要进行 session 数据共享,比较容易实现扩展。
? Scrollable UIStackView
对 UIScrollView 进行自动布局(Auto Layout)时需要设置两套约束,分别是 frame 和 content。设置 frame 很简单,跟普通的 view 操作一样;但是 content 就比较特殊了,自动布局引擎会通过子视图的大小自动调整 content,所以加到 UIScrollView 里的视图必须是已经指定大小或者能自动计算大小(intrinsic content size)的。
本文主要解释了把 UIStackView 加到 UIScrollView 进行自动布局时出现的一些棘手的问题,并实现了一个可滚动的高度自适应的 StackView。相信大家看完后,对如何使用自动布局处理滚动视图会有一个比较清晰的认识。
代码
PerfectAccelerators - 加速 Perfect Server Side Swift 开发
上期我们推荐了篇文章介绍 Perfect 开发体验,这次,给大家推荐一组 Perfect 封装库,可以帮助 Perfect 加速 Server Side Swift 开发。
音视频
ADDC 2018
ADDC 是 2018 年 7 月 4 日至 6 日在西班牙巴塞罗那举办的 App 设计师和开发者大会,这个大会的目的是给设计师和开发者提供一个开放的、包容的、合作的空间,让他们在一起碰撞想法,找到新的合作方式。ADDC 请到的嘉宾都是移动 app 领域的顶级开发者和设计师,这个 YouTube 频道收录了他们精彩的、具有启发性的演讲。
内推
北京-拉勾网招聘 iOS 工程师
拉勾团队目前需要一枚 iOS 大牛,负责公司核心产品功能的开发和维护。
北京-蚂蚁金服 招iOS/安卓/前端开发
蚂蚁金服招聘,负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。虽然招聘链接只给了 iOS 的 JD,但前端/安卓/iOS 都要,要求相近。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱) 或这微博私信 @折腾范儿_味精 了解情况。
编辑内推
-
上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 @JasonYuh。
-
杭州/广州/深圳 奇志科技招聘 iOS、前端:奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感谢可以微博上私信 @没故事的卓同学 了解。
-
深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目:如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~
-
字节跳动北京 iOS 团队持续招人中:简历可以发送到邮箱 raozhizhen@bytedance.com,或者添加我(@AidenRao)的微信 jingmu1994 了解更多公司及岗位信息。
关注我们
我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。
同时也支持了 RSS 订阅:github.com/SwiftOldDri… 。
本期编辑
@没故事的卓同学,@四娘,@享耳先森,@Damonwong,@折腾范儿_味精,@张嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋,tom510230,anotheren,水水,looping,@JasonYuh,@老老老老老老老驴
说明
? 表示需翻墙,? 表示编辑推荐
预计阅读时间:? 很快就能读完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)