欢迎 @方秋枋 https://weibo.com/100mango 加入周报的编辑的队伍.
你也可以为这个项目出一份力, 如果发现有价值的信息, 文章, 工具等可以到 Issues https://github.com/SwiftOldDriver/iOS-Weekly/issues 里提给我们, 我们会尽快处理. 记得写上推荐的理由哦. 有建议和意见也欢迎到 Issues https://github.com/SwiftOldDriver/iOS-Weekly/issues 提出.
新闻
Swift for TensorFlow 正式发布 https://github.com/tensorflow/swift
TensorFlow 社区在 TensorFlow Dev Summit 2018 上宣布将开源 Swift for TensorFlow 项目, 现在终于正式发布了, 这里是源码 https://github.com/google/swift/tree/tensorflow 及示例 Models https://github.com/tensorflow/swift-models .
文章
iOS 新闻类 App 内容页技术探索 https://dequan1331.github.io
文章针对新闻类 App 内容页的技术实现进行了探索和分析. 并将成果封装成三个框架: https://github.com/dequan1331/HybridPageKit , https://github.com/dequan1331/ReusableNestingScrollview 以及 https://github.com/dequan1331/WKwebViewExtension .
文章不仅从技术方案选择, 组件化架构, 加载速度优化给我们高屋建瓴地展示了新闻类的 Hybrid 技术应该如何构建, 更重要地是开启了我们的脑洞: Hybrid 应该怎么玩才有意思. 不是简单地嵌入 webview, 使用一下 JSBridge 就是 Hybrid 了. 而是取长补短, 让 WebView 和 Native 技术携手构造更优秀的应用体验, 创造属于自己的小程序框架和能力.
Code Review Best Practices https://medium.com/@palantir/code-review-best-practices-19e02780015f
非常细致的介绍了 code review 的整个流程.
为什么需要, 是什么, 什么时候需要 code review
在 code review 前需要做哪些准备工作
如何执行 code review
code review 的一些示例
Securing iOS Certificates using Modern Cryptography https://medium.com/xcblog/secure-ios-certificates-using-modern-cryptography-3441bf8661a4
文章的主题为使用现代加密技术保护 iOS 证书 (certificates). 我们平时测试, 提交应用到 AppStore 都需要用到苹果给我们的开发证书. 阅读本文, 我们可以学习到如何通过 openSSL 对 iOS 开发证书进行加密.
Design Patterns by Tutorials: MVVM https://www.raywenderlich.com/192471/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 https://medium.com/developermind/blurring-the-lines-between-mvvm-and-viper-dcb3dc9815ac
VIPER 是又一个移动开发中流行的设计模式, 初看 VIPER 中各个模块的分工, 总会觉得和 MVVM 其实是有几分神似. 这篇文章通过仔细分析 MVVM 和 VIPER 中各个组件的责任划分, 认为 MVVM 本质就是只有 V I 和 E 的 VIPER. 当业务变得复杂时, VIPER 可以衍生出 Presenter 和 Router 来保证职责划分, 所以一个动态调整的 VIPER 模式相比简单的 MVVM 应该是一个更优的实践.
本文讨论内容有趣, 但其思路和论证方法, 都值得借鉴.
Why you should not name your @IBActions didTapButton http://blog.cocoafrog.de/2018/04/12/How-to-name-IBActions.html
我们有时会在代码中看到 @IBAction 方法被命名为 didTapCancelButton,didTapSaveButton 或是 didHitSend,cancelButtonTapped 等类型的名称. 但我认为这样是错误的, 首先因为 Target-Action 是命令模式而不是委托模式, 应该命名为 undo,deleteBackward,lowercaseWord 或
scrollToEndOfDocument
这样的名字. 其次我们在编译时并不知道 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 https://www.raywenderlich.com/180180/keyboard-extensions
自定义键盘扩展的入门教程, 从 0 到 1 的讲解如何创建一个摩尔斯电码键盘, 包括自定义键盘的界面, 自适应键盘配色方案, 自动纠正和建议, 请求权限等内容.
A Better MVC https://davedelong.com/blog/2017/11/06/a-better-mvc-part-1-the-problems/
很多 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 https://www.youtube.com/watch?v=YWVzCd5FYbs&index=20&list=PLLcE3DL3f5BzR14FYTO9w0l5REVVSDNB4&t=0s
iOS App 的加固保护原理 http://www.cnblogs.com/163yun/p/8867975.html
出自网易杭研的一篇对 iOS App 加固保护原理深度分析的好文. 文中从如何对 App 破解出发, 从以下 4 个大点阐述了 App 的加固原理:
字符串混淆
类名, 方法名混淆
程序结构混淆加密
反调试, 反注入等一些主动保护策略
Playground driven development in Swift https://medium.com/flawless-app-stories/playground-driven-development-in-swift-cf167489fe7b
文章详细描述了如何去构建一个基于 Playground 的 App 开发环境, 对于经常要开发 UI 界面的开发者来说, 使用作者介绍的这一套流程, 可以大大提高自己的开发效率.
Codable vs. ObjectMapper https://medium.com/bbc-design-engineering/codable-vs-objectmapper-af5fe8e8efd5
作者分析了 Codable 和 ObjectMapper 的区别, Codable 相对来说比较简单易用, 而 ObjectMapper 提供了更多高级功能, 例如数据转换, 数据验证, 可读性更强的错误信息等等. 并且作者也扩展了 Codable , 实现 ObjectMapper 的这几个主要的 feature, 让我想起了之前看过的另一个项目 https://github.com/Flight-School/AnyCodable . 想要扩展 Codable 但无从下手的同学可以考虑看看.
Inspect your app's Documents directory in the Files.app https://twitter.com/olebegemann/status/987346188591681536
小技巧, 如果我们在 Info.plist 中设置了
LSSupportsOpeningDocumentsInPlace=YES
和
UIFileSharingEnabled=YES
, 就能够从苹果官方的文件管理器 https://itunes.apple.com/cn/app/Files/id1232058109?mt=8 对 App 的 Documents 目录进行查看, 更多信息可参考 苹果官方文档 https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW13 .
网易 HubbleData 无埋点 SDK 在 iOS 端的设计与实现 https://neyoufan.github.io/2017/04/19/ios/网易HubbleData无埋点SDK在iOS端的设计与实现/
这是一篇非常值得一看的文章, 从代码埋点到可视化埋点再到无埋点, 层层递进. 更可贵的是, 详细介绍了如何利用 aop 的方式实现无埋点的整个思路, 和解决的一系列问题. 从思想到方法都有了.
Reimplementation of Implicitly Unwrapped Optionals https://swift.org/blog/iuo/
为了提升类型检查的一致性, Swift 的下个版本计划对
ImplicitlyUnwrappedOptional
类型相关的一些操作进行重新实现, 其实说到底所有的操作都是为了去掉
ImplicitlyUnwrappedOptional
类型, 这样可选值类型就剩 Optional<T>,! 则只是一个操作符而已, 不包含
ImplicitlyUnwrappedOptional
这个特殊类型的含义. 不过小编看了下所有的改动, 目测应该都是可以用代码迁移器搞定的, 大家不用特别担心下个版本需要做代码的大变动.
Swift, Plist and Two Smoking Scripts https://medium.com/rosberryapps/swift-plist-and-two-smoking-scripts-94bb54cbeded
有没有想过整个项目从前端到后端全部用 Swift 来开发? 甚至包括脚本? 本文介绍了怎样用 Swift 在十五分钟内开发一个能够帮助我们对项目设置进行检查的 Build Phase 脚本, 值得一看.
工具
What's New in Swift 终极版 https://www.whatsnewinswift.com
有人做了一个网站给 Swift, 详细介绍每个版本的更新内容, 你还可以选择具体的版本范围, 然后就能看到这中间更新了什么.
音视频
App Builders 2018 https://www.youtube.com/playlist?list=PLLcE3DL3f5BzR14FYTO9w0l5REVVSDNB4
App Builders Conference 是由来自欧洲各国的 Android 和 iOS 移动开发者一起举办的分享交流会. 本次大会在瑞士举行, 目前 YouTube 上已经收录有该大会的 26 个直播视频, 平均每个视频约 30 mins, 分享的内容从 Google AR 到 iOS 的 CoreML, 从 Swift 到 App 架构, 方方面面都有涉及.
其中本期周报中收录的A Better MVC一文也在该会上进行了分享.
来源: https://juejin.im/post/5ae9222351882567113affb9