forked from SwiftOldDriver/iOS-Weekly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
#43-2018.11.12.md
231 lines (133 loc) · 19 KB
/
#43-2018.11.12.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# 老司机 iOS 周报 #43 | 2018-11-12
![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true)
老司机 iOS 周报,只为你呈现有价值的信息。
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。
## 小专栏
### [From Swift To C++](https://xiaozhuanlan.com/topic/7216403859)
来自微信团队的周报编辑芒果最新出炉的一篇文章。这篇文章按照编程范式(programming paradigm)来组织脉络,从一个客户端工程师的角度来品味和对比这 Swift 和 C++ 两门语言。如果你也在或者即将同时把 Swift 和 C++ 当做主流编程语言,那么这篇文章你绝对值得一看。
## 新闻
### [适用于触控问题的 iPhone X 显示屏模块更换计划](https://www.apple.com/cn/support/iphone-x-display-module-replacement-program/)
号外!号外!继“降频门”事件引起的 218 元换电池服务后,苹果又出免费更换 iPhone X 显示屏服务了。只要你的 iPhone X 经过测试满足以下两个问题,则苹果会替你免费更换显示屏。
- 显示屏或显示屏的一部分不响应或间歇响应触控操作。
- 即使没有进行触控操作,显示屏也会作出反应。
另外友情提醒,218 元换电池只剩最后一个半月了,还没换的小伙伴抓紧上,绝对能让你的老设备焕然一新!
## 文章
### 🌟 🐕 [Language Server Protocol](https://nshipster.com/language-server-protocol/)
前段时间 Apple Swift 团队在 Swift Forum 上宣布他们会对 Swift 和 C 系列语言(C/C++/ObjC)增加 LSP (Language Server Protocol)支持。这对于饱受 Xcode 折磨的开发者来说是个极大的利好,意味着在这之后可以有更多的第三方 IDE 支持。
Matt 的这篇文章,解释了什么是 LSP,LSP 是怎么工作的,以及潜在的可能带来的好处。
虽然 Swift 支持 LSP 的具体时间表到现在还没有放出来,但是受苦于 Xcode 的大伙们也算是有点盼头了。
### 🌟 🐎 Tricks & treats to make UI testing less terrifying
[part1](https://blog.novoda.com/ui-testing-part-1/)、[part2](https://blog.novoda.com/ui-testing-part-2/)、[part3](https://blog.novoda.com/ui-testing-part-3/)
自动化测试,尤其是 UI 的自动化测试,对于国内大部分的开发者应该都是“只闻其声未见其人”的感觉,知道有这么个事儿,但基本都没怎么实践过。这一系列文章系统性的讨论了 UI 自动化测试的最佳实践。从如何标记 UI 元素到如何访问,最后在第三部分还探讨了一种编写 UI 测试的“设计模式”,名叫 PageObject 的编程模型,来提升 UI 测试代码的可维护性。
### 🐎 [Stephen King's Advice To Software Developers](https://www.mokacoding.com/blog/stephen-king-advice-to-software-developers/)
斯蒂芬·金,《肖申克的救赎》的作者。他曾在《On Writing》一书说,讲述了他的写作经验。学习技巧基本相通,因此本文作者将斯蒂芬·金的经验融合到软件开发实例中。
1. 多输入,多输出
- 多输入:多看源码,`CodeReview`,博客,书籍,如无从做起,可多关注**老司机周报**。
- 多输出:对于想掌握的技巧,多进行刻意练习。
2. 避免分心
- 规划时间,**固定**的时间做**固定**的事情,效率更高。
- 寻找**专门的空间**和可以集中精神的 **2 个小时**。
3. 闭门,开门
- 专注开发完成后(闭门),接受 `CodeReview` 或者开源,吸纳更多的意见进行优化(开门)。
4. 杀掉你的所爱
- 每次优化,果断删掉你自豪但无用的代码,炫技不如贴合业务。
5. 花时间
- 没有捷径,务必**坚持**(但是要注意**学习技巧**)。
### 🚧 🐕 [How to remove duplication from Swift tests with helper functions](https://www.mokacoding.com/blog/how-to-remove-duplication-from-swift-tests-with-helper-functions/)
对于 XCTest 的单元测试来说,提取重复代码对于开发者而言并不友好,可能会出现如下几种问题:
1. 执行过程中,Xcode 的断言函数停止在了提取函数内部。
2. 多个单元测试同时报错时,需要展开错误信息才能了解到具体信息。
为了解决如上几个问题,作者巧妙的运用了 Swift 中 `XCAssert` 函数的另外两个入参 `file` 和 `line`,来传递辅助函数调用时的文件和行号,这样 Xcode 就能够帮助你将错误信息正确提示到辅助函数调用的地方。
### 🐕 [Keeping your code clean](https://www.netguru.co/codestories/keeping-your-code-clean)
写得一手好字,对于普通人来讲是一个很好的加分项,而是否写得一手简洁漂亮的代码则对于我们开发者来说更为重要。招聘单位往往对应聘人的代码风格都会有一定要求。本文分享了如何写得一手好代码的几个小技巧,很值得大家关注,并在平常开发中重视起来。
- LOC(Lines Of Code):代码应该足够精简,函数是最小的执行单元,避免冗长的代码集中在一个函数实现上。
- 正确的缩进:不管你是 “Tab” 党还是 “空格” 党,合适的缩进能让你的代码排版更加整齐,让人读起来更加舒适。
- 标准的命名:虽然命名一直是程序员的难题,但我们仍然需要能够很好的名字来提高我们代码可读性。
- 变量和函数的声明:在合适的地方做声明,按照功能进行分组。
- 代码风格:每个团队都应该有一套代码规范,来统一团队成员的代码风格。
另外,该作者还在最后为我们推荐了几个 Lint 的工具,可以帮助我们自动化代码规范审核,如 **SonarQube**、**Tailor** 以及 **SwiftLint**。
### 🐕 [String’s ABI and UTF-8](https://forums.swift.org/t/string-s-abi-and-utf-8/17676)
近日,Michael Ilseman 在 Swift 社区论坛发文 `String’s ABI and UTF-8` 表示 String ABI 相关改动已提交到 master 分支。具体来说,这是底层实现的一次显著改动(这些改动在 API 层面无任何影响),其中最主要的一点就是原生 Swift 字符串会统一使用 UTF-8 进行存储(在内存里),而之前是根据内容选择 ASCII 或者 UTF-16 进行存储。
文章还特地提到:传统意义上中文字符串是 UTF-8 性能最差的场景(需对多个 UTF-8 编码进行重排合并得到 Unicode 码位),得益于现代 CPU 的改进,这些已不再是问题。
### 🐢 [Result\<T\> 还是 Result\<T, E: Error\>](https://onevcat.com/2018/10/swift-result-error/)
API 的错误处理一直是 Cocoa 做的不好的一部分。到了 Swift 时代,我们有了更好用的 enum,可以帮助我们统一 Data 与 Error 的封装。如果你常用 Alamofire,一定对它的 `Result<T>` 非常熟悉,对于错误,它仅要求满足 `Swift.Error`。但是很多时候处理这个空协议依旧不是最方便。于是又有人提出了 `Result<T, E: Error>` 来指定错误类型,大部分情况下你会在这里定义一个 enum 来穷举所有可能的错误(注意这里的错误是 `Error` 而非 `Swift.Error`)。喵神在文中详细对比了这两种方式的利弊。
当然,官方不可能对这一不足置之不理,相关的提案 [SE-0235: Add Result to the Standard Library](https://github.com/apple/swift-evolution/blob/master/proposals/0235-add-result.md) 本周已经在讨论中,相信结果很快就会出来,让我们拭目以待。
### 🐢 [KVC/KVO 总结](https://juejin.im/post/5be25b256fb9a04a0279d217)
对 KVC / KVO 做了到位的总结和代码示例。相信对想要详细了解或使用 KVC / KVO 的同学会有所帮助。
KVC
- Key-Value Coding基本原则
- 访问对象属性
- 访问集合属性
- 访问者搜索模式
KVO
- 注册KVO
- 兼容KVO
- 注册从属keys
- Key-Value Observing 的实现细节
### 🐢 [Category 特性在 iOS 组件化中的应用与管控](https://mp.weixin.qq.com/s/5ucpVa6ku4b9_pfMP9CqlQ)
关于组件化,在业界的文章和讨论已经很多了。但组件化其实是一个比较大的工程化问题,对于想要使用和已经采用组件化进行开发的团队来说,对于实施组件化的很多细节,其实很多文章并没有说的很清晰。本文主要围绕组件分层通信解耦的机制,先后列举了常见的几种方案对比,以及美团所采用的方案:Category+NSInvocation 和 CategoryCoverOrigin。对于这两个相对陌生一些的方案,文中也有一定的介绍,并且写了实际运用的代码,对此有兴趣的同学推荐可以认真看一下本文。最后,Category 的使用笔者一向认为需要比较慎重,否则往往会带来更坏的效果,至于采用哪种方案,就看大家自己的抉择了。这里并没有打太极的意思,而是对于组件分层通信,怎么做、是否要做到如此,以及各种方案所带来的代码量的增加和后期的维护成本是否值得,不同的团队也会有不同的见解。
### 🐕 [Void](https://nshipster.com/void/)
NSHipster 介绍了很多和 Nothingness 相关的内容。这篇文章主要介绍的是 Swift 中的 Void。文章内容依旧是 Mattt 大神的写作三部曲:
- Void 在标准库中的运用
描述了 Swift 标准库在设计 ExpressibleByNilLiteral 的时候,如何巧妙的运用 Void 避免了和默认 init 冲突的情况。
- Void 一些被忽略的细节
比如 Void 是一个 non-nominal 类型,如何在无法拓展的情况下如何相互比较、一些自相矛盾的写法等
- Void 实际开发中的秒用
以网络请求为例,在使用 Void 的情况下,巧妙的把 `completion(.success(()))` 改成了 `completion(.success)`
### 🐎 [Swift Tip: Lightweight Observation](https://www.objc.io/blog/2018/11/06/lightweight-observation/)
对于静态视图结构和动态数据,我们可以使用内建的 `didSet` 属性观察器来观察数据的变更,并对应更新视图。这项技术的优势就在于简单性:不需要引入响应式框架、KVO 或其他东西。这篇文章用一个实际的例子演示了具体的做法。
### 🐕 [Swift 5 and ABI stability](https://theswiftdev.com/2018/11/06/swift-5-and-abi-stability/)
Swift 5 的分支最近已经准备要合并到主干了,这一次合并意味着 ABI 在 Release 之前不会有大改动,并且在未来版本保持 ABI 的向后兼容性。
所以最近在 Swift 论坛上也能看到核心团队加快节奏在调整精简标准库的 API,包括加入 [Contiguous Collection Protocols](https://forums.swift.org/t/contiguous-collection-protocols/17875) 确立数组内存布局以便优化排序等操作,去除掉 [Sequence.SubSequence](https://forums.swift.org/t/se-0234-removing-sequence-subsequence/17750) 以便提升数组切片效率等等。
如果你还不了解 ABI 相关的内容,那么可以看看这篇文章,了解一下 ABI 稳定对我们日常开发的影响。
### 🐢 [【译】给 iOS 开发者介绍 Flutter](http://ie8384.com/blog/index.php/archives/1603/)
本文是 Flutter for iOS 官方指南的翻译。iOS 知识和技能对 Flutter 开发非常有价值,如果你已经有 iOS 开发经验,可以通过这篇文章,用自己已有的 iOS 知识去使用 Flutter 构建应用。
文章主要介绍 UIView、UIViewController 等 iOS 常见知识在 Flutter 中怎样使用。共包含 12 个章节:View、页面导航、线程和异步、工程结构/本地化/依赖和资源、ViewController、布局、手势检测和 Touch 事件处理、主题和文字、表单输入、与硬件交互/第三方服务和平台、数据库和本地存储、通知。
作为给 iOS 开发者的入门 Flutter 的文章,本文内容全面,也可以作为开发手册来查阅。另外,作者还翻译了 [给 Android 开发者介绍 Flutter](http://ie8384.com/blog/index.php/archives/1602/),有兴趣可以阅读。
## 设计
### [Photopea: advanced image editor](https://www.photopea.com)
Photopea 是一款免费的在线 Photoshop(替代品),拥有和 PS 几乎相同的界面和快捷键,并且支持多语言,已经有超过 150 万独立访客。
## 工具
### [手机上的抓包神器 Stream](https://itunes.apple.com/cn/app/stream/id1312141691?mt=8&ct=appshare-cn)
配置简单,不需要改代理等繁琐操作,即可
1. 抓取手机上的 HTTP & HTTPS 请求和响应,方便开发和测试人员快速定位线上问题。
2. 重放和构建请求,高效调试服务端接口。
3. 支持在 iOS 上实现配置 Hosts 的效果,方便产品和测试切换线上和测试环境。
4. 集成一些常用工具,如 URL Decode/Encode,md5,base64,时间戳转化等。
### [另一款轻量级的 UI 实时调试工具 - Sherlock](https://sherlock.inspiredcode.io/)
这是除 Reveal 外又一款支持实时调试 UI 的工具,相比于 Reveal,Sherlock 虽然没有 Reveal 那么强大的功能,但它更加轻量级,且无需任何配置,打开模拟器和 Sherlock 就可以直接使用。此外,它还支持调整屏幕大小以测试你的 UI 在各类屏幕上的展示效果,不需要你去启动各种模拟器。目前 Sherlock 正处于 Beta 测试中,暂时只支持 iPhone 模拟器。
### [SmartBaby](https://itunes.apple.com/us/app/smartbaby/id1438971945?mt=12)
SmartBaby 是一款提高 Swift 开发者效率的工具。它能从 JSON 推断出 Codable 模型,且具有好用的自定义功能。创建的模型可按照 Project 分组,并使用 CloudKit 存储在 iCloud 的私有数据库中。
> 由 SmartBaby 开发者 [@nixzhu](https://github.com/nixzhu) 自荐
## 代码
### [AloeStackView](https://github.com/airbnb/AloeStackView)
AloeStackView 是一个类似垂直 UITableView 的类。它着重于让 UI 的实现变得非常的快速、简单和直接。不过为了实现更简单、更安全的API,它放弃了 UITababieView 的一些特性,如视图循环。
特性
- 允许您保持对视图的强引用并动态更改其属性,而自动布局让 UI 实时更新。
- 允许视图动态添加、删除、隐藏和显示,并提供可选动画。
- 包括对视图间可定制分隔符的内置支持。
- 提供可扩展的 API ,允许添加专用功能而无需修改 AloeStackView 本身。
- 在高流量的 iOS 应用程序中广泛使用和审查。
- 小的、易于理解的代码库(在500行代码之下)没有外部依赖性,调试轻松。
## 音视频
### [LEARN TALKS AWESOME CONFERENCE AND MEETUP TALK](https://learntalks.com/)
顾名思义,learntalks 是一个学习如何 talk 的网站,面向技术人员。网站收录了技术领域时下热门的技术大会的演讲视频,其语言涵盖了 Swift,Kotlin, Javascript 等,颇有一种足不出户就能阅遍天下大会的感觉,学技术和学 talk 同时进行。推荐关注。
### [Flutter 免费视频教程第一季:开发环境搭建](https://juejin.im/post/5be3d54cf265da611d6624d3)
手把手带你配置 Flutter 开发环境的视频教程,除视频外作者还编写了非常详尽的文字教程,对正在入坑 Flutter 的小伙伴可以看看。
## 内推
- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 [email protected],暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~
- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:[email protected] / [email protected] (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。
- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): [email protected],或微博 [@JasonYuh](https://weibo.com/jasonyuh)。
- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。
- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~
- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 [email protected],或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。
- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:[email protected]。
## 关注我们
我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。
![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
## 本期编辑
[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820)
## 说明
🚧 表示需翻墙,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)