forked from SwiftOldDriver/iOS-Weekly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
#45-2018.11.26.md
157 lines (89 loc) · 14.3 KB
/
#45-2018.11.26.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
# 老司机 iOS 周报 #45 | 2018-11-26
![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) 提出。
## 小专栏
[Swift 开源项目精选导图](https://xiaozhuanlan.com/topic/5271086934)
这份文档主要基于微博 [@SwiftLanguage](https://weibo.com/swiftlanguage) 跟踪过活跃于 Swift 语言领域的那些 GitHub 开源项目,顺便也是对于过去几年关注的内容进行一次系统化梳理。尝试整理出一份相对结构化且精练的 Swift 开源项目参考知识库,它将主要以思维导图形式呈现。
## 文章
### 🌟 🐢 [Hades:移动端静态分析框架](https://tech.meituan.com/hades.html)
本文介绍了大众点评基于 Objective-C 的代码静态分析工具 Hades 的研发经验,重点解决了以下痛点:
- 开发成本高,收益有限,研发参与积极性不够。
- 针对局部代码分析,跨编译单元以及全局性分析较难。
- 增量分析困难,CI 静态检查效率低下。
- 工具性较强,大部分只作代码规范检查,应用范畴局限。
- 接入和维护成本高,难以平台化。
Hades 相对于市面上已有的工具,在研发端解决了代码检查规则维护困难的问题,在 CI 端解决了性能问题,因为针对每次检查都可以持久化 Model 对象,在扩展性上还有很大的想像空间,大众点评团队为我们提供了很好的代码静态分析工具研发思路。目前 Hades 还是闭源阶段,将来有可能转为开源。
P.S. 目前iOS平台上的代码静态分析工具一览表
[SwiftLint](https://github.com/realm/SwiftLint)
[Appscreener](https://appscreener.us/)
[Checkmarx](https://www.checkmarx.com/technology/supported-coding-languages/)
[Fortify](https://github.com/mre/awesome-static-analysis)
[Infer](https://github.com/facebook/infer)
[oclint](https://github.com/oclint/oclint)
[Veracode](http://www.veracode.com/products/static-analysis-sast/static-code-analysis)
### 🐕 [Swift Development with Visual Studio Code](https://nshipster.com/vscode/)
Swift 在早些时候宣布将支持 LSP(Language Server Protocol),整个社区都沸腾了。人们涌上街头,奔走相告,一遍遍的确认着:我们可以摆脱 Xcode 了吗?VSCode 作为 LSP 支持的先驱者与佼佼者,目前基本已经是行业排行第一的通用型代码编辑器。
本篇文章由 mattt 大神出品,详细介绍了怎么在 VSCode 中配置 Swift 的开发环境。目前虽然 Swift 的 LSP 支持还处于 early stage,但已经可以支持最常用的自动完成、快速帮助以及跳转定义等功能。并且基于 VScode 强大的插件生态,还有 SwiftLint 这样的插件可以来提升代码的风格优化。不得不说,人们对于 Swift,尤其是非 Apple 生态下的 Swift 开发体验跨越式升级,已经发生。
### 🚧 🐢 [Xcode and LLDB Advanced Debugging Tutorial](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-1-31919aa149e0)
作者准备了一个简易项目,演示了如何利用 Xcode 和 LLDB 进行高级调试。
- [第一部分](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-1-31919aa149e0) 在断点处添加调试命令,注入一行新代码进行调试。
- [第二部分](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-2-8bfeae4cdfdb) 通过给属性添加观察点,当其变化的时候,会中断程序,观察到属性变化的前后值,及可以进行堆栈追踪。
- [第三部分](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-3-8238aca63e7c) 在断点中,通过调试命令新增新的断点,使断点在某些场景下才开始执行,更高效的追踪问题。
### 🚧 🐢 [A taste of MVVM and Reactive paradigm](https://medium.com/flawless-app-stories/a-taste-of-mvvm-and-reactive-paradigm-5288a819cca1)
本文通过一些简单的类讲述了什么是 MVC 和 MVVM,以及如何进一步研究 Rx。您可以自由地创建自己的架构,但无论您做什么,一致性都是关键,不要让别人看的时候感到困惑或惊讶。
所有设计模式的简单原则可总结为:
- 确定应用程序的各个方面的变化,并将它们与保持不变的方面分开
- 编程到接口,而不是实现
- 组合好过继承
希望本文对正在为架构选型而头疼的朋友有所帮助。
### 🐕 [实用的可选项(Optional)扩展](https://swift.gg/2018/11/19/useful-optional-extensions/)
`Option` 是 `Swift` 最基础的内容,它迫使开发者们处理好一些临界情况,使得程序更加健壮。标准库中 `Option` 的 API 非常少,编码过程中通常需要配合 `if let` `guard let` 一起使用,这容易造成多分支。作者参考了 `Rust` `Scala` 等语言的实现,给出了一些 `Option` 扩展,或许你可以用于自己的项目中。
### 🚧 🐕 [Stubbing in pair with Swift compiler](https://medium.com/@londeix/stubbing-in-pair-with-swift-compiler-c951770a295b)
Unit tests 中 stubbing 是一个很常见的做法,现在也有很多成熟的框架。而本文却从另外一个角度来做: 利用 Swift 的语言特性来做另类的轻量级的 Stubbing。
这种做法的应用面虽然比较有限,但是不妨可以了解一下作为参考。
### 🐕 [关于 performSelector:afterDelay: 的一个坑及思考](https://juejin.im/post/5bee9218e51d4520b7711fc8)
本文通过对于 `performSelector:afterDelay:` 函数进行了研究,总结了以下三点内容:
1. 在一个没有开启 `RunLoop` 的子线程中调用 `performSelector:afterDelay:` 函数,最终是不会被执行的
2. 看似相近的 API,可能不是同一个模块提供的,其实现方式也不尽相同
- `performSelector:` 来自于 `NSObject.h`,其是有 id 类型的返回值,并不依赖于子线程的 `RunLoop` 开启状态
- `performSelector:withObject:afterDelay:` 来自于 `NSRunloop.h`,其并没有返回值,依赖子线程的 `RunLoop` 开启状态
- `performSelectorOnMainThread:withObject:waitUntilDone:` 来自于 `NSThread.h`,其并没有返回值,依赖主线程的 `RunLoop` 开启状态
3. `performSelector:` 中函数定义在其他地方就会引起编译警告,如果函数没有返回值可以使用 `performSelectorOnMainThread:` 或者 `performSelector:withObject:afterDelay:` 来避免编译警告
### 🐕 [函数式编程 - 有趣的 Monoid(单位半群)](https://www.jianshu.com/p/f935e54faad3)
本文介绍了在函数式编程中比较核心的一个概念 Monoid(单位半群)。从半群到单位半群,从数学定义到 Swift 的展开实现,以引导教学的方式带领读者一步步深入了解 Monoid,极易消化理解。后半部分介绍了几个有趣实用的 Monoid 类的数据结构,且都有递进式的概念讲解及 Swift 实现。
另外,本文是近两年来作者关于[函数式编程系列](https://www.jianshu.com/c/884e7fb9b8ec)文章中的最新一篇。本系列文章同样都是采取引导递进式的行文风格,作者从 Haskell 这种标准化的、通用纯函数式的编程语言中汲取灵感,将诸多函数式编程的核心概念改造为 Swift 实现,让我们从新的角度去认识 Swift 以及 与 Swift 相关的函数式编程思想,Swift 或 函数式编程爱好者不容错过。
### 🐎 [Unit testing retain cycles](https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/)
循环引用问题会造成内存泄露,轻则影响应用性能,重则导致应用闪退,非常影响用户体验。同时它也是不太容易被发现的。所以在开发测试过程中,增加对循环引用的检测很有必要。
本文就介绍了如何在单元测试中检查循环引用。思路很简洁,通过建立弱引用去检测。这样我们就能保证代码库本身没有问题,正如文末所说的 “get a level of comfort”。除了检测方式,作者所表现出的这种为代码负责任的态度也是值得我们学习的。
### 🐕 [Self-sizing Table View Cells](https://www.raywenderlich.com/8549-self-sizing-table-view-cells)
这是一个关于 tableview cell 的布局教程,该本教程中,您将学习如何启用自动调整大小的 cell ,以及如何使它们按需调整大小并支持动态类型。该教程通过 storyboard 加代码的教程形式,一步步完成一个大家常见的 tableview 需求,并附上了项目 demo 。
### 🐕 [Extending optionals in Swift](https://www.swiftbysundell.com/posts/extending-optionals-in-swift)
Swift 里的 Optional 虽然帮助我们保证了内存安全访问,但在很多情况下都需要我们解包后再进行操作,让代码显得比较啰嗦而且不连贯。
Sundell 这周就给我们带来了 Optional 的实用拓展,总结了一些 Optional 常见场景,并且构建对应的语法糖去优化 Optional 的使用。
### 🐕 [Swift Async Operations at Your Command](https://tworingsoft.com/blog/2018/11/19/swift-async-operations-at-your-command.html)
当一个操作相对比较复杂时,使用 Operation 封装上下文会是一种比较合理的做法,这篇文章里作者分别介绍了 Fabric 封装的 FABAsyncOperation 和 FABCompoundOperation 以及各自的使用场景,并且讲述了他在项目中使用 Swift 重写的过程。
### 🐕 [关于 Swift defer 的正确使用](https://onevcat.com/2018/11/defer/)
在 Swfit 中,defer 关键字即为延迟的意思,用 defer 声明的 block 并不会立刻执行,而是在当前代码执行退出后被调用,这类似于 JAVA 里的 try/finally。最近,喵神在重构 `Kingfisher` 的时候,因为 defer 的使用不但而造成了 bug。为此,喵神完整梳理了下 defer 的特性以及使用方法。
## 代码
### [30-seconds-of-swift-code](https://github.com/elizabethsiegle/30-seconds-of-swift-code)
一个立志于让你 30 秒看懂一段 Swift 代码的项目,较为新手向,方便新人快速了解 Swift 的内建函数。当然老鸟也不妨一读,总有你漏掉的知识点。
### [LINE SDK for iOS Swift](https://github.com/line/line-sdk-ios-swift)
用 Swift 开发的 iOS LINE SDK 可以让我们用现代化的方式来实现 LINE API,包括用户认证及通过 OpenID 获取用户信息等功能,为 iOS app 开发有吸引力的、个性化的用户体验。
## 内推
- [北京-百度网盘 持续招 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),[@邦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)