老司机 iOS 周报 #65 | 2019-04-29

3,947 阅读8分钟

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

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

新闻

『基于多重替换方式的 iOS 代码混淆方案』- 勘误

在 65 期,我们收录了『基于多重替换方式的 iOS 代码混淆方案』一文,后经读者反馈,我们发现这篇文章的内容存在严重的抄袭迹象。文中涉及到的混淆方案抄袭自 @kaichcodeobscure。目前该文章的在知乎和掘金上已经被删除,周报也在第一时间删掉了有争议的推荐内容。对此次事件,我们对 @kaich 和广大读者表示抱歉,同时也感谢各位读者的监督和反馈。

另外,在收到反馈之后,我们小挖了一下那篇抄袭文的作者,发现此人是惯犯,洗稿专业户。他的 GitHub(RobinChao)和博客(Technical.io),真的是仿品聚集地。

WWDC 2019 for developers: Siri, Marzipan and AR improvements, more

距离今年的 WWDC 已经只有将近一个月的时间了,众所周知,WWDC 向来能带给行业和开发者带来全新的围绕用户体验新技术,本篇文章给我们介绍了本次 WWDC 会发布的新的 API 以及特性,主要有:

  1. 新的 Siri intents
  2. Marzipan 的优化(Marzipan 就是让 macOS App 也能用上 UIKit 的技术)
  3. Swift-only 的 AR 框架
  4. 震动引擎,NFC 在以前的基础上提供了更多的功能
  5. CoreML 支持动态训练以及音频的分析

新手推荐

How to make Auto Layout more convenient in iOS

@邦Ben:该文从 Frame 布局,到 Autoresizing 讲到了 AutoLayout,并且介绍了如何简单的进行封装 AutoLayout,以提高易用性。毕竟众所周知,原生的 AutoLayout 异常难用,在 OC 下,Masonry 的出现简直是拯救了世界。在 Swift 下,各种布局系统百花齐放。同时眼光不妨放到 React Native 和 Flutter 上,声明式布局非常值得学习。

文章

🐕 RxSwift & MVVM - How to use RxTests to test your ViewModel

@Damonwong:之前我问过好多人这样一个问题,你觉得 Rx 框架到底解决了一个什么样的问题?虽然答案都不太一样,但是引入 Rx 框架,便于封装 ViewModel,然后编写单元测试提高应用稳定性是大部分人比较认可的一点。

所以推荐大家阅读一下作者写了三篇关于 RxSwift & MVVM 的文章:

🐎 Conditional Compilation Part 1 Part 2 Part 3

@四娘:之前我们在 29 期周报里介绍过这篇文章的第一篇:

本文讲述了 Swift 中方的条件编译。当然首先是传统的方法 arch(),作者对各个参数都做了详细的介绍。不过随着 Swift 4.1 的到来,你更应该了解一下方便好用的 targetEnvironment()(SE-0190)。其次是使用配置文件(.xcconfig),这个方式其实被 CocoaPods 大量使用。作者也用示例做出了详细的介绍,同学们不妨也在自己的工程中试一试。

后面陆续写了 Part 2 和 Part 3,主要是介绍了跨平台代码库编译选项的一些控制方式,对这方面有疑虑的同学可以看一看

🐕 Flutter 实时视频渲染

@CrazyCoderShi:Flutter 如火如荼的火了一段时间了,但鲜少有关于音视频方面的文章,本文是声网 Agora 的高级架构师张乾泽在 RTC Dev Meetup 上的分享,主要介绍 Agora 在 Flutter 实时音视频开发方面的实践经验,整个分享分三部分:

  • 基于 Texture Widget 实现思路分析
  • 基于 PlatformView 实现思路分析
  • 两种方案的性能对比

🐎 对职业发展的一些想法

职业发展是每一个职场同学都会去思考的很重要的问题,我们也常常说有时候选择比努力更重要,除了个别的运气成分外,我们能过左右的就是如何去做选择。本文是 limboy 对职业发展的一些看法,从稀缺度剩余市场空间这样两个角度去谈,结合生动的坐标图,让人一看就很明了。

🐕 How to run a single test in Xcode

@老峰:本文作者归纳总结了在 Xcode 中运行单元测试的一些小 tips:

  • 通过 gutter (左边列)
  • 通过 shortcut (快捷键 ^ ⌥ ⌘ U)
  • 通过 scheme
  • 通过 terminal
  • 通过开源测试库如:Quick

🐕 iOS 中的 Promise

@四娘:当你需要连续地执行多个异步过程时,总会无可避免的出现地狱回调,Promise 是一个不错的解决方案,这篇文章前半部分主要讲了 Promise 具体的实现,后面介绍了一些实用的 API,感兴趣的朋友可以看一下。

🐎 Preventing Infinite Loops in Swift Property Observers

@张嘉夫:Swift 的属性观察器 (即 willSetdidSet hook 函数)非常实用,可以用于验证、通知和调用 log 方法等等,适用于结构体、类和枚举。但在使用强大的属性观察器时,要避免搬起石头砸了自己的脚,这篇文章会为你介绍如何避免在 Swift 属性观察器中创建无限循环。

🐎 如何画出一张合格的技术架构图?

画架构图是架构师的第一门课,本文介绍了架构图的各种画法和具体案例,希望让大家在架构图方面的理念和经验得到提升

架构图分类

  1. 场景视图:一般就是我们理解的用例图
  2. 逻辑视图:一般是组件图和类图
  3. 物理视图:一般是部署图
  4. 处理流程视图:一般是时序图和流程图
  5. 开发视图:一般是包图

好的架构图:好的架构图是不需要解释的,它应该是自描述的,并且要具备一致性和足够的准确性,能够与代码相呼应

最后推荐 C4官网,有各种画图的模板可以参考

工具

MTHawkeye

@looping:MTHawkeye 是美图 iOS 团队开源的调试和性能优化辅助工具集,旨在帮助 iOS 开发者提升开发效率、优化性能体验。目前已经包含对内存、CPU、电量、网络等的使用监控。由于该工具模块采用了可扩展的插件式设计,所以我们也可以根据自己的需求定制合适的开发调试插件。详细介绍可以参考这篇文章 MTHawkeye:美图开源的iOS调试辅助、性能优化工具集

代码

Swiftshield

@oldonkey:这是一套代码混淆工具,作用是加密工程的函数和类名,来免疫一些逆向工程。加密的原理很简单,就是把所有函数和类名都替换成一段新的字符串。此工具可以加密,也可以解密,以方便对 Log 进行 Debug。

开源库

IkigaJSON

IkigaJSON 是一个非常快的 JSON 解析器,它的解析速度大概是是 Foundation 中对应组件的 4 倍。它也提供了 SwiftNIO 的支持(同时也依赖 SwiftNIO),你可以直接从 ByteBuffer 对象初始化需要的 JSON 。

音视频

ggtalk | 聊聊我们的编程启蒙经历

@J_Knight_:本期 ggtalk 邀请的嘉宾是李亮老师和莲叔。围绕本期的主题,二位嘉宾和主持人梁杰都分享了各自的编程启蒙经历。

此外,还分享了对“中年危机”的看法以及关于小孩应该如何入门编程的讨论。

内推

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

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

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

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

关注我们

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

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

说明

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

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