forked from SwiftOldDriver/iOS-Weekly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
#42-2018.11.05.md
161 lines (88 loc) · 17.2 KB
/
#42-2018.11.05.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
# 老司机 iOS 周报 #42 | 2018-11-05
![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) 提出。
## 小专栏
### [北美软件工程师面试简单介绍](https://xiaozhuanlan.com/topic/4263189057)
好多同学都比较好奇北美的软件工程的面试和国内的有什么不同,具体情况又是如何的,这篇小专栏就简单的给大家介绍了一下北美的 Software Engineer 的面试情况,有兴趣的不妨读一读了解一下。
## 新闻
### [App Store Connect API Now Available](https://developer.apple.com/news/?id=11022018)
WWDC 2018 中苹果提及了 App Store Connect 将迎来一次比较大的更新,其中有两个内容比较受国内开发者关注 - TestFlight Public Links 和 App Store Connect API。前者已经在前一段时间发布了,而后者这周也正式发布。
> 相关功能介绍可以在 [What’s New in App Store Connect](https://developer.apple.com/videos/play/wwdc2018/301/) 和 [Automating App Store Connect](https://developer.apple.com/videos/play/wwdc2018/303) 中进一步了解。
## 文章
### 🌟 🐕 [支付宝客户端架构解析:iOS 容器化框架初探](https://mp.weixin.qq.com/s/KGDD-Qe1TLzIVlDIEzM25g)
你是否好奇一款航母级 App 他的内部客户端架构是怎样实现的?到底什么样的架构设计才能满足几十上百人共同开发迭代一款 App ?这篇文章会带大家深入到支付宝的 mPaaS 框架之中,了解一下支付宝客户端业务容器化的实践 -- 将业务隔离成相对独立的模块,而整个框架作为容器管理着众多子业务子模块,并着力追求模块与模块之间高内聚、低耦合,灵活的插件式开发。
mPaaS iOS 框架源自于支付宝客户端,为了实现这种上千个工程之间的低耦合和相关依赖调用,mPaaS 框架直接接管了 App 的生命周期,负责整个 App 启动托管、App 生命周期管理、处理与分发 UIApplication 的代理事件。mPaaS 框架提供了容器化环境,业务开发人员在这个容器化环境中使用 `微应用` 和 `微服务` 进行具体的业务需求开发。
### 🌟 🐎 [The power of key paths in Swift](https://www.swiftbysundell.com/posts/the-power-of-key-paths-in-swift)
由于 Swift 是一门追求编译时安全和静态类型的语言,它缺少其它更注重运行时的语言(Objective-C、Ruby 和 JavaScript 等)所拥有的动态特征。例如在 Objective-C 里,我们可以在运行时动态访问对象的任意方法和属性,甚至可以替换其实现。虽然动态性的缺失是 Swift 的一大优势之一,有助于写出容易预测、正确率更高的代码,但在某些时候,如果能用更动态的方式来使用代码,会很有帮助。幸运的是,Swift 正在不断推出更多更动态的功能,同时仍然保持类型安全的原则,key path 就是其中之一。在这篇文章里,会为你展示 key path 在 Swift 中的使用方式,以及利用它实现的一些强大功能。此外,还可以参考这篇文章 [Swift Tip: Auto Layout with Key Paths](https://www.objc.io/blog/2018/10/30/auto-layout-with-key-paths/)。
### 🌟 🐢 [Protocol Oriented Programming(POP) in Swift: Is it better than Object Oriented Programming(OPP)?](https://www.appcoda.com/pop-vs-oop/)
自从 Swift 2.0 引入面向协议编程(POP)这一概念以来,已经有成百上千篇关于这一概念的讨论文章,本次作者以专注编码 30 年老司机的身份,在实际开发中大量运用 POP 模式之后,写出了他心目中的 POP。本文将由以下几点展开讨论:
- 为什么 Swift 被认为是一门面向协议的语言;
- 比较 POP 与 OOP 的异同,指出他们主要区别在于能否实现多继承;
- 对比值语义与引用语义的区别;
- 分析了苹果在 WWDC 2016 提出的 “局部推断(Local reasoning)”;
- 举了 Protocol 的几个使用场景:如实现委托模式、作为类型和实现多态;
- Review 作者在 Swift 项目中的实践代码;
至于作者对 POP 最终的态度,点进来看看吧,另外有兴趣的话不妨看看作者的前一篇[关于 POP 的入门文章](https://www.appcoda.com/protocol-oriented-programming/)。
### 🐕 [React Native 重构路线图发布!](https://mp.weixin.qq.com/s/-BXsXp0HnrGMS3CLLvfEtQ)
Facebook 6月中旬发布了他们即将“大规模重构 RN” 的消息,时隔四个月,近期终于公布了他们的一些计划细节,不过大部分都是工具链,流程上的增强。颇有一种裤子都脱了就给我看这个的感觉,不知道是不是对“大规模重构”有什么误解。这些增强虽然普通开发者可能感触不深,但对于一个团队做技术选型时候肯定是有帮助的,但是不是真能抵挡住 Flutter 的冲击呢?我表示不乐观。
### 🐎 [Speeding Up Custom Script Phases](https://indiestack.com/2014/12/speeding-up-custom-script-phases/)
文章主要介绍了三种方案来加速 Xcode 自定义脚本的执行。
- 第一种:勾选配置项中的 `when installing`,标识 APP 只在 `Archive` 模式下才执行脚本。
- 第二种:添加你自己的逻辑代码来标识脚本的执行程度。
- 第三种:利用两个可选项 Input Files 和 Output Files,这两个列表中填写为文件路径或文件夹路径,它们就是 Xcode 来判断脚本是否需要执行的依据。
对于最后一种方案,文中表达不是很明确,我花了点时间做了一个实践,最后归结如下,Xcode 会重新执行脚本的条件如下:1. 两者中任一`文件`有`修改`。 2:两者中任一`文件夹`内有文件`添加/删除/替换`。
> 在 Xcode 10 之后脚本增加为4个可选项,除上面表述的两个外,还有 Input File List 和 Output File List。如有兴趣可以参考 [\[New Feature\] Generate xcfilelist for Script Build Phases](https://github.com/SwiftGen/SwiftGen/issues/441) 文中对于 File List 的看法。
### 🐎 [Running Other Apps' Siri Shortcuts Through Deep Links in Swift](https://swiftrocks.com/running-other-apps-siri-shortcuts-through-deep-links-in-swift.html)
文中作者展示了使用 Deep Link 来打开捷径的案例。通过 `shortcuts//` 这个 URL Scheme 来跳转捷径应用。若 URL 中的 Path 为 `run-shortcut` 则可以去执行捷径,当然我们可以通过参数 `name` 来指定执行对应的捷径,`input` 参数来为你的捷径增加入参,`x-success`/`x-cancel`/`x-error` 参数来为你的捷径提供执行状态的回调处理。此外,作者还介绍了具有导入功能的捷径 URL 和 一些捷径 APP 的配置页面。
### 🐕 [Let's Set Up Your iOS Environments](https://robots.thoughtbot.com/let-s-setup-your-ios-environments)
本文介绍了一些对于新手来说非常实用的 Xcode Project 设置的小知识:使用 .xcconfig 文件来合理设置工程。这东西可能在工程体量还不是很大的时候,显得不是那么的重要,但是当工程逐渐变大,结构也变的越来越复杂的时候,有一个清晰合理的结构,容易配置的工程对整个团队来说都是一个福音。
### 🐕 [Text Kit Tutorial: Getting Started](https://www.raywenderlich.com/5960-text-kit-tutorial-getting-started?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more)
`TextKit` 是 iOS 7 开始推出的图文混排框架,其基于底层的 `CoreText`。`UIKit` 中的 `UILabel`、`UITextView`、`UITextField` 都构建在 `TextKit` 之上。本文介绍介绍了两部分内容:如何适配 `Dynamic Type` 特性;如何实现图文混排及文字环绕图片布局。
### 🐕 [【基本功】深入剖析Swift性能优化](https://mp.weixin.qq.com/s/U95QmOOjeXkk-yC23cuZCQ)
这篇文章的核心内容出自 [Understanding Swift Performance](https://developer.apple.com/videos/play/wwdc2016/416/),主要讲了 Swift 的一些优势以及苹果做了哪些方面的优化。所以推荐每个 Swift 的开发者都要仔细看一下这个 Session 的内容。
当然,因为 Swift 在不断的优化,视频内容的部分东西已经有点点过时了。我稍微补充一下:
- Existential Container 目前虽然是用 3 个 word 存储数据,但是在 ABI 稳定之前,这个大小一直还没有确认。同时,文中所说的 Existential Container 是 5 个 word 也不太恰当,更合理的是大于 4 个 word。比如 `Any` 的 Existential Container 只有 4 个 word,而 `Codeble` 的 Existential Container 大小为 6 个 word。
- 其次,对于 Indirect Storage With Copy-On-Write 的说法,在 [Understanding Swift Performance](https://developer.apple.com/videos/play/wwdc2016/416/) 指的是 Swift 3 的时候,类似于 Array 这类基础库的大数 struct 如何解决 Copy 问题。而不是对于所有 struct 实现了这个 COW。但是 Swift 4 的时候,苹果改变了策略,在编译器这边做了一定的优化,实现了“自动”实现 COW。
### 🐕 [One Quick Way to Drastically Reduce your iOS App’s Download Size](https://medium.com/@michael.eisel/one-trick-to-drastically-reduce-your-ios-apps-downlsize-ae68aad0d369)
大家都知道,app 的下载体积越小,用户需要等待的时间就越短,尤其是对于用 Swift 开发的 app,体积动辄几十兆,令人头疼。本文作者分析了影响 app 体积的几个方面和一些优化的方法,包括 bitcode、使用 xcrun 命令分析各部分所占空间等等。
### 🐕 [深入理解 Autolayout 与列表性能 -- 背锅的 Cassowary 和偷懒的 CPU](https://juejin.im/post/5bd5a546f265da0af033cee6)
Autolayout 的性能一直为人所诟病,也是列表卡顿的原因之一。本文作者从 Autolayout 的算法角度进行分析,介绍了 Cassowary 的基本原理,并根据文字渲染结果做了一些详细的测试,判断性能问题是苹果实现不当所致,而不完全是算法的原因。最后也介绍了作者自己实现的 Panda 框架,基于 Autolayout 算法的概念进行优化,感兴趣的朋友可以试一下。
### 🐎 [Class written in Swift](http://yulingtianxia.com/blog/2018/10/28/Class-written-in-Swift/)
纯 Swift 类的函数调用跟 OC 中的运行时消息发送机制是不同的,是在编译阶段就确定了调用哪一个函数。虽然 Runtime 的接口可以使用,但是却并不能保证返回结果的正确性。作者在自己写的某个开源库上的一个 issue,由于和 Swift 类有关,研究了下 Swift 编写的类。对于在使用 Swfit 过程中,在 Debug 或者其他情况有疑问的同学,可以看一下本文的分析。
### 🐕 [Specializing protocols in Swift](https://www.swiftbysundell.com/posts/specializing-protocols-in-swift)
这周的 Swift by Sundell 介绍了一个很有趣的泛型功能 —— 泛型协议特例化。这是 [Swift 4 时引入的功能](https://github.com/apple/swift-evolution/blob/master/proposals/0142-associated-types-constraints.md),让我们在继承泛型协议的同时约束 associatedType 的类型,听起来很拗口难懂,目前在标准库里有一个非常标准的示例 `SubSequence`,大家一看就能理解:
```swift
protocol Sequence {
associatedtype SubSequence : Sequence
...
}
protocol Collection: Sequence where SubSequence: Collection { ... }
```
`Collection` 通过 `where` 从句对子序列的类型进行约束,让 `Collection` 的子序列必须也遵循 `Collection`(而不只是 `Sequence`)。
如果你觉得这个例子离业务太远的话,那就可以看看 Sundell 在文章里介绍的一些离业务更近的用例。
## 工具
### [iOS Project Template](https://github.com/messeb/ios-project-template)
这是一个可进行代码签名、持续集成、项目分发的项目模版。它为新项目提供了一个起点,可以方便的进行项目构建。这个模版中提供了一个 `Core` 框架,要想用于自己的项目,还需要修改一些文件的某些配置和内容。感兴趣的朋友可以试试看,或许它能够帮到你。
### [Eliminate Unused Swift Code](https://peripheryapp.com)
这是一个可以移除 Swift 项目中所有没用到的代码的工具,帮助你把项目变得更加干净。注意目前版本的 CocoaPods(1.5.3) 会导致它不能正常工作,升级到 1.6.0.beta.2 即可。这个工具免费即可使用,但是充钱可以变得更强。
## 代码
### [CodyFire](https://github.com/MihaelIsaev/CodyFire)
CodyFire 是基于 Alamofire 的 Codable 协议 API 请求管理库,使你庞大的网络请求代码,变的更简洁,易于维护。Swift 由于类型安全的特性,对于像 JSON 这类弱类型的数据处理一直是一个比较头疼的问题。Swift 4 中新增的 Codable 协议解决了字典与模型之间转换的问题,Codable 协议也让 API controller 的构建代码变的十分优雅。 CodyFire 能自动根据所运用的环境,切换 baseURL,能方便的添加公共头、对异常状态统一处理、对请求进行取消、设置超时,或者预防请求返回过快,添加交互式延时(不用再担心,网络太快,等待动画没有很好的执行。小编和 CodyFire 作者都非常喜欢这个功能)。还能串行或并行,使用链式调用进行多个请求,并对结果进行统一处理。
## 内推
- [北京-百度网盘 持续招 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),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820)
## 说明
🚧 表示需翻墙,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)