Skip to content

Releases: SwiftOldDriver/iOS-Weekly

老司机 iOS 周报 #26 | 2018-07-09

22 Dec 09:48
Compare
Choose a tag to compare

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

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

新闻

MWeb 3.0 发布 | 首发半价销售,最后三天

MWeb 是一款专业的 Markdown 写作、记笔记、静态博客生成软件。对于长期和 Markdown 打交道的人来说是一款必不可少的利器。MWeb 3.0 在 MWeb 2.0 的图床上传、支持图表等优秀的功能之上带来了几个不错的新功能:

  • 全新的 UI
  • 快速笔记,随时随地快速记录笔记。
  • 快速搜索,搜索的功能有了一次全新的改动,而且还会持续不断的改进。
  • 增加了 Epub 导出功能

更多的改动说明,可以看MWeb 3 正式发布和 2.x 版处理说明及两者之间的功能对比

WiFi 联盟制定 WPA2 认证的升级版 WPA3,让 WIFI 变得更安全

2018年6月25日,Wi-FiAlliance® 推出 WPA3™ ,WPA3™ 是下一代 Wi-Fi 安全技术,向市场提供了最先进的安全协议。在 WPA2™ 的基础上,WPA3™ 专门为个人和企业网络 Wi-Fi 提供了额外功能,以简化 Wi-Fi 安全保障方法、实现更可靠的身份验证、为高度敏感的数据市场提高加密强度并保持关键任务型网络的弹性。
下一代iPhone说不定会支持WPA3™,有必要提前了解一下。中文参考:探索 Wi-Fi - 安全性

文章

🌟 知识小集 2018 上半年文章汇总

知识小集的内容一直以简单实用、覆盖范围广著称。内容大多是项目中实际问题的解决方案,小编建议大家多用用它的小程序,因为有查询功能,能让你更高效的解决项目中碰到的实际问题。

🐎 How Graphics Cards Work

近些年来,随着短视频、深度学习、挖矿等领域的兴起,GPU 的关注度日益提升。人们逐渐发现除了用来更好的跑游戏之外 GPU 还有很多的用途。这篇文章可谓是及时雨,介绍了 GPU 的前世今生以及 GPU 常见的架构以及如此设计的思想, 笔者看完后感觉以后凑热闹都凑得更有底气了。

除去介绍,本文还分析了 GPU 中常见的 bottleneck,以及内存显存数据同步性能的一些指标。在移动端做视频特效的同学应该都知道要避免频繁的在内存和显存中同步数据,相信看完本文后也能收获一些新的优化 sense。

🐢 Test Driven Development Tutorial for iOS: Getting Started

测试驱动开发(TDD)是一种流行的编写软件的方法,却被国内很多开发者或开发团队所忽视。我们项目也忽视了编写 Test,最近我们项目面临重构,就要求编写 Test,这是为什么呢?这篇文章开头解解释了原因。

  • TDD 提供了有关开发人员期望应用程序行为的文档,此文档保持最新,因为测试用例与代码一起更新。

  • 使用 TDD 可以带来更好的代码覆盖率。

  • TDD 非常适合配对编程,其中一个开发人员编写测试,另一个编写代码以通过测试,这可以带来更快的开发周期以及更强大的代码。

  • 使用 TDD 的开发人员在将来制作主要重构时更容易。

如果你还没实际使用过 TDD,可以跟着这个文章进行尝试,本文使用图 + 代码得形式编写了一个非常好的入门级教程。

🐕 🚧 ReactJS vs Angular5 vs Vue.js — What to choose in 2018?

这篇文章通过分析 Angular 5、ReactJS 和 Vue.js 的优势与劣势,帮你选择出最符合开发需求的前端框架。其中 Angular 适合构建高度可交互性的 web 应用,ReactJS 则适合构建数据定期变更的大型 web 应用,Vue.js 则适合构建高度适应性的用户界面和复杂的单页面应用。此外文章还列举出了采用各个框架的知名公司。

🐕 🚧 Parallel Programming with Swift: What could possibly go wrong?

文章讲述了使用 Swift 进行多线程操作,会产生的诸多问题。如非原子操作导致的数据在多个线程进行设置时,即不为线程 1 设置的值,也不为线程 2 设置的值。或者是因为 CPU 的乱序执行影响了不同线程的逻辑判断。你可以使用锁、内存屏障(Memory Barriers)、Dispatch Queues 来避免这些状况。使用锁的话又可能会产生死锁、活锁(Livelock)、线程饿死(Thread Starvation)等诸多问题。最后,你做了你能做的一切,但 Swift 编译器并不保证您的代码顺序得到保留,可能会导致您的同步机制出现其它的问题,也就是 Swift 本身并不是 100% 线程安全的。Apple 提供了一些调试并发操作的工具,如 Activity groups 和 Breadcrumbs,但它们暂时还不支持 Swift。

🐕 Operation and OperationQueue Tutorial in Swift

一个使用 Operation 和 OperationQueue 的教程,Operation & OperationQueue 相比 GCD 而言,可以在 Operation 之间添加依赖关系决定它们的执行顺序,并且可以取消暂停和恢复.作者利用这些特性,来改善一个图片列表页的体验。将图片的下载及加工添加到 OperationQueue 中。在列表页开始滑动时,暂停所有的 OperationQueue,停止滚动时,恢复 OperationQueue,并取消掉屏幕外 cell 的 Operation,启动屏幕内 cell 的 Operation,提升了列表页滑动的流畅度。

🐕 Ways we make the Slack iOS app accessible

Accessibility 这个话题由于种种原因,在国内的重视程度通常远远不及国外,可以说是国内应用普遍的短板。Slack 团队在 iOS app 里专门针对这一点做了许多优化,如对于眩晕症用户禁止动画/转场,视力不佳的用户提供字体缩放,听障用户支持 VoiceOver 等等手段来增强 app 的 accessibility,同时还增加了代码的可测试性,相信对于我们的日常工作会有一些启发。

🐕 FOUND: 7 lost principles of continuous delivery

持续交付在当前产品测试发布中扮演着很重要的角色。通过 Fastlane & Jenkins 的组合搭建持续集成和持续交付环境也深受广大 iOS 开发者喜爱。但我们在开发和部署这些持续交付环境时,往往容易因为一些错误的原因而做得过度了。该文总结了我们在实践持续交付时需要注意的七点原则。分别是:

  • 为软件发布创造一个可复用和可靠的步骤,例如持续集成(CI)技术;
  • 让一切能够做成自动化的自动化;
  • 所有东西都是基于版本控制的;
  • 将痛苦的流程提前,比如通过单元测试,组件测试等将测试流程提前;
  • 保持构建和测试的过程是简短的,敏捷开发和快速迭代;
  • 保证产品构建、部署、测试和发布流程中的每一个部分都对其参与人可见,每个人都是问题反馈者;
  • 完成就意味着已发布,在产品迭代中,我们常会把完成等同于开发完成,但在持续交付管理中,完成应该是指的已经面向客户发布阶段;

🐎 View Controller Lifecycle Explained: When to Use viewDidLayoutSubviews

我想每个人在学习 iOS 开发时都会去认真思考的一个问题便是 View Controller 的生命周期是什么样的。这篇文章通过几个例子,分别说明了 viewDidLoadviewDidAppear 以及 viewDidLayoutSubviews 三个回调方法的含义及其使用场景。

值得一提的是,文中提到的一个观点本人很是认可。作者主张通过细节去进一步理解框架,这和我们古人『知微见著』和『一叶知秋』的智慧不谋而合。

🐢 AutoLayout 中的线性规划 - Simplex 算法

从数学角度出发探究 AutoLayout 可能采用的高效算法。
熟悉 AutoLayout 的朋友应该知道,AutoLayout 的实现本质就是提供一个有解的多元一次方程,由系统去解出方程,用来确定 Layout 位置。当然,想要解开一个有大量未知数的方程,不同的算法会带来截然不同的结果。
而今年 WWDC 上苹果一再强调的 AutoLayout 性能的大幅提升,更是再次证明了算法的重要性。
作者从 Simplex 算法出发,提供了完整的解法过程,也提供了 Python 实现的样例代码,值得学习。

🐎 A look at UIView Animation Curves Part 1 Part 2 Part 3

文章用具体的动画,向你展现了各种不同的动画曲线的效果差异。
很多时候,我们通过看各种曲线的名字并不能很好的理解在实际中,具体动画效果的差异。而文章中提供了具体的动画曲线来解释每种曲线的效果,同时也提供了简单的自定义 Bezier 曲线的效果。
在此提供一个第三方网站,可以更好的让你理解控制点对 Bezier 曲线效果的影响。
当然,如果有机会的话,自己亲自动手实践能进一步加深对各种曲线效果的理解。

🐎 🚧 15 Years Ago, I Went Indie and Didn’t Know It.

Ulysses 15 周年之际,Ulysses 创始人 Max Seelemann 回顾了他与 Ulysses 的渊源。15 年前,他 16 岁还没上大学,和朋友用业余时间一起打造了 Ulysses。2011 年他大学毕业的时候,将 Ulysses 放到了 Mac App Store 上,出人意料的是居然大受欢迎,并且第一次给他们带来了一笔收入。收入够他们两人花三四个月,于是他们抱着热忱开始全职开发 Ulysses,到现在团队已经有 12 人。

行文间能感受到作者作为一个开发者的纯粹,所以最后他发出标题这样的感慨:15 年前,我开始独立开发,然而我并不知道最后它能发展成什么样样。作者从来没有制定一个远大的目标,只是抱着对开发的热忱一步一步走到了今天。

🐕 iOS代码调试: Safari / Chrome 调试 WebView

随着越来越多的应用使用混合架构,开发者和 WebView 打交道总是免不了的。本文介绍了通过 Safari / Chrome 来调试模拟器/真机中 WebView 的方法。即使对于 iOS 原生开发者,这些技能也是用得到的,推荐阅读。

🐕 iOS代码调试: 启动参数和环境变量

对于 Xcode 的环境变量,大家最熟悉的一定是刚用 Xcode 8.0 时,使用 OS_ACTIVITY_MODE = disable 来屏蔽一些多余的控制台日志。除此以外,估计大多数人都没有动过 Edit Scheme 的念头。本文介绍了 Edit Scheme 中的 Argument/Options 模块。通过这两个模块,我们可以在启动应用时定义一些额外参数,从而实现特定场景的调试。例如覆盖 UserDefaults 中的默认值、变更语言等,赶紧试一试吧。

🐢 React Native: A retrospective from the mobile-engineering team at Udacity

又一家公司 Udacity 宣布放弃使用 React Native 。尽管 Udacity 的团队中大部分人都对 RN 的开发很满意,但因为他们用 RN 开发的业务功能模块被下线了,所以 App 内移除了 RN 相关的功能代码。他们也把他们的经验整理汇总希望对其他人有帮助,至于未来还会不会有新的业务模块重新用RN进行开发,团队内部也有不同的看法,iOS 团队表示如果有机会还是愿意在用 RN 试一试,但 Android 团队持保留意见。

本文从产品设计角度,代码整合角度,RN 自身角度,团队协作角度,分别阐述了 Udacity 团队的一些看法与经验。

  • 产品设计角度:从 UI/UX 的设计越来越无法做到两个平台一样的设计统一,总会根据各自平台的各种特性与用户群体有不同的交互设计,导致他们其实并没怎么用 RN 来实现跨平台的一次性开发工作,尤其是安卓设备太多的碎片化差异化的独有硬件功能,基本上用了 RN,还是在两个平台各写各的功能。
  • 代码整合角度:安卓平台与 iOS 平台都在是用各自的包管理工具。当把 RN 整合进现有仓库之中后,他们的持续集成系统被迫要根据 RN 的引入进行很大的调整,这对他们造成了很大的负担,并且现在也解决的不是很顺畅。
  • RN 自身角度:RN 的文档缺失,导航问题,页面性能问题等,在 RN 相关的社区其实都有很多的讨论,不仅如此,每当 Google IO 或者 WWDC 发布新功能的时候,RN 组件跟进慢也是一个问题。
  • 团队协作的角度:由于他们本身产品设计已经在针对安卓和 iOS 有着不同的功能,当 JS 快速迭代的时候,经常会面临一个问题,当一个平台快速开发或修复一个功能很容易引起另一个平台的问题。使得以前修 bug 只需要懂一个平台就好了,现在修 bug 需要同时考虑 js Android iOS 三个平台,无形之中增加了沟通成本以及测试成本。

🐎 厌倦了 Core ML?试试 Google ML

今年 Google I/O 上,发布了一款叫做 Google ML 的跨平台机器学习框架,最大的特点就是开箱即用,可以直接使用 Google 已经训练好的模型,包括表情识别,文字识别以及图片标识等等,感兴趣的同学可以看看这篇入门教学,写出属于你的 Not Hotdog 应用😏。

🐎 程序员应不应该背锅?

Peak 大神在本文分享了 Fackbook 对于线上事故的 Review 流程和处理思路,对比了国内和国外团队对于事故追责的不同做法,Peak 大神本人倾向于赞同对事不对人的做法,建议应该查清流程上的漏洞而不是定性人为疏忽。窃认为国内的制度本质上是保持团队的紧张感,对于工程化程度不高的团队而言是一个很好的管理工具,能够保证整个管理体系不会腐烂掉,属于通往高效能团队的起始阶段,我们很难要求在国内的大环境下做到一步登天。

🐢 REST vs. GraphQL: A Critical Review

当前 REST 风格的 API 架构方式已经成了主流解决方案了,它是对于资源( Resource )的模型化而非步骤( Procedure )。因此它可以很好地将前端和后端的工作进行解耦,只需要设计好 API 以后就可以分别进行开发。

GraphQL 是近来比较热门的一个技术话题,相比 REST 和 RPC ,它汲取了两者的优点,即不面向资源,也不面向过程,而是面向数据查询( ask for exactly what you want )。同时 GraphQL 本身需要使用强类型的 Schema 来对数据模型进行定义,因此相比 REST 它的约束性更强,所以 GraphQL 也有 REST 2.0 的别称

本文分别比较了 REST 和 GraphQL 两种技术方案的优缺点和适用场景,对于想要对新项目制订技术方案的读者有很好的参考价值。

参考资料
如何给老婆解释什么是 RESTful
RPC vs REST vs GraphQL
安息吧 REST API,GraphQL 长存
30分钟理解GraphQL核心概念

🐎 A fresh way to build native apps for Apple platforms with Swift

现如今,各个 App 普遍集成了越来越多的功能,开发人员需要为此付出大量的精力在诸如应用内购买、系统权限授权、universal links、Siri 支持等等。一直以来我们可能都期待一个简单的框架能够让我们快速实现这些基础功能,而 Flint 恰好就是可以让我们轻松应对这一切的框架。Flint 可以使我们更加专注于产品特性。它采用 FDD(Feature-Driven Development,即特性驱动开发)的开发模式,在开发中我们可以围绕 Feature 和 Action 两个部分进行编程,而其余的部分 Flint 会帮助我们来完成。Flint 特别适合中小团队或者个人开发者进行快速的迭代开发,有兴趣的同学不妨一试,换一种新的开发思路。

🐕 华为快应用引擎技术架构详解

2018 年 3 月华为与小米,Oppo,Vivo 等 9 家手机厂商,联合发布快应用联盟标准。快应用是一种基于手机硬件平台的新型应用形态,无需安装,即点即用,又兼具原生应用体验(性能、系统整合、交互等)。

本文讲了华为快应用的技术架构,及通过「流式加载」来解决网络延时问题、「快照」解决首屏渲染问题。虽然都是安卓平台,但对其引擎内核的研究有助于自研或部署垮平台方案。

🐢 如何在 iOS 11 里把你的 App 集成到 Files

iOS 11 里首次加入了文件管理应用,让我们可以在手机和平板上更加方便地管理文件,并且提供了 API 让第三方应用集成到 Files App 里,如果你的 App 也像 Dropbox 或者 Office 那样重度依赖文件管理系统的话,那这篇...

Read more

老司机 iOS 周报 #25 | 2018-07-02

22 Dec 09:47
Compare
Choose a tag to compare

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

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

新闻

2018@Swift 大会来了~

由 SwiftGG 翻译组主办的第三届 @swift 大会将于 2018 年 9 月 15 日在北京举办,大会邀请了来自国内外的重量级嘉宾,旨在为 iOS 开发者带来一场 Swift 的盛宴。现在使用老司机周报的专属优惠码:SwiftOldDriver 报名立减 60 元 。

WWDC 2018 Viewing Guide

useyourloaf 对 WWDC2018 的 Session 进行了一个分类,并附带了少量的延伸阅读指引。

Zeplin 2.0 发布 — 引入组件模块

Zeplin 2.0 发布,带来了全新的 Components 模块、 assets 重命名,全尺寸缩略图等诸多新特性。

随着产品思路的转变,在开发和设计过程中「组件」的有效管理变得越来越重要,而 Componets 模块要做的就是让设计师和工程师更好的共享这些组件。 Componets 模块可以将 Sketch 中的 Symbol 上传到 Zeplin,选中单个组件,数显面板会显示该组件被用于哪些 Screens。

文章

🐕 JavaScript async/await: The Good Part, Pitfalls and How to Use

ES7 引入的 async/await 极大地提升了 JavaScript 的异步编程能力,可以使用同步风格的代码异步访问资源、而不至于阻塞主线程。但要用好 async/await 还是有一定难度的,在这篇文章里会从不同角度探索 async/await,并展示如何正确、高效地使用 async/await。

🐕 Handling mutable models in Swift

当我们能给数据结构的每个属性进行精确、访问权限可控的定义,其他模块就算不了解实现细节,也能从属性本身的定义认识数据结构,同时防止了意料之外的修改。作者权衡了代码的正确性和使用时的便利性,利用 Immutable 的性质和 FRP 的思想来描述数据结构,提升了数据结构的易用性和可维护性。

🐎 Learn Core Graphics with Swift Playground

在以前的一些电子书籍中,我们跑书籍中的代码,一般都需要我们根据指示建立 demo 工程,然后 copy 或者人肉将代码输入到工程中,再运行查看效果。整个路径比较耗时不说,遇到不太专业的书籍代码的版本不清晰的估计得调个十遍八遍的才能跑起来。既然书籍都已经电子化了那能不能让书籍中的代码就能直接在书籍中运行呢?在单一环境中完成整个学习的闭环,意义重大。

近年来,人们陆续通过扩展部分 REPL 的功能部分实现了交互式的教程体验,如 iPython、Jupyter Notebook 以及 Xcode 中的 Playground 等。不过在 Apple 推出 iPad 版的 Swift Playground 后更是把动态的、可运行的交互式教程发挥到了极致,毕竟 iPad 本身就是很多人拿来看电子书的设备。文中作者基于 Swift Playground 写了一本学习 Core Graphics 的电子书,在学习的同时可以交互时的尝试不同的绘图操作并实时查看效果,简直不要太棒!有 iPad 的同学可以考虑重新学习一下 CG,或许会有很多新的收获。

🐕 Airbnb and React Native Expectations

又一篇英文的文章来评论关于 Airbnb 宣布下线 React Native 的事情,作者提出了一个很好的观点,使用 React Native 的人,你希望用 React Native 达到什么样的期望,解决什么样的问题呢? React Native 的最初设计初中真的能符合使用者的预期么? Airbnb 在运用 React Native 的时候,总共提出了 4 点目标,最终这 4 点目标他们完成的并不好,所以才决定下线。那么如果作为 React Native 使用者,你的预期又是什么呢?

作者还针对自身的体会对 Airbnb 的 4 点目标中的 2 点,跨平台与提升开发效率做出了自己的看法。跨平台方面,React Native 确实可以实现一套代码2个平台适配,甚至 Airbnb 在实践中做到包括 Web 在内3个平台适配,但这之中遇到的很多坑也是造就了不满足预期目标的原因,而 React Native 最初的设计初衷是 “learn once, write everywhere” ,当我们预期变成 “write once, run everywhere” 的时候,你是否能 handle 的住你的新预期与新规划呢? 关于开发效率上,Airbnb 因为他们缺乏移动端工程师,使用 JS 技术栈可以最大限度发挥他们前端工程师在移动端的作用,所以他们内部的调研报告里有 60% 的人觉得,React Native 的开发体验非常的 amazing,但如果作为原生安卓/苹果开发者们,面向人群变了,还会是开发体验的一种提升么?

🐎 Upgrading To Swift 4.2

从 Swift 4.1 升级到 4.2 的语法改动不大,主要是一些类型、常量的命名由 OC 的一长串改为按照 Swift 风格的嵌套命名空间。比如 UIApplicationState.active 改为 UIApplication.State.activeUIContentSizeCategoryDidChange 改为 UIContentSizeCategory.didChangeNotification

🐕 DeepLearning 101: Coursera Vs Udemy Vs Udacity

深度学习的热潮在近几年越来越明显,各种框架如雨后春笋般出现,苹果也相继在 WWDC17 和 18 推出了 Core ML 和 Create ML 。除了一些全职的博士/教授等科研人员,广大工程师们如果想系统的学习深度神经网络,最便捷靠谱的途径就是通过参加各种在线课程。作者横向比较了几个目前比较火的深度学习在线课程的不同点,相信能帮助感兴趣的人找到适合自己的课程。

🐢 🚧 ReSwift in Practice

单向数据流是一个经典的设计模式。相比在前端中的 Redux 被广泛接受,在 iOS 端与之对应的框架 ReSwift 则少被人提及,业内对于 ReSwift 在项目中的实践文章也少(因为没人用啊),这篇文章针对在业务中使用 ReSwift 做了一些总结,对于 middleware 的使用也让人颇受启发。

务实的说,大多数团队在项目中引入 ReSwift 并没有太大的价值。它的使用门槛比带来的收益大。但是通过学习这个框架深入理解单向数据流的模式是很有意义的一件事。

🐎 Xcode 小技巧:利用 assets 配置针对不同设备的资源

介绍了利用 assets 中的 Data Set 配置针对不同设备的资源文件的方法。

🐕 Swift vs. Kotlin — the differences in memory management

本文对比了 Kotlin 和 Swift 如何进行内存管理。Kotlin 使用了基于 CMS 算法的垃圾回收,而 Swift 则使用了 ARC。本文没有拘泥于过多底层细节,而是用平白的语言介绍了两者的区别。是一篇入门开发者也能阅读学习的文章。

🐕 What’s New in Swift 4.2?

Raywenderlich 出品的 Swift 4.2 更新内容总结,功能示例代码非常齐全,而且还介绍了 SE-0193 跨模块内联函数的提案以及 SPM 的一些小更新就,目前已有的更新总结文章对于这两个方面提到的比较少,所以可以重点看一下这两个小节。

🐎 Non Empty

在 Swift 里很多时候你明明知道数组不为空,但还是需要为 first 或者 last 之类的属性进行解包才行,更好的方式应该是构造一种非空集合类型去进行约束。

Swift 教学网站 PointFree 最近就开源了一个 NonEmpty 库,通过给集合类型加上一层封装,让我们可以在类型安全的情况下,更加方便的使用非空数组,避免多余的解包。

🐢 帮助你做一个更好的软件架构师

何谓"架构",架构师的工作是什么,这是长久以来大家一直在讨论的问题。本文是作者通过对软件架构的本质的思考,总结出若干条软件架构师必备的技能,从而提出个人的方法论。作者认为对于软件架构师而言,有以下10个点是必须要考虑的

  • 软件设计:在合适的设计模式中选择,并制定出适合团队的方案
  • 方向选择:通过多方面的评估,根据自己的能力选择团队前进的方向
  • 方案简化:最简单的方案往往就是最合适的方案
  • 坚持编码:站在别人的角度看问题会更好
  • 文档:如果可以的话,尽量采用工具自动生成文档
  • 沟通力:好的沟通能力有助于方案落地
  • 前瞻性:具有前瞻性的软件架构生命周期会很长
  • 性价比:制订方案的时候需要考虑方案的投入和收益是否在合理的范围
  • 咨询辅导:通过大量的培训帮助成员提高技术水平
  • 营销手段:高明的营销手段能让大家的目标一致,达到事半功倍的效果

🐢 美团外卖iOS多端复用的推动、支撑与思考

前两年,组件化的话题在iOS业界可以说是非常火。组件的通信解耦方案,是runtime,还是openURL,又或者protocol方案,组件怎么进行包的管理等等讨论的非常多,很多大牛以及公司都给出了自己的答案。我在工作中也在团队中进行了组件化的一些探索。在整个实践过程中,我发现,最重要的其实并不是上面提到的这些,而是对现有工程更好的分层,尤其是对于要支撑部门多个App的场景下,基础库的下沉,如何设计去提高组件的复用程度从而带来整体开发效率的提升,这个在我看来可能是最重要的,而相反的是,这部分的文章并不多。这次美团的这篇文章详细叙述了这一块的实践和思考,我觉得各位在有想法进行组件化的时候,不妨先看下这篇文章。

工具

Test Drive

在 playground 上快速尝试一个 Swift Pod 库或框架。例如使用命令 testdrive Kingfisher,即会新建一个集成了 Kingfisher 的 playground,提升体验各种库和框架的效率。

代码

Sift app - 实时监测手机所有 App 的网络情况

Sift 是一个开源 App,可以监测手机上的所有网络请求,根据规则屏蔽请求,最重要的是:可以作为调试工具,在手机上实时看自己 App 的网络连接状态。

新一代 Swift ORM: Perfect-CRUD

Perfect-CRUD 是基于 Swift 4 以上版本的关系数据库对象管理系统(ORM),采用Swift 4 Codable (可编码)协议映射到SQL类型的数据库表格。其采用了一种丰富多样又简洁明了的表达形式,通过类型模板(Generics)、字段路径(KeyPath)和可编码(Codable)的实现方式来确保编译阶段对数据类型的安全检查。
CRUD 是链式操作的(每个操作的结果都是可以继续作为参考进行下一步操作),它还提供了一个异步的日志系统用于记录错误以及每一条 SQL 语句。
有兴趣的可以到 Perfect-CRUD 下载源码体验一番~

Lynx - 又一个跨平台开发框架

Lynx 是一个使用 Javascript 来构建 Android 和 iOS 应用程序的跨平台开发框架。Lynx 首选 Vue.js 作为开发框架,通过适配也可以使用其他前端框架进行开发。Lynx 是直接使用系统 UI 来进行渲染的,同时也支持使用 CSS 进行排版。据文档介绍,Lynx 不仅保留了类似 React Native 的动态特性和开发体验,还与 Flutter 有着相同流畅的性能体验。目前项目还处于 alpha 阶段,喜欢尝鲜的同学可以跑下工程的 demo 进行体验,对跨平台开发感兴趣的可以持续关注。

ZHNJSBox - 乞丐版JSBox

iOS 内置了 JavaScriptCore(戴铭前辈的『深入剖析 JavaScriptCore』为它作了很细致的分析),这为 JavaScript 与 Native 交互提供了很便利的基础。目前业内诸多跨平台方案,如 Weex 和 ReactNative 的 iOS 版本也都是通过 JavaScriptCore 实现的,还有一些动态化方案,如 JSPatch 等也是基于此。JSBox 是 iOS 上基于 JavaScript 的可扩展效率利器,它的 JavaScript 与 Native 间的通信同样也是依赖于 JavaScriptCore。

ZHNJSBox 是一名 JSBox 深度使用者为研究其实现而写的一个小项目,实现过程记录在了『如何实现一个乞丐版 JSBox』一文中,该文还谈到了实现中遇到的一些技术瓶颈和如何借鉴 JSPatch 和 ReactNative 这类开源框架解决这些技术问题。如果对于如何利用 JavaScriptCore 搭建自己的动态化系统感兴趣,又苦于无从下手的话,这个开源项目是一个不错的入门选择。最后,如果仅是对 JSBox 实现原理充满好奇的话,这里再次推荐钟颖小专栏内关于 JSBox 的几篇文章 - 『JavaScriptCore 与 Promise 那点事』、『使用 JavaScript 来写 Masonry 代码』以及『使用纯 JavaScript 编写 iOS 界面』。

Swift 4.2 功能 Playground 全展示

Ole Begemann 大神出品的 What's New in Swift 系列,使用 Playground 为我们展示 Swift 4.2 的所有新特性,让大家可以直接上手感受。需要注意的是,现在 Swift 4.2 还在开发中,大家要使用的话需要安装 Swift 4.2 的工具链或者使用 Xcode 10.0 beta。

iOS 应用逆向与安全

@Alone_Monkey 的iOS逆向方面的新书,让读者不仅仅局限在各种逆向工具的使用上,而是从全局的角度,从原理的角度,来了解逆向与安全这个领域,并且还因为深入到了程序运行的本质从而加深更多iOS开发方面的理解。全书开篇1-3章,快速上手介绍了一些基础概念,逆向工具的使用。4-6章则全面系统的进行了知识储备与原理进阶。7-8章带着大家进行逆向实战与安全防护。非常推荐对逆向工程有兴趣的朋友们入手学习。

附带知识小集团队 @Lefe_x 的读书笔记一则:《iOS 应用逆向与安全》读后感,方便大家更好的初步了解书的全貌,不过还是推荐入手一本系统性的学习一下。

内推

字节跳动 北京 iOS 团队持续招人中

这是一家非常年轻的创业公司,充满活力与激情,只招优秀的人,一起做有挑战的事情。直接内推可以将简历及心仪岗位发送至我的邮箱 [email protected],或者添加我的微信 jingmu1994 了解更多公司信息。有需要的我也可以直接帮你对接技术 Leader 详聊。

深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目

如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~

杭州/广州/深圳 奇志科技招聘 iOS、前端

奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。Mesh 在运用 yarn, rollup, vue 等技术栈的同时,利用 Couchbase 设计多端数据同步方案,并深入研究 React Native。也可以微博上私信 @没故事的卓同学 了解。

百度教育事业部招 iOS 开发

部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:[email protected]

上海-加入即刻

即刻 iOS 团队从一开始就使用纯 Swift 开发,至今已有三年多时间,是国内较早大规模使用 Swift 的团队。我们比较偏爱 RxSwift 和 Texture 等框架,追求和最优秀的工程师一起,用最高的标准做用起来最爽的 app。
如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给Jason(即刻 iOS leader): [email protected],或微博 @JasonYuh

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

[@没故事的卓同学](https://weibo.com/1...

Read more

老司机 iOS 周报 #24 | 2018-06-25

22 Dec 09:47
Compare
Choose a tag to compare

ios-weekly

新闻

《WWDC 17 内参》免费订阅

去年我们组织针对 WWDC 17 的内容写了 25 篇文章,原来售价 39 元,现在免费开放给大家。

"iPhone Only" apps on the iPad

一个不错的消息,在 iOS 12 beta 2 上,你的 iPhone Only 应用程序将会以 16:9 的比例运行。在此之前,尽管 iOS 10 不再支持 iPhone 4S,但你依旧需要让 APP 能以 3:2 的比例运行在 iPad 上。

苹果键盘维修计划

苹果确认 MacBook 的蝶式键盘出质量问题,开启键盘维修计划 ,如果你的苹果笔记本出现了诸如字母或字符意外重复/字母或字符不出现/按键感觉粘滞或按键反馈不一致,并且符合维修计划覆盖的机型范围,请预约去 Genius Bar 进行维修。

重磅!Google发布Flutter Release Preview 1

在 GMTC 2018 大前端大会上,Google Flutter 高级工程师于潇宣布 Flutter Release Preview 1 发布,这标志着 Flutter 进入了一个新阶段。同期还发布了基于 VSCode 扩展等辅助开发工具。Flutter 一直在不断地进步,并且得到了来自全世界社区的支持。

文章

🌟 🐢 WWDC2018 - 来自一线开发者的技术笔记

头条客户端团队针对 WWDC 2018 写了 15 篇技术笔记,有些是 老司机x知识小集xSwiftGG WWDC 18 专题目录 没有覆盖的。可以看看目录挑选自己感兴趣的看看,一定不会让你失望。

🌟 🐢 What’s Next for Mobile at Airbnb

对于 ReactNative 社区来说,上周两大事件值得关注:Facebook 宣布对 ReactNative 底层进行重构;Airbnb 宣布放弃 RN 并连发了五篇 blog 来解释。

  • Part 1: React Native at Airbnb
    讲为什么 Airbnb 在 2016 年决定投入 RN,比如 比拟原生体验代码可以跨平台提升开发体验 等。

  • Part 2: The Technology
    着重写 RN 在技术层面的一些优劣,优势:垮平台、迭代速度、与 Native 代码桥接方便等,劣势方面:因 JS 无类型导致不好重构、JSCore 在双平台的不一致性、App 体积、RN 初始化及首次渲染时间等。

  • Part 3: Building a Cross-Platform Mobile Team
    从团队管理角度来讲引进 RN 之后带来的一些问题:要用好 RN 开发者还需要懂 Native,这种混合对招聘、测试、迭代都会带来很多挑战。

  • Part 4: Making a Decision on React Native
    由于 RN 在技术方面的一些问题及对团队带来的挑战不能很好的解决,Airbnb 决定 Sunset RN,停止用 RN 开发新功能,逐渐转向 Native。对于开源,他们会将一些项目转到 react-native-community。

  • Part 5: What’s Next for Mobile
    讲 Airbnb 在移动方向的未来,介绍了 Server-Driven Rendering,还有努力推进的 EpoxyMvRx 等项目。

🌟 🐢 On Apple's Love Affair With Swift

标题读起来有点困惑? 不过这不重要, 文章内容和这个标题关系不大。之前一位名叫 Dominik Wagner 的博主写了一篇 diss Swift 的文章, 本文的作者通过从之前 Chris Lattner 在一个 Podcast 接受采访的观点中有针对性的摘抄了一些,来对 Dominik Wagner 的观点进行了回应。于是有了本文。

Swift 不只是一门多了面向协议能力和静态类型的语言,要了解 Swift 的诗与远方,还是要多看看 Chris 发表的,关于 Swift 的设计的一些观点, 比如这篇博客。里面解答了诸如为什么要发明 Swift,而不是简单把 OC 变得更好等核心问题,当然也包含一些有趣的观点,比如 Chris 说明了 Swift 的 functional 的特性大量参考了 Haskell,这些从 Haskell 参考的概念也成为其他高级特性的基础(如面向协议)。以及 Swift 并不只是成为一门新的 Cocoa 编程语言,而是对标 C 和 Rust,成为更好、更安全的系统编程语言。

笔者看完后竟然有一丝感动,仿佛感受到了 Chris 在设计与迭代这门语言上的思考与倾注的各种努力,通过一个又一个巧妙的方式把种种先进的理念汇集到一起,make things happen。恍惚间觉得什么 ABI 稳定,Playground 崩溃,Source Intellisense 崩溃都是浮云, 这是一门虽然年轻但未来潜力无限的编程语言, Let's make Swift great again!

🐕 🚧 Maintaining Productivity as Engineering Teams Scale

早早的时候《人月神话》里就指出了:往一个延迟的项目里添加人手只会拖慢项目的进度。那么随着业务增长,开发人员也越来越多后要如何保持团队的效率要解决什么问题呢?文章给出了极富建设性的意见。

  • 花时间偿还技术债,否则往后会越来越拖累开发进度
  • 随着用户的增加,避免工程师陷入解决客服、运营的问题,分散开发精力
  • 关注“老人”的价值。随着新同事的加入,“老人”还额外承担了介绍项目情况,说明某个功能对业务的价值。这个过程中要理解“老人”自身的开发进度可能会变慢。
  • 技术人员的职能分化,有些人可能倾向于往管理岗发展,有些人适合技术专家方向
  • 注重沟通效率。团队人数少于十人的时候什么事在饮水机旁边可能就讨论完了。人数增加后则要注重如何有效的沟通,有的团队也可能都不在一个办公地点。同时这个环节也体现了高质量文档的重要性。

🐕 [译] 怎样(以及为什么要)保持你的 Git 提交记录的整洁

作者通过日常工作中常用的 4 个 git 使用场景,向读者解释了为什么要保持 Git 提交记录的整洁,以及保持 Git 提交记录的整洁的方法。建议读的时候跟着作者的思路操作一遍,更能加深理解!

🐕 Create ML Tutorial Getting Started

Raywenderlich 家出的 Create ML 入门教学,手把手教你用 Craete ML 和 Turi Create 构建一个通过图片分辨猫狗的机器学习模型,体验过一遍以后大家可能对 Create ML 这门框架,并且国内有开发者已经翻译了这篇文章,感兴趣的同学可以考虑跟着文章体验一次机器学习模型的训练过程。

🐎 iOS中的图片使用方式、内存对比和最佳实践

在 WWDC2018 的图像最佳实践中,苹果为我们介绍了一种缩放图片的方式。本文则是对这个议题进一步探究,研究了三种创建UIImage的方式所占用的内存大小,结论是苹果官方提供的方式占用内存最小,推荐大家使用。

🐕 Using generics and descriptors to standardise icons, images and placeholders on iOS

通常应用里的图片占位图只有少数几种样式,如果粗暴的使用继承来复用不够灵活。本文介绍了利用泛型约束来进行图片配置。我个人认为这个实现方式清晰且安全,值得借鉴。

🐢 2018 年主流 RSS 服务选哪家?Feedly、Inoreader 和 NewsBlur 全面横评

在我们已经有了公众号、QQ/微信群、直播平台等各种技术社群的集中式服务时,RSS 是否还适合技术人员?唐巧在3月25日的博客是这么说的

我之前做 iOS 开发,白天上班完成公司的需求,晚上就自己研究一些技术细节,写一些总结的博客。每年的 WWDC 视频,我都坚持看完并且写一些总结笔记。我还用 RSS 订阅了很多 iOS 国内外的博客,平时和周末没事就翻来学习。

可见,在信息高度过载的今天,RSS 无疑发挥了一个「聚合器」(aggregator)的作用,帮用户抓取各个高价值订阅源的更新。但各家 RSS 服务之间的区别性其实很高,最终阅读体验也大相径庭。此外,目前绝大多数的 RSS 服务都是有收费选项的,要不要付费、付费给谁也是需要考虑的问题。为此,本文挑选了几家有代表性的 RSS 服务进行对比,分析各自优劣,希望能帮读者做出最适合自己的选择。更多的时候,RSS 是一种学习习惯,而 RSS 服务就是学习的工具。工具好不好用,关键还是要看主人。

P.S. 国内的 RSS 源数量正在逐渐减少,这里吐血推荐一个基于多人协作式开发的 RSS 生成器,毕竟没有池塘哪有鱼,对嘛!

🐎The Problem You Solve Is More Important Than The Code You Write

You are not a Code Monkey paid to write characters on a screen.

作为研发,可能会认为,产品业务的方向、需求应该仅仅是 PM 们需要考虑的事情,而我们只需要通过代码完成一个又一个的需求,但事实真的是这样吗?在 coding 过程中,我们可能常常执迷于代码写的漂不漂亮,接口设计符不符合 DRY 原则等等。当然,这并没有什么不对,只是,似乎我们忽视了一个问题,那就是,我们的每一行代码,最主要的目的是为了解决问题,或者说,为所在公司、团队创造价值。本文虽然没有介绍任何技术相关的东西,但可能比很多技术文章更值得技术人员去看一看。

PS:文中举的蓝牙解锁的例子,实际上我觉得无匙进入比按个按钮解锁在技术上难实现的多(手动滑稽)

设计

🐎 How Apple can fix 3D Touch

作者认为目前 3D Touch 的体验有待改进,用户无法区分普通按钮与支持 3D Touch 的按钮,只能不断尝试然后记住那些支持 3D Touch 的按钮。所以作者认为 3D Touch 按钮应该在视觉上加以区分,例如在右下角加一条短线。

代码

MessengerKit

MessengerKit 使用 Swift 编写,是一款基于 UICollectionView 的消息 UI 框架,可以方便地搭建类似 iMessage 的界面。它内建了可自定义的主题,你可以根据示例来快速地构建符合你应用 UI 的消息对话框,值得一试。

StyledTextKit

StyledTextKit 是一款支持后台渲染和 LRU 缓存的富文本框架。在 iOS7 之前,UITextView 由于使用了 UIWebView 导致性能十分差,虽然后来苹果给出了 TextKit 框架,但是所有的渲染和尺寸计算依旧还是在主线程。所以 GitHawkApp 的开发者自主开发了 StyledTextKit 这个富文本框架,用于含有大量富文本的列表。在子线程中计算背景大小及文本内容渲染,保证在滚动大量文本的时候依旧十分流畅。

内推

字节跳动 北京 iOS 团队持续招人中

这是一家非常年轻的创业公司,充满活力与激情,只招优秀的人,一起做有挑战的事情。直接内推可以将简历及心仪岗位发送至我的邮箱 [email protected],或者添加我的微信 jingmu1994 了解更多公司信息。有需要的我也可以直接帮你对接技术 Leader 详聊。

深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目

如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~

杭州/广州/深圳 奇志科技招聘 iOS、前端

奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。Mesh 在运用 yarn, rollup, vue 等技术栈的同时,利用 Couchbase 设计多端数据同步方案,并深入研究 React Native。也可以微博上私信 @没故事的卓同学 了解。

百度教育事业部招iOS开发

部门下面有百度阅读,百度文库,百度爱听等App产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:[email protected],想了解更多也可添加我的微信:lizelei618087。

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

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

说明

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

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

老司机 iOS 周报 #23 | 2018-06-18

22 Dec 09:46
Compare
Choose a tag to compare

ios-weekly
上一周在掘金的支持下,我们联合“知识小集”、SwiftGG 针对 WWDC 18 一共完成了 28 篇技术文章。希望广大的开发者多多转发,不要错过:老司机x知识小集xSwiftGG WWDC 18 专题目录

新闻

🐎 FB正在大规模重构React Native,预计今年发布

这毫无疑问是个好消息,和原生代码的协同一直是 React Native 的一个痛点,Facebook 愿意亲自解决这个问题,这对 RN 生态的超级利好。业内一些公司选择 Weex 而不选择 RN 的原因就是因为 Weex 和 Native 之间交互更加方便,这样可以最大限度的复用自己积累的 Native code base(毕竟目前 iOS 业内没多少新项目, 大部分都是有一定历史包袱)。如果 RN 解决了这个问题想必会给 Weex 带来新的压力。

文章

🌟 🐕 Enumerating enum cases in Swift

本文介绍了 Swift 4.2 新引入了 CaseIterable 协议。因为 Enum 会自动实现 CaseIterable 的方法,所以作者先介绍了 CaseIterable 协议中 allCases 方法在 Enum 上的几种使用场景,其中就包括了在 TableView 上的使用。然后作者详细讲解了如何让其他类型去实现 CaseIterable 协议。这是 Swift 4.2 非常重要的一个新增项,值得关注!

🐕 iOS 流量监控分析

在移动开发早期,流量监控一直是 APM 里很重要的部分。但随着 WiFi 覆盖率的提高以及流量资费的下降,客户端的流量监控渐渐显得不是那么重要了。饿了么基于自己的业务场景需要,分析比较了圈内各大已知 APM 流量监控方案的优缺点,最终实现了自己的流量监控模块。该文章对于加深理解 iOS 客户端内 HTTP 请求流程是很有帮助的。

🐢 SR-7380, Ambiguous KeyPath

作者是 GitHub 和 Apple 的前员工。

作者在编码过程中发现 Swift KeyPath 的一个 bug,从定位和修复问题的过程非常清晰,值得一看。

Swfit 的编译前端是 swiftc(为什么不是 Clang ? 参考 https://www.youtube.com/watch?v=Ntj8ab-5cvE) 文章写了如何给编译器加参数让其打印出更多信息、如何生成 AST(抽象语法树)语义分析如何做类型检查等。

关于 Swift 编译过程,可参考 向开源的 Swift 贡献代码

🐕 WWDC 中提到的浏览器 Fingerprinting 有多可怕?

Web 浏览器上的 fingerprinting 技术指通过 IP 地址、JavaScript 行为、Flash 与 Java 插件、字体、Canvas、WebGL 等多维度信息,来给每一个浏览器打上一个不同的 fingerprint。你修改浏览器的常见配置,fingerprint 往往并不会发生改变,而你换一台电脑,或者换一个浏览器,都会产生不同的 fingerprint。通过这项技术,就能给一个运行在某个 OS 平台上的浏览器打上唯一标识,识别 Cookie 泄露产生的用户伪装,不过目前 fingerprinting 被广泛用于在不同的网页上识别用户,去投放合适的广告。

🚧 🐕 iOS 12: Notable UIKit Additions

作者 Jordan Morgan 每年 WWDC 之后都会深入探索新版本的 iOS 并为大家带来 UIKit 新增的 API,这次包括用于提示密码的 UITextInputTraits、用于图像渲染的 UIGraphicsImageRenderer、自动填充验证码、通知设置等等值得花时间研究的新 API。

🐕Training a Text Classifier with Create ML and the Natural Language Framework

CreateML 是今年 WWDC 苹果发布的新的深度学习训练工具,允许开发人员在不太了解机器学习的情况下,便可以训练自己的 models。本文作者 Mattt 在很短的时间,只写了很少的代码,就通过 CreateML 训练了一个文本分类的 Model,可见 CreateML 在使用上的简单和迅速。我一直认为机器学习慢慢一定会随着各种工具,框架的出现,变得越来越简单,可以让更广大的开发人员使用。虽然 CreateML(目前 CreateML 还是 Beta 版本)还不能完全代替诸如 TensorFlow 这样的框架,但我认为这是一个很好的开始。

🐕MessageThrottle Performance Benchmark and Optimization

MessageThrottle 是 OC 消息节流和防抖的库,换句话说就是控制方法调用的频率,主要利用 OC 的 runtime 机制来实现。由于 Hook 消息转发流程带来了一定的性能损耗。作者在原有基础上,通过改进存储结构和缓存策略,对库的性能进行了优化,使得消息转发流程的耗时下降 50%,同时节省 6% 的 CPU 耗时,并加强了线程安全。建议读者在读这篇文章前,如果对这个库或者 runtime 机制不是太熟悉的,可以先看一下 MessageThrottle 这个库的实现细节。

🐢 When your CA turns against you

目前主流的网站基本都采用了 HTTPS,而证书都是通过 CA 颁发。TSL 证书主要有三种类型,分别为 DV、OV 以及 EV。其中,EV 是最贵的。而我们知道,CA 总是想引导我们购买更贵的证书,但从安全性而言,它们三个其实并没有多大区别(当然,本文重点不在介绍 EV,主要是证书发布后的问题)。CA 不仅可以颁发证书,还具有撤销证书的权利。本文以实际的案例,Ian Carroll 在美国注册的一家名为 Stripe Inc. 的公司被 CA 撤销了证书,来讨论 CA 的权利是否过大,是否存在滥用职权的问题。

🐎 WWDC 2018 见闻

Bang 参加 WWDC 2018 的见闻,不仅仅提到了 WWDC 中,大家在最近几周看过很多相关文章的 WWDC Session ,还提到了 WWDC Lab 这个现场与苹果开发者,全世界开发者交流探讨的环节,另外 Bang 作为 JSPatch 的作者,也向苹果询问了官方对这类工具,这类热修复,热更新的态度,苹果的回答也颇有意味。

🐕 [译]现代 js 框架存在的根本原因

作者从数据状态与UI响应的方向集中阐述了在传统前端开发模式下带来的痛点,因此而产生了现在诸如 React,Angular 或 Vue 等现代 js 框架。在文章中提到此类框架的基本策略是通过虚拟dom来高效操作渲染,使用观察者监听来即时响应状态变化。作者为了大家理解方便,用原生 js 与虚拟 dom,实现了一个响应式 UI 框架的基本流程。

🐕 Harnessing Code Generation to Increase Reliability & Productivity on iOS at Uber

本文的中心是利用代码自动生成能力提高 Uber iOS 上的可靠性和生产力。主要通过资源访问器(Resource accessors)和模拟(Mocks)两个例子来介绍代码自动生成能力如何提高代码可靠性和生产力。

🐢 Modular iOS

下面四篇文章是一个系列文章,主要描述了「如何将我们的项目进行模块化拆分」

上述四篇文章篇幅不大,但是每篇文章都对模块化过程中产生的问题提供了一个很好的思路,对于正在写模块化的你们来说,值得都看一遍。

细说 Swift 4.2 新特性:Dynamic Member Lookup

Swift 4.2 中新增加的 dynamic member lookup 对 swift 未来的动态特性有着很大的影响。同时也增强了和动态语言如 python 和 js 的交互。是个值得关注的新特性。

设计

【国内首发 + 中国价】Design+Code 绝佳 iOS 设计和开发教程一年订阅

Design+Code 系列教程教你从 0 到 1 设计、开发一款完整的 iOS app,非常适合希望入门设计或编程的朋友,包括 Sketch、Swift 4、Xcode 9、CocoaPods、Core Data、Realm、动画、SpriteKit、TestFlight、发布 App 到 App Store 等等内容,不仅有文字教程,还有超过 40 小时的视频课程以及 10GB 可供下载的资源文件。

工具

Mac Bootstrap

这是一个针对新 Mac 开发的,快速配置开发环境的脚本,里面集成了一些常用的配置。所有的配置和功能都有文档说明, 它既是使用手册,也是教学指南。

虽然环境配置是一件非常主观的事,不同的人审美和需求不一样,但也可以看看文档,了解一些好玩的用法,看看它是怎么实现的,然后把部分函数抄走并提高自己的工作效率。

Sonar

Facebook 出品,一个可扩展的移动应用调试工具,同时支持 iOS 及 Android,让你能够从桌面可视化地控制你的应用。Sonar 基于插件化设计,已经内建了 Logs (日志)、Layout Inspector (布局检查器)、Network (网络检查器)。当然,你也可以自己为其编写插件来满足自身业务需求。不过当前还没有支持 Swift,项目中全面使用 Swift 的同学还得再等等。

在线 AI 生成 LOGO

相信每位开发者都有会自己做的应用却不会自己做 Logo 的窘境,也更不希望和不靠谱的收费设计师来回扯皮,那么快让这款 AI 工具来帮助你。输入名称、标语、关键词并选择配色方案,然后等待数秒,就会得到若干个基于你配置的设计结果,总有一款适合你。

音视频

Swift Unwrapped #62: Interview with Ted Kremenek

这期 Swift Unwrapped 采访了 Swift 的核心团队负责人 Ted,主要讲了 Swift ABI 相关的内容,很大的篇幅都在讨论 ABI 稳定的概念以及影响,例如 ABI / API / Module Stability 的概念和区别,Swift Runtime 跟系统的交互,以及 Swift 稳定对于操作系统 SDK 开发的影响。

内推

字节跳动 北京 iOS 团队持续招人中

这是一家非常年轻的创业公司,充满活力与激情,只招优秀的人,一起做有挑战的事情。直接内推可以将简历及心仪岗位发送至我的邮箱 [email protected],或者添加我的微信 jingmu1994 了解更多公司信息。有需要的我也可以直接帮你对接技术 Leader 详聊。

深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目

如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~

杭州/广州/深圳 奇志科技招聘 iOS、前端

奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。Mesh 在运用 yarn, rollup, vue 等技术栈的同时,利用 Couchbase 设计多端数据同步方案,并深入研究 React Native。也可以微博上私信 @没故事的卓同学 了解。

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

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

说明

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

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

老司机 iOS 周报 #22 | 2018-06-04

22 Dec 09:46
Compare
Choose a tag to compare

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

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

本周将迎来 WWDC 18,我们会在掘金上参与 WWDC 专题文章的编写,周报将停更一周。

新闻

Apple Silently Launched Creative Testing in App Store Search Ads

Apple 悄悄发布了针对 App Store 搜索广告的 Creative Testing 功能,移动开发者现在可以在 App Store 里测试不同的搜索广告。虽然这并不是很多人期待的 A/B 测试,但它为广告发布者提供了更多的权力,这篇文章详细解释了这个新功能的用法。

专栏

🌟 🐢 深入 Decodable —— 写一个超越原生的 JSON 解析器

老司机 iOS 专栏最新一篇文章,带大家深入 Decodable,文章分为两个部分,第一部分讲 Decoder 的抽象,分析原生 JSONDecoder 的一部分实现,第二部分带着大家自定义一个 JSONDecoder,并且针对原生的不足,做一些针对性的优化,让自定义的 Decoder 拥有更强的性能和拓展性。

文章

🌟 🐢 Google Swift Style Guide

这是一份非常具有实践意义的 style guide。全面、细致的介绍了各种规范,难能可贵的是有些地方还说明了为何选择了这样的规范。即使最后没有利用这份规范也可以看看一份规范包含了哪些方面,极富参考意义。

Linkedin 的 swift style guide 也是一份比较完整的 style guide。

🌟 🐢 Core ML入门:构建一个简单的图像识别应用

由 SwiftGG 翻译组翻译自 Sai Kambampati 的博客。文章一步一步地教大家实现一个基于 CoreML 的图像识别器,而且特别贴心的是,作者提供了一系列的 Demo 工程,让读者可以随意跳过一些准备步骤,提高学习效率。完整的 Demo 工程请在 Github 上查看。

🐢 如何实现 App Store App 的自动下载

如果 App Store 是开源的,要按照以下步骤实现自动下载,我想对于绝大多数开发者,都不会是难事:

  1. 进入 App Store,切换 tab 到搜索界面
  2. 设置搜索关键字、搜索
  3. 进入列表页后,点击 App 进入详情页点击下载
  4. 根据提示完成登陆、下载,并在下载完成以后跳转到推荐 Tab
  5. 进入推荐 Tab 后,退出登陆

但不幸的是,App Store 并没有开源,这篇文章则通过逆向技术找到以上步骤所需要 API 并实现了自动下载,对于逆向初学者来说,这是一个很好的练手项目。

🐎 黑苹果安装学院

自从苹果采用 Intel 的处理器,OS X 被黑客破解后可以安装在 Intel CPU 与部分 AMD CPU 的机器上。从而出现了一大批非苹果设备而使用苹果操作系统的机器,被称为黑苹果(Hackintosh)。这个仓库收集了各种型号的黑苹果安装方法。我们都知道, 黑苹果其实是一个具有潜在盗版性质的行为,因为它违反了苹果公司的 EULA 法案(EULA)。 所以这个 Github 仓库只是以安装黑苹果为一个引线,进而介绍和分享关于苹果操作系统的相关知识和系统的一些安装方法。

🐎 这才是 WKWebview Cookie 管理的正确方式

目前绝大多数的团队处理 WKWebView Cookie 的方式是这样子的:webview 每次发起 load url 请求前客户端塞 cookie 到请求头里传给服务器,并且通过 js 注入的方式将 cookie 同步给前端这种方案。

文中提出了新的一种方案:首次加载 url 的时候,预先加载一个 cookie webview,将 Cookie 先使用 js注入的方式写到 cookie webview 的共享 WKProcessPool。当 WKWebView 正式加载的时候就实现了 Cookie 的同步。

🐎 为什么我用 Texture 来搭建 App(并且你也应该)

作者介绍了 Texture 被创造出来的起源,与 UIKit 的对比,并且列举了几种场景下两个框架的发挥,例如 stackView 的使用,tableView 的列表反转等等,得益于 Flexbox 布局,异步渲染等等的机制让 Texture 在这些场景下发挥得比 UIKit 更加优秀。

🐢 RunLoop 源码阅读

现在大部分 iOS 简历上都会写「理解 RunLoop」细问之后却是一知半解。本文通过源码方式讲解 RunLoop 相关知识,包含:

  • 为什么需要 RunLoop?
  • 如何做到一个线程只有一个 RunLoop(Thread-specific data)
  • CFRunLoopDoObservers
  • 如何让线程在空闲时休眠及唤醒(mach_msg)

🐢 iOS App 使用 GCD 导致的卡顿问题

在我们通常的认知中,都认为 dispatch_async 非常高效不会卡顿,Peak 在实际项目中发现一个卡顿堆栈可能与 dispatch_async 有关, 之后利用 TSI 向 Apple 寻求 technical support,通过问答形式解释了为什么 dispatch_async 有时也会卡顿。

🐢 高效的数据压缩编码方式 Protobuf

本文通过详细的介绍,帮助读者了解 Protocol buffers 的最新版本 proto3 基本用法和主要特性,并阐述了 Protocol buffers 的编解码流程,是一篇很详尽的 Protocol buffers 入门级学习资料。通过阅读本文,读者能够明白以下几点:

  • Protocol Buffer 利用 varint 原理压缩数据以后,二进制数据非常紧凑,option 也算是压缩体积的一个举措。所以 pb 体积更小,如果选用它作为网络数据传输,势必相同数据,消耗的网络流量更少。但是并没有压缩到极限,float、double 浮点型都没有压缩。
  • Protocol Buffer 比 JSON 和 XML 少了 {、}、: 这些符号,体积也减少一些。再加上 varint 压缩,gzip 压缩以后体积更小!
  • Protocol Buffer 是 Tag - Value (Tag - Length - Value)的编码方式的实现,减少了分隔符的使用,数据存储更加紧凑。
  • Protocol Buffer 另外一个核心价值在于提供了一套工具,一个编译工具,自动化生成 get/set 代码。简化了多语言交互的复杂度,使得编码解码工作有了生产力。
  • Protocol Buffer 不是自我描述的,离开了数据描述 .proto 文件,就无法理解二进制数据流。这点即是优点,使数据具有一定的“加密性”,也是缺点,数据可读性极差。所以 Protocol Buffer 非常适合内部服务之间 RPC 调用和传递数据。
  • Protocol Buffer 具有向后兼容的特性,更新数据结构以后,老版本依旧可以兼容,这也是 Protocol Buffer 诞生之初被寄予解决的问题。因为编译器对不识别的新增字段会跳过不处理。

扩展阅读

iOS 中使用 Protocol Buffer

Protobuf 中 set_allocated_xxx 排雷

Protobuf3 进阶系列

Protobuf 应用实践之RPC框架:Google gRPC

随手记实践 Protobuf 经验分享

🐕 iOS-factor

12-Factor 是软件即服务应用(SaaS)的一个著名方法论集合。iOS-factor 则从这个项目得到灵感,提炼出 iOS 开发相对应的方法论。本文则是阐述了这一方法论。目前总共有:依赖管理,配置,开发环境与线上环境等价,部署,本地优先于远端,向后兼容的 API,版本号,持久化数据这八个类别。

🐢 Static linking vs dyld3

优化应用启动时间是 app 开发中必不可少的一个环节。Allegro 的开发工程师在文中总结了他们如何通过静态链接优化减少启动时间的实践过程。以及遇到了如下几个问题:

  • 如何解决 Xcode8 不支持 Swift 静态链接的问题
  • 如何解决静态链接后资源文件管理问题
  • 如何解决一个静态库被多个库引用的问题

在文章的第二本部分,Allegro 的开发工程师描述了他如何绕过系统限制让 app 用上 dyld3,并且通过冷热启动的方式对比了 dyld2、dyld3、静态链接三个之间方式的启动速度对比。

🐕 不必要的 HTTP 头信息

作者统计了 30 个最常见的 HTTP 头信息,其中很多并没有使用的必要。例如并没有什么用,只是起到注释作用的 Server、X-Powered-By、Via。有实际效果,但并不是实现该效果的最佳方式的 P3P、Expires、X-Frame-Options、X-UA-Compatible。在标准之外的不会被任何浏览器识别的 X-ASPNet-Version,X-Cache。 而一些更有用的头信息却很少网站使用,例如提高安全性的 Content-Security-Policy 和 Strict-Transport-Security,提升性能的 Link rel=preload。

🐕 Writing self-documenting Swift code

我们应该尽可能使我们的代码和我们设计的 API 更容易被理解,可以拆分复杂的方法,使用清晰明了的 API, 为标识符创建新类型或别名。写好自解释代码,可以让我们的注释专注于架构设计,而不是经常变化的实现细节。

工具

Crunch

一款超好用的 PNG 图片无损压缩工具,提供了三种方便的使用方式:CLI、GUI 和右击服务,虽然与其他大多数压缩工具一样都是基于 Google 的 zopfli 算法,但 Crunch 会根据不同的图片,动态调整压缩参数,以达到最好的压缩效果。

另外,如果对压缩率要求不高,但是希望有个万能的 CLI 压缩工具的话,Leanify 会是个不错的选择,它支持多达 20 多种文件格式的压缩。

代码

KTVVideoProcess

KTVVideoProcess 是唱吧开源的一个视频处理框架,整体的设计灵感(Source -> Filter Pipeline -> Output)参考了 GPUImage,但其声称提供了比 GPUImage 更高的性能。和作者简单交流得知其中核心提升就是加入了 concurrent 的能力,GPUImage 只有一个 video process queue 来串行的执行 filter,没有最大限度压榨 CPU/GPU 的性能。对于视频处理的场景,我们需要对每一帧都应用同一组 filter,如果 filter 处理时间太久就会导致丢帧。KTVVideoProcess 针对该场景,实现了并行处理多个帧的机制,较好的解决了极端情况丢帧的问题。

为了提升串行 filter 队列的性能就写一个全新的框架,是不是最好的解决办法呢?这点我持保留意见。一般情况下多 Filter 性能问题可以通过合并 filter、优化 shader 算法的实现的方式来解决。

初步看了一下,目前完成度还不算高,提供的内置 Filter 还比较少,而且缺少 TwoInputFilter 这样的常用的基础 Filter,如果使用免不了会有较多场景需要手写 shader 来完成。不过框架的代码简洁清晰,如果有希望学习 GPUImage 内部实现的同学倒是可以考虑从这个框架学起。

The unofficial WWDC app for macOS

macOS 平台上的 Unofficial WWDC app for macOS 这款第三方 WWDC 应用更新了,新版本加入了对 iCloud 同步、Touch Bar 和日历集成等功能的支持。该应用完全开源,感兴趣可以到它的 GitHub 项目页面看看。

音视频

🚧 WWDC 97

有网友意外发现 WWDC 97 的 session 居然发行过光盘,发布到了 youtube。有怀旧情节的朋友可以看看。

推荐两个视频:

内推

深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

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

说明

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

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

老司机 iOS 周报 #21 | 2018-05-28

22 Dec 09:46
Compare
Choose a tag to compare

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

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

专栏

🌟 🐕 普通本科如何毕业入职一线互联网公司

我们老司机 iOS 专栏内最新出炉的一篇文章。作者毕业于一所普通的三本院校,从面试五分钟就被请出去,到现在就职于一线互联网公司,这期间有太多的思考、讨论、复盘和抉择。一些经验,希望给后来的同学带来一些帮助。

🐕 CocoaPods 进阶之利用 Subspec 实现代码“模块化”

老司机小专栏的文章,主要讲如何利用 Subspec 对 framework 内部代码进行模块化,让调用者做到「按需引入」。

文章

🌟 🐢 分布式系统的全面介绍

最近几个月看过最好的文章。在有限的篇幅里真正全面的介绍了分布式系统。作为客户端研发,对分布式系统其实一直都有很多疑问,并行计算是分布式,mysql 主从也是分布式,他们之间是什么关系?去中心化和分布式是一样的吗?后端研发的周报里整天提的 kafka 是些什么玩意儿, 它和 hadoop 有什么关系?分布式能同时保证 availability 和 consistency吗?这类问题我能提一天。

文章首先抛出一个核心观点,分布式的设计都是围绕 consistency 和 availability 来做 trade-off,然后从数据库、消息派发、应用程序、计算、文件系统等不同应用场景的分布式应用进行了科普和讨论,解答了基本我所有的疑问,并且还将一些我连怎么问都不知道的疑惑都解释得很清楚,文章的最后一章分布式账本,还带我第 N 次的入门了比特币和区块链(希望是最后一次) (:зゝ∠)。总之,这是一篇值得花时间仔细阅读的文章。

🐢 如何自动化测试 React Native 项目

系列文章共两篇,上篇从自动化测试的核心思想入手,介绍了 E2E 测试与单元测试。E2E - 通过 UI 来从头到尾(End-To-End)的测试,这种测试其实就是我们常说的 UITest。针对 RN 项目下的 UITest 文章推荐了 Detox 这款框架,而这款框架的底层用的是 google 的 Earl Grey。

下篇从单元测试入手介绍了基于 React 的各种可用测试工具,包括纯 JS 逻辑的单元测试/组件渲染 Dom Diff 测试/组件通信交互测试/Reducer/Action handler/Selector/Utils 测试等等。并且把多种测试模式合并起来,形成集成测试。

🐢 iOS 业务组件化框架 Axe 详解

业务组件化是近几年非常火的 APP 架构思路, 究其原因,随着业务发展,APP 的规模也逐渐膨胀,代码管理与协作开发变得困难,编译耗时也屡创新高,应用功能的拆分与研发团队的拆分也不可避免。

本文使用组件化框架 Axe 阐述了如何解决代码隔离,单独编译,组件交互三个问题。值得对组件化有兴趣的小伙伴们学习。

🐕 Using Dedicated Objects as Delegates & Datasources

使用专门的对象去作为 tableView 的 delegates 和 datasources,即可减少 viewController 的代码,又能使这些代码被多个 viewController 复用,需要的话,还能方便的进行数据展示形式的切换。也可以为多个 tableview 写一个 datasources 展示不同的 cell 样式,做到数据展示形式的复用。

🐎 Network Extension Intro

如果你还没用过 Network Extension,你也许会对它的强大感到惊讶,它提供了其它框架不具备的系统底层接口,让你能够自定义系统的核心网络功能。

这篇文章的作者将带你了解 Network Extension 的功能和用途,这只是这个系列的第一篇,简单概括了 Network Extension 的功能,下篇将会详细讲解 NEPacketTunnelProvider 并且带你深入苹果的示例项目 SimpleTunnel,对于 NE 感兴趣的同学可以关注一下。

NSAttributedString in Swift using SwiftRichString 2

SwiftRichString 开源库的使用教程,是一个很不错的富文本样式语法糖,对于经常要处理富文本的应用可以尝试一下。

🐕 Build Incrementation Techniques for iOS Release Train

本文首先介绍了苹果官方对 version 和 build 号的一些规范,然后介绍了几种可持续集成中自动增加管理 build 号的方式,个人比较喜欢 fastlane 这种。

Introducing ARKit by Tutorials

Ray Wenderlich 的新书《ARKit by Tutorials》,在这本书里会教你如何构建漂亮的增强现实 app,包括沉浸式的科幻传送门、扑克牌筛子和面部追踪 app 等等。在学习的过程中,你会接触到往场景中添加对象、管理 session、创建真实的游戏物理效果以及其他方面的内容。目前正在首发限时特价销售中。

音视频

🚧 UIKonf 2018 视频资源

UIKonf 是柏林的一个独立开发者会议,会议刚于 5.13-5.16 结束,现在他们将视频 po 到 Youtube 上。主题非常丰富,包含技术、设计等内容。

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

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

说明

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

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

老司机 iOS 周报 #20 | 2018-05-21

22 Dec 09:45
Compare
Choose a tag to compare

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

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

专栏

🌟 🐕 再谈 iOS App Crash 防护

我们老司机 iOS 专栏内最新出炉的一篇文章。作者分析了几种可能的 Crash 防护方案,并结合自己实践网易 Baymax 防护方案中遇到的各种问题,给出了解决方法,也提出了自己对这套方案的一些思考。

新闻

MongoDB 官方提供对 Swift 原生支持

MongoDB 是一个基于分布式文件存储的开源数据库系统。现在官方在 C 驱动(libmongoc)的基础上,用 Swift 进行封装,提供 Pure Swift 驱动。这或许表明 Server-side Swift 越来越成熟,期待不久的将来能看到大规模应用。

文章

🌟 🐕 关于 MVC 的一个常见的误用

如何避免把 Model View Controller 写成 Massive View Controller 已经是老生常谈的问题了。我们可以通过
MVVM , Reactive 模式或 Reducer 模式等进行优化改造。但比起模式和框架,更重要的是认识到解决的问题本质在于:我们要如何才能更清晰地管理“用户操作,模型变更,UI 反馈”这一数据流动的方式。本文则是通过一个简单的 To Do 列表来阐述如何清晰地管理数据流动。

🐎 Flutter 原理简解

Flutter 可以说是近期最热门的一个开发框架了,上周已经推过一篇 Flutter UI 绘制流程的文章,本篇文章也 cover 了一部分绘制的流程,不过与之前 focus 在 layout 环节不同, 本篇文章的渲染部分主要讲解了 Flutter 是如何通过 Skia 框架将 layout 之后的元素提交给 GPU 进行绘制。 除此之外,文章还分析了 Flutter 引擎的组件架构以及一些安装配置教学。

简单来说有用的内容不少,不过结构有点乱,看起来略费劲。(逃。。

🐢 『如何使用现代的 App 工程与架构的技术来构建我们的 App』系列文章

上述四篇是一个系列文章, 围绕一个核心问题来讲述:如何使用现代的 App 工程与架构的技术来构建我们的 App。不得不说作者写的是很良心的,整体文风对新手都很友好而且做到了循序渐进、抽丝剥茧的叙事逻辑,是不可多得的项目教程。

系列文章从一个普通的、设计缺乏考量的 demo 工程开始,首先为其添加了单元测试框架的支持,然后整合了 CocoaPods 来管理第三方的依赖,引入了 SwiftLint 来对代码进行静态检查,最终介绍了如何配置 Fastlane 来把传统打包提审流程中最繁琐的截屏步骤给自动化。基本涵盖了现在的 iOS App 项目的核心工程要素,尤其适合小公司的“多面手”型工程师阅读。

🐎 Tips for using Xcode Playground

虽然 Xcode Playground 老爱崩溃,但 Playground 的确很适合测试一小段代码。文章介绍如何设置手动运行,来降低 Playground 的 CPU 使用率及崩溃率,以及如何为手动运行添加 ⌘R 快捷键。另外 Playground 在最后一行代码执行完毕之后就会立即停止,并不会等待还没有执行的异步回调,可以设置停止方式为手动停止,或者代码来控制停止。

🐎 Running Xcode Playgrounds on Travis CI

Playgrounds 是一个很好的展示代码的方式。Mattt 新写的 Guide to Codable 就是基于 Playgrounds 去传递他的想法。而他为了解决及时发现自己的代码还是否适配最新的 Swift 版本和 SDK 版本,借助了 Travis CI 自动的去检查版本的适配。

🐢 TouchID 和 FaceID 实战使用的一些经验

LocalAuthentication 虽然只有 LAContext 一个 class,但并不代表清晰好用,其文档不够清晰甚至有错误。作者在实际 App 中使用过 LocalAuthentication 之后列出了文档的一些错误并给出了许多最佳实践。

🐕 手机京东技术团队对 iOS 自动化埋点探索

客户端埋点是产品分析用户数据的重要途径,常见的埋点方式有以下三种:

  • 代码埋点,最直接的手动埋点方式,由开发人员完成;
  • 可视化埋点,本文将会介绍的方式,可由埋点维护人员自行完成;
  • 无埋点,相当于全埋点,网易 HubbleData 中有使用到。

本文整体介绍可视化埋点的使用方式和技术细节,另外针对可视化埋点中遇到的问题,尝试给出解决方案和并提出了一些思考。

🐎 如何在实现类似于 rx 的命名空间

大家应该在 Kingfisher 和 RxSwift 这些库里见过 kfrx 的命名空间,刚开始用的时候会觉得有点陌生,但习惯之后就会理解这是一种多么优雅的代码组织方式,这篇文章会一步一步教大家如何实现这样的命名空间。

如果觉得英文阅读比较困难的同学,也可以考虑一下看 Enjoy 的 iOS 工程师写的这篇博文 Swift 命名空间形式扩展的实现

🐎 监控启动崩溃

一套监控启动闪退的方案,与以前通过检测 App 在某段时间后是否仍然存活的方式相比,这套方案的检测时机更加提前,通过 hook msg_send 函数实现,并且自己处理了 crash 后的日志上报功能。

代码

Parade

Parade 是一个简单易用的视差效果引擎,适用于基于 UIScrollView 任何视图。除了简单易用以外,Parade 的源码和示例代码质量都很高,是一个不错的 Swift 开源库。

ClassicKit

一套 Windows 95 风格的 UI 样式库。比较有意思的是它支持 @IBDesignable,这样就可以在 Xib 或者 Storyboard 中直接查看效果。

工具

Scheduling Services

一个微型 Swift 计划服务框架,基于 NSNotification 实现,用于计划未来(重复的)事件。使用 Codable 持久化任务内容,支持存储和恢复事件状态,API 简单、清晰。

🐢 Catching smiles with Google’s ML Kit on iOS

Google I/O 大会推出了谷歌的全新移动端机器学习框架 MLKit,可以实现在本地跑机器学习模型的能力,各方面都很像苹果已经推出的 CoreML 框架。这篇文章教大家如何使用 MLKit,包括设置 Firebase 服务,然后在 iOS 上进行代码开发,实现了一个对照片进行微笑检测的功能。

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

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

说明

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

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

老司机 iOS 周报 #2 | 2018-01-08

22 Dec 09:33
Compare
Choose a tag to compare

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

新闻

TIOBE 2017年度语言揭晓:哦,我的上帝,是古老的 C

今年 C 语言并没有很强势,只是也没有其他增长很突出的语言,C 的增长率 1.69% 就成为了佼佼者。亚军是 Python ,增长了 1.21%。

2018 年 1 月的排行中,Swift 排名 12,OC 18,相比去年略有提升。

集成 iCloud、Passbook 或订阅类 iAP 将导致 App 无法转移

集成过 iCloud, Passbook 或订阅类 iAP 将导致 App 无法转移到别的开发者帐号,即使之前集成过,新版禁用也不行。

Apple 拿下 iPhone X 外形设计专利

美国专利商标局报告显示,苹果已经拿到了 iPhone X 的外形设计专利。不过据最新报道,此专利并非针对「刘海」造型提出,而是著重边框上的按键、天线断点、扬声器等处细节。另外,iPhone X 的「刘海」部分集成了多达 8 个传感器(比 iPhone 8 多 3 个),分别是红外镜头、泛光感应元件、点阵投影器。

让所有科技巨头“焦头烂额”的intel漏洞是什么

Intel CPU 爆出史上最大漏洞。腾讯安全联合实验室的这篇回答详细的介绍了漏洞的原理和影响。

文章

程序员如何在技术浪潮的更迭中保持较高的成长速度

冰霜的 17 年总结,标题改成《我是如何从霜菜到霜神》也不为过。技术人员都要面对如何成长的问题,冰霜在文章中结合自身介绍了他是如何进行高效学习的,值得借鉴思考。

QUIC 协议初探 - iOS实践

QUIC(Quick UDP Internet Connections)是基于 UDP 的 WEB 开发协议 TCP + TLS + HTTP2 = UDP + QUIC + HTTP2’s API,由 Google 开发,希望其取代 TCP,加快网页传输速度。还计划提交至 IETF,成为下一代的正式网络规范。文中详细介绍了 iOS 平台下集成方式及与 HTTP2 的对比数据。

Basics of parallel programming with Swift 🚧

非常详细的介绍了 Swift 中并发编程涉及到的概念,你值得拥有。

如何实现 React Native 里的页面导航系统

RN 的导航和跳转一直是一个需要解决的问题。作者总结对比了现有的几个开源方案,并阐述了自己的解决思路。

阮一峰:比特币入门教程

数字货币已经成为新的风口。文章从技术角度通俗易懂的介绍了比特币的技术原理及基本概念。

Detecting screen capturing in iOS 11

随着教育、娱乐等领域付费视频服务的兴起,怎样防止付费内容的流失与传播成为了一个很重要的问题,本文详细阐述并演示了如何在 iOS 11 上实现对用户屏幕录制或镜像操作进行侦测的方法,值得一看。

工具

App Sight

查看主流 app 都用了哪些第三方服务和 SDK 。

代码

Kickstarter 开源了他们的客户端

Kickstarter 开源了他们的客户端代码,里面有非常多可以学习的内容,例如:

  • AppEnviroment 的抽象:所有状态都用一个全局的 Enviroment 去保存,包括了缓存,设备状态,用户等等,有了这一个抽象的存在就意味着测试时可以随意模拟和切换状态,在测试和监控复现 bug 时非常有用。
  • 可运行的文档:使用 Playground 去搭建 API 文档,UI 的格式可以通过 PlaygroundLiveView 即时查看,构建出了一个类 REPL 的调试环境出来。并且每次 pull request 也会尝试编译 playground 里的代码,如果 API 进行了修改,那就让我们知道该更新文档了。美中不足是目前 Playground 对于 framework 的支持很一般,我们使用 Carthage 或者 Cocoapods 的话需要做很多 setup 才行。
  • ...

相关资料:

RxFlow

RxSwift 社区推出的基于 Coordinator 模式的响应式导航框架。

LSAnimator by Lision

基于多维链表实现的 iOS 链式动画库,相比业界另外一个知名 Swift 动画库 IBAnimatable,有如下特性:

  • 支持多链式动画,并发执行多条动画链;
  • 每个动画节点采用 CAAnimationGroup 实现,从而支持单动画节点复合动画;
  • 提供 OC 版;
  • 侧重于对动画的深度定制。

OOMDetector

OOMDetector 是腾讯开源的一个 iOS 内存监控组件,应用此组件可以帮助你轻松实现 OOM 监控、大内存分配监控、内存泄漏检测等功能:

  • OOM 监控:监控 OOM,Dump 引起爆内存的堆栈;
  • 大内存分配监控:监控单次大块内存分配,提供分配堆栈信息;
  • 内存泄漏检测:可检测 OC 对象、Malloc 堆内存泄漏,提供泄漏堆栈信息。

DeepDiff

大家在工作中应该经常遇到数据集合更新,然后我们手动 diff 之后刷新 TableView 的情况,但这样的代码重复也容易出错。

DeepDiff 这个框架把这个过程地封装了起来。只要我们直接传入旧的集合和新的集合,然后把 diff 的结果交给 TableView 直接刷新就可以了,下面是代码示例:

let changes = diff(
    old: oldItems, 
    new: newItems, 
    reduceMove: true
)

tableView.reload(changes: changes, completion: { _ in })

并且它在性能方面的表现也很棒,官方的介绍页里有一个简单的性能对比,排名第一。

quicktype

quicktype 可以根据给出的 JSON 数据推断出数据类型,然后输出具体的类型模型,支持 Swift、C++、Go、Java、C# 等语言。支持 Xcode 9,使用得当可以给我们的开发带来一定的便利。

音视频开发进阶指南:基于Android与iOS平台的实践

作者是唱吧的音视频架构师。全面的介绍了音视频开发的基础知识,也结合了移动开发的相关技术(FFmpeg、OpenGL ES)进行了介绍。

音视频

阿尔法狗 AlphaGo 2017 🚧

阿尔法狗(AlphaGo)官方纪录片,全方位展示了人机大战的过程,更尽可能多地揭示了人类思维和未来人工智能的工作方式。

Testing in iOS

raywenderlich 的付费视频课程(第一部分可以免费观看)。视频课程分为:单元测试基本概念、单元测试实战和 UI 测试实战三个部分。

本期编辑

@没故事的卓同学@四娘@mmoaay@享耳先森@EyreFree

微信打赏

感谢您的支持。

微信支付

说明

🚧 表示需翻墙

老司机 iOS 周报 #19 | 2018-05-14

22 Dec 09:45
Compare
Choose a tag to compare

ios-weekly

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

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

新闻

iOS 11 App 上传规则变化

2018 年 7 月份开始,所有上传 App Store 的应用都必须是基于 iOS 11 SDK 编译并适配 iPhone X 的分辨率。当然,Apple 也对上传流程做了进一步的优化。更多细节,请参照:https://developer.apple.com/ios/submit/

What's New In Vapor 3

Vapor 3 对 Vapor 进行了彻底的重新设计,为未来几年的发展奠定了基础,让 Vapor 能够成长和进化为最好的服务器端 Swift 框架。Vapor 3 现在完美支持 Swift 4 的 Codable,并且从同步阻塞架构进化为异步非阻塞架构,同时还采用 Apple 新的开源服务器端框架 SwiftNIO 来管理所有网络连接和 HTTP 解析。

在 apple/swift 的 tensorflow 分支上开发 Swift for TensorFlow

Swift for TensorFlow 的 Swift 编译器开发在 google/swift 分支上,Ted Kremenek (Swift 项目新主管)和 Chris Lattner(Swift 之父)都认为将这个分支上的工作移动到 Apple/Swift 上直接开发,对 Swift 社区更有益处。这样会让 Swift 编译器开发的协同工作集中到一个中心,而且也能避免大家对于 Swift 产生方言的担忧。

新分支 tensorflow 将会在近期创建,tensorflow 上开发的新功能,会通过 Swift 发展流程,将一部分合入 Swift 主分支,tensorflow 分支本身,也会密切追踪 Swift 主分支的更新。

Ulysses 13 将更好的支持代码展示

最好的 MarkDown 写作工具之一 Ulysses 对代码的展示一直不够友好,最近宣布将在下个版本中优化对代码段的展示,并且支持 github style。

文章

🐢 AVAudioEngine Tutorial for iOS: Getting Started

音频处理一直是 iOS 开发中非常棘手的一部分,因为在 iOS 8 之前只能使用低级的、晦涩难懂的 Core Audio 框架,但随着 iOS 8 发布了高级的音频工具集 AVAudioEngine,我们不再需要深入挖掘 Core Audio 也可以实现音频处理,这篇教程会为你介绍如何使用这个新工具。

🐎 深入了解Flutter界面开发

最近一段时间,通过学习浏览器内核的相关思想来做界面开发的框架层出不穷。从 Reactive Native、Samurai Native、Weex 到最近的 Flutter、Tangram,各个公司都结合自己的业务时间推出了对应的轮子。不过反过来想,轮子多的核心原因恰恰是其实目前还没有完美的轮子。

这篇文章并不是 Flutter 的教程,而是重点介绍了 Flutter 的渲染流程和原理,以及探讨了一些背后的 immutable 和 react 之间惺惺相惜的设计思想,很有价值。如果自己所在的团队有这类轮子需求的同学,一定不要错过。

🐎 DEALING WITH DATES

时间对于在日常生活中的我们是简单的概念,但是在编程领域却是困难的。本文介绍了在 Apple 平台下,如何利用系统框架来对时间进行正确的处理。

🐎 Codable 与 JSONSerialization 性能测试

Swift 4 的新功能 Codable 可以自动生成解析 JSON 的构造器,但这些自动生成的代码跟我们手写的有什么区别呢?这篇文章的作者写了一个性能测试去比较 JSONDecoder 和 JSONSerialization,文末作者表示虽然 Codable 生成的代码效率只有手动解析的一半,但比起这点性能消耗,绝大部分情况下 Codable 带来的便利更加重要。

🐢 从源码看微信小程序启动过程

这篇文章记录了作者经过 3 个礼拜研究后,对小程序框架的基本代码结构,启动流程以及程序实例化过程的理解,并且从小程序的启动流程入手一步步解答了“框架对传入的对象等到底做了什么”的疑问。

🌟 Memory Leaks in Swift

Leaks 相关的内容在业内虽然已经有很多文章了,但多数是以 OC 来做示例,文章从 Swift 角度讲 Memory Leaks 是什么、有哪些危害?为什么会发生 Leak?最后重点介绍了消除 Leaks 的几种方式。

🐎 Making illegal states unrepresentable

作者以 URLSession 为例,大致描述了如何通过 Swift 的强类型来消除不明确的状态。在编译器的帮助下,编写出更加逻辑缜密的代码。

🚧 🐎 Capture iOS simulator video for App Preview

这里介绍了一个 Xcode 模拟器的命令行小技巧,很方便的用简单的命令行来实现将模拟器中的操作录制成录像,方便上传到 AppStore 的录像展示之中,浏览该网页需要翻墙。

🐢 🌟 🚧 Best iOS hacks from Twitter: March & April Edition

3 月 和 4 月整理自 Twitter 的各种 iOS 开发、调试小技巧与冷知识,非常干的干货,推荐花时间仔细阅读,绝对会有所收获。

音视频

RWDevCon 2018 Vault Video Bundle

此系列视频收费 $99,共 18 个主题:如 Serialization in SwiftAuto LayoutClean ArchitectureAndroidTDDWKWebViewARKitMetal 等,如对其中两个主题感兴趣也就值回票价了。

内推

丁香园丁香妈妈团队招中高级 iOS 工程师

新组建的团队,有电商方面开发经验优先,有意向请发送简历到 [email protected]

百度文库 / 百度阅读,招聘 Android / iOS / Fe 高级 / 资深工程师

百度文库 / 百度阅读,招聘 Android / iOS / 前端 高级 / 资深工程师,坐标北京百度科技园,有意向请发送简历到 [email protected]

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

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

说明

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

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

老司机 iOS 周报 #18 | 2018-05-07

22 Dec 09:44
Compare
Choose a tag to compare

ios-weekly

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

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

新闻

知识小集推荐的值得关注的 iOS 博客

「 小集 」团队最近利用空余时间,整理了一些我们认为质量高的博客以及博主相关的信息,包括博客、微博、Github,后期我们会加上公众号和小专栏信息。博客的主题不限于移动开发,我们会持续收集各个领域的高质量内容。

文章

🐕 计算机系应届生求职指北

两点之间,直线最短,方向对了,你走的就是捷径。

文章分享了职业规划、校招、求职策略、技术职位选择、语言和技术栈的选择、技术栈的优化、简历的书写等经验,这些东西对于还在学校的计算机系的学生,非常有帮助,早点思考这些问题,未来能走的更顺利。

🐕 50 iOS Interview Questions And Answers Part 5

50 道 iOS 面试题,有一些不错的知识点,还有 part1-4。如果有换工作的打算,建议细看,查缺补漏,技术面试时一些基础知识掌握不全的话很减分的。

🐕 小程序iOS客户端框架——控件事件逻辑框架与控件原生化

作者在文中介绍了微信客户端如何为小程序的运行提供了框架支持,比如事件响应处理,页面缓存机制及控件原生化等。对于小程序实现原理感兴趣的同学可以看一下。

🐎 Delegation in Swift

在日常开发中,我们一直和委托模式打交道。本文介绍了在 Swift 中实现委托模式的几种方式与其优缺点。本文除了介绍老生常谈的 ProtocolClosures 外,还提出通过 Configuration types 来使闭包的集合更清晰。

🚧 🐕 Exploring Apps Without Jailbreaking

英文文章,作者介绍了如何不越狱来挖掘探索一些 App 的实现,来判断 App 是原生 Native 的,还是 Webview/Phonegap 的,还是 ReactNative 的。通过对比 Button Touch Move 的一些操作,通过对比 Navigation 的切换动画效果,通过系统自带的 VoiceOver 的支持度,通过改变 iOS 系统动态字体,通过断网看查看 App 无网处理方式。有很多种方式可以用于粗略的判断一些 App。通过文中的多处交互细节我们能感受到,不同开发框架的一些‘一般’差异,可以看出大部分的情况下,原生 Native 在细节中的体验是非常的细腻到位的。

但需要强调的是文中介绍的差异不足以做出 100% 肯定的结论,可以作为一个初步的判断与参考。这么多的细节并非是专属于某个框架的能力,其他框架就一定无法实现。只不过因为各个框架有他们常规的开发习惯与特点,有些细节不默认支持并不是做不到,而是出于跨平台的统一策略等原因。各个框架其实也有自己的定制与扩展能力去对这些细节进行定制化的开发。

🐎 Instagram的iOS原生代码热加载技术

当年 13 个人就做到 3000 万用户的 Instagram,一直都是通过技术提升效率的标杆。这次介绍了他们原生代码热加载技术的实践,着实是一项令 Native 开发的程序员脸红心跳的技术。

文章介绍了一种基于在模拟器上通过 dlopen 来动态加载新模块的技术,配合 ComponentKit 来使得 Native 代码也能像 Weex 和 H5 一样 watch 变更并实时刷新。虽然文中并没有提供能够手把手照做的细节,不过核心的思路都已经阐述,稍加研究应该可以落地。建议做业务较多但缺乏技术产出苦于没好轮子造的同学赶紧上手尝试,说不定今年的晋升就稳了呢?:D

🐎 iOS Springboard Security - Revisited

本文介绍了一种在 iOS 的 App 切换页面替换 / 隐藏 App 原始缩略图的方法,有类似安全需求的同学可以作为参考。类似地,可以实现“后台模糊”效果,比如蚂蚁金服旗下的 蚂蚁财富 就采用了类似的安全措施,感兴趣的同学可以参考这里的 示例代码

🐎 Facebook 工作体验小记(一)

这次 Peak 老师分享了他在 fb 的工作体验,划重点:“我现在认为加班对于企业生长必要性是个彻底的伪命题”。希望国内的老板们早日明白一个企业成功靠的不是加班文化。

工具

lobe.ai

Lobe 可以让开发者不需要撰写任何代码,即可为应用程式加入图像或是声音辨识等机器学习功能。开发者只需要将训练资料拖进 Lobe 工具视图中,Lobe 便能自动建立深度学习模型,并开始训练,训练结束之后,便能输出 TensorFlow 或 CoreML 格式,直接在程序上执行,或者模型存储于云端,使用 Lobe 提供的 API 将深度学习能力整合进程序中。

🚧 TeaCode

正在处于 Beta 的一个清新的代码段管理 + 文字生成器。相比其他文字生成器,它更懂代码。相比其他代码段管理器,它有灵活的生成规则。目前五折 12 刀,正式发布后的价格为 24 刀。

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

本期编辑

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

说明

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

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