老司机 iOS 周报 #17 | 2018-05-02

5,429 阅读7分钟

欢迎 @方秋枋 加入周报的编辑的队伍。

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

新闻

Swift for TensorFlow 正式发布

TensorFlow 社区在 TensorFlow Dev Summit 2018 上宣布将开源 Swift for TensorFlow 项目,现在终于正式发布了,这里是源码及示例 Models.

文章

🐢 🌟 iOS 新闻类 App 内容页技术探索

文章针对新闻类 App 内容页的技术实现进行了探索和分析。并将成果封装成三个框架:HybridPageKitReusableNestingScrollview 以及 WKWebViewExtension

文章不仅从技术方案选择,组件化架构,加载速度优化给我们高屋建瓴地展示了新闻类的 Hybrid 技术应该如何构建,更重要地是开启了我们的脑洞:Hybrid应该怎么玩才有意思。不是简单地嵌入webview,使用一下 JSBridge 就是 Hybrid 了。而是取长补短,让 WebView 和 Native 技术携手构造更优秀的应用体验,创造属于自己的小程序框架和能力。

🐢 🌟 🚧 Code Review Best Practices

非常细致的介绍了 code review 的整个流程。

  • 为什么需要,是什么,什么时候需要 code review
  • 在 code review 前需要做哪些准备工作
  • 如何执行 code review
  • code review 的一些示例

🐕 Securing iOS Certificates using Modern Cryptography

文章的主题为使用现代加密技术保护 iOS 证书(certificates)。我们平时测试,提交应用到AppStore 都需要用到苹果给我们的开发证书。阅读本文,我们可以学习到如何通过 openSSL 对 iOS 开发证书进行加密。

🐕 Design Patterns by Tutorials: MVVM

MVVM 作为解决 MVC(Massive View Controller) 最有效的解决方案,已经成为 iOS 程序员的必学模式之一。Ray 的这篇文章抛开传统设计模式教学那种枯燥的说教,而是先手把手的使用 MVVM 的方式来实现一个小 Demo,简单易懂。值得一提的是,这是很少的纯 MVVM 教程,不像大多数 MVVM 教程都喜欢打包讲一些 reactive 和 data binding 的东西,适合萌新选手。

🐕 Blurring the Lines Between MVVM and VIPER

VIPER 是又一个移动开发中流行的设计模式,初看 VIPER 中各个模块的分工,总会觉得和 MVVM 其实是有几分神似。这篇文章通过仔细分析 MVVM 和 VIPER 中各个组件的责任划分,认为 MVVM 本质就是只有 V I 和 E 的 VIPER。当业务变得复杂时,VIPER 可以衍生出 Presenter 和 Router 来保证职责划分,所以一个动态调整的 VIPER 模式相比简单的 MVVM 应该是一个更优的实践。

本文讨论内容有趣,但其思路和论证方法,都值得借鉴。

🐎 Why you should not name your @IBActions didTapButton

我们有时会在代码中看到 @IBAction 方法被命名为 didTapCancelButtondidTapSaveButton 或是 didHitSendcancelButtonTapped 等类型的名称。但我认为这样是错误的,首先因为 Target-Action 是命令模式而不是委托模式,应该命名为 undodeleteBackwardlowercaseWordscrollToEndOfDocument 这样的名字。其次我们在编译时并不知道 sender 具体是谁,所以我们不应在方法名称中指定 sender 的类型。

🐢 SceneKit 与 ARKit 专题

SceneKit 系列文章是作者在学习 Ray Wenderlich 的 SceneKit 教程《3D Apple Games by Tutorials》时做的学习笔记与心得体会,共有26篇文章,内容翔实。ARKit 专题文章还在持续更新中,包括制作类似 AR Stack 游戏的教程、对官方 AR Demo 的解读以及对 ARKit 1.5 新增的图片识别功能的介绍等等。

🐎 Custom Keyboard Extensions: Getting Started

自定义键盘扩展的入门教程,从 0 到 1 的讲解如何创建一个摩尔斯电码键盘,包括自定义键盘的界面,自适应键盘配色方案,自动纠正和建议,请求权限等内容。

🐢 A Better MVC

很多 iOS 开发不喜欢 MVC,因为 iOS 中的 MVC,往往违反封装原则,且容易形成臃肿的 ViewController。解决封装原则的问题,可以通过引入一个协调器(Coordinator),所有的子视图控制器或者视图,只负责显示,而如何显示它们,则委托给协调器去处理。 ViewController 臃肿的问题,需要知道,1 View Controller ≠ 1 screen of content, 可以将一个页面,分割成一个一个的子 ViewController,去负责页面元素的显示,而主 ViewController 只作为协调器存在。

该文作者近期参加了『App Builders 2018』,并也针对这个主题进行了分享,有兴趣的读者可以到 YouTube 上面观看这个分享视频——Dave DeLong - A Better MVC

🐕 iOS App 的加固保护原理

出自网易杭研的一篇对 iOS App 加固保护原理深度分析的好文。文中从如何对 App 破解出发,从以下 4 个大点阐述了 App 的加固原理:

  • 字符串混淆
  • 类名、方法名混淆
  • 程序结构混淆加密
  • 反调试、反注入等一些主动保护策略

🐢 🌟 🚧 Playground driven development in Swift

文章详细描述了如何去构建一个基于 Playground 的 App 开发环境,对于经常要开发 UI 界面的开发者来说,使用作者介绍的这一套流程,可以大大提高自己的开发效率。

🐎 Codable vs. ObjectMapper

作者分析了 Codable 和 ObjectMapper 的区别,Codable 相对来说比较简单易用,而 ObjectMapper 提供了更多高级功能,例如数据转换,数据验证,可读性更强的错误信息等等。并且作者也扩展了 Codable ,实现 ObjectMapper 的这几个主要的 feature,让我想起了之前看过的另一个项目 AnyCodable。想要扩展 Codable 但无从下手的同学可以考虑看看。

🐎 Inspect your app’s Documents directory in the Files.app

小技巧,如果我们在 Info.plist 中设置了 LSSupportsOpeningDocumentsInPlace=YESUIFileSharingEnabled=YES,就能够从苹果官方的文件管理器 Files 对 App 的 Documents 目录进行查看,更多信息可参考 苹果官方文档

🐕 网易HubbleData无埋点SDK在iOS端的设计与实现

这是一篇非常值得一看的文章,从代码埋点到可视化埋点再到无埋点,层层递进。更可贵的是,详细介绍了如何利用aop的方式实现无埋点的整个思路,和解决的一系列问题。从思想到方法都有了。

🐢 Reimplementation of Implicitly Unwrapped Optionals

为了提升类型检查的一致性,Swift 的下个版本计划对 ImplicitlyUnwrappedOptional 类型相关的一些操作进行重新实现,其实说到底所有的操作都是为了去掉 ImplicitlyUnwrappedOptional 类型,这样可选值类型就剩 Optional<T>! 则只是一个操作符而已,不包含 ImplicitlyUnwrappedOptional 这个特殊类型的含义。不过小编看了下所有的改动,目测应该都是可以用代码迁移器搞定的,大家不用特别担心下个版本需要做代码的大变动。

🐕 Swift, Plist and Two Smoking Scripts

有没有想过整个项目从前端到后端全部用 Swift 来开发?甚至包括脚本?本文介绍了怎样用 Swift 在十五分钟内开发一个能够帮助我们对项目设置进行检查的 Build Phase 脚本,值得一看。

工具

What's New in Swift 终极版

有人做了一个网站给 Swift,详细介绍每个版本的更新内容,你还可以选择具体的版本范围,然后就能看到这中间更新了什么。

音视频

🚧 App Builders 2018

App Builders Conference 是由来自欧洲各国的 Android 和 iOS 移动开发者一起举办的分享交流会。本次大会在瑞士举行,目前 YouTube 上已经收录有该大会的 26 个直播视频,平均每个视频约 30 mins,分享的内容从 Google AR 到 iOS 的 CoreML,从 Swift 到 App 架构,方方面面都有涉及。

其中本期周报中收录的『A Better MVC』一文也在该会上进行了分享。

关注我们

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

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

本期编辑

@没故事的卓同学@四娘@mmoaay@享耳先森@EyreFree@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@叶孤城@aaaron7@方秋枋

说明

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

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