Skip to content

Commit

Permalink
update.
Browse files Browse the repository at this point in the history
  • Loading branch information
ParsifalC committed Apr 22, 2019
1 parent 519ed31 commit d0ca287
Showing 1 changed file with 23 additions and 55 deletions.
78 changes: 23 additions & 55 deletions Reports/2019/#64-2019.04.22.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,34 @@
# 老司机 iOS 周报 #1 | 2019-03-25
# 老司机 iOS 周报 #64 | 2019-04-22

![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) 提出。

## 新闻

> 行业相关的新闻趣事看法

## 新手推荐

> 收集一些对新手友好且质量不错的文章
### 🐎 [Designing Swift APIs](https://www.swiftbysundell.com/posts/designing-swift-apis)
[@zvving](https://twitter.com/zvving):如何写出可读性更高的代码?本文提供一些示例:参数标签可以帮助我们定义清晰易读的 API,嵌套类型能提供辅助的上下文关系,强类型为代码增添必要的仪式感,可扩展的 API 设计能同时满足便捷调用和丰富定制。

作者认为:人人都是 API 设计师,当我们在设计非私有属性或方法时,我们都在设计 API,你认为呢?

## 文章

### 🌟 🐕 [Humble Asset Catalog](http://lingyuncxb.com/2019/04/14/HumbleAssetCatalog/) & [Assets Catalogs 与 I/O 优化](https://juejin.im/post/5cb74d786fb9a068773948fc)

[@looping](https://github.com/looping):这两篇文章分别从各自的角度解释了在使用 Asset Catalogs 后,读取图片资源的速度变快的原因。

通过仔细阅读这两篇文章,我们能够更清晰地了解到:
- Asset Catalogs 和 car (Compiled Asset Catalogs) 文件的相关内容以及它们的作用
- CoreUI 框架对图片资源加载过程的一些逻辑细节

从而明白使用 Asset Catalogs 后,在加载资源上速度更快的原因:
- Asset Catalogs 会对图片进行分类压缩存储,减少在目标机型上的资源文件大小,提高读取速度
- 通过内存映射 (mmap),减少 I/O 操作,加速读取 car 文件内容
- car 文件实际上是一种特殊的 BOM 文件,能够在加载图片时直接获取 renditionrenditionKey 以及 attribute 这些信息,不同于从文件夹 (bundle) 中读取,需要执行耗时的 `-[CUIMutableStrucetedThemeStore canGetRenditionWithKey:]` 操作来读取 rendition 和 renditionKey

除了文章带给我们的结论,以及我们今后可以做的事情 (将常规资源文件都迁移到 xcassets 中) 之外,两位作者对问题的探寻和思考的方式也是非常值得学习借鉴的

### 🌟 🐢 [Let’s write Swift code to intercept SSL Pinning HTTPS Requests](https://medium.com/@kennethpoon/lets-write-swift-code-to-intercept-ssl-pinning-https-requests-12446303cc9d)

[@含笑饮砒霜](http://chinafish.news):现在几乎绝大部分的 iOS App 都使用了 HTTPS 请求,这极大提升了我们使用的安全性,但也不意味着这就是绝对安全的。
Expand Down Expand Up @@ -57,18 +71,17 @@

本文虽本意是针对 Web 开发提出观点,但是对 Mobile 开发也一样适用


### 🐕 [基于多重替换方式的 iOS 代码混淆方案](https://juejin.im/post/5cb6d65251882532ba3e929a)

代码混淆,是将计算机程序代码转换成难于阅读和理解但是功能上等价的行为可用于源代码,也可用于编译而成的中间代码混淆代码可以有效保护我们的源代码,阻止逆向工程,因为逆向可能会带来一些诸如程序漏洞等不可预知的问题
[@含笑饮砒霜](http://chinafish.news):代码混淆,是将计算机程序代码转换成难于阅读和理解但是功能上等价的行为。可用于源代码,也可用于编译而成的中间代码。混淆代码可以有效保护我们的源代码,阻止逆向工程,因为逆向可能会带来一些诸如程序漏洞等不可预知的问题。

目前常用的几种方法,像打乱代码格式,将代码中的元素,如变量函数等改写成无意义的名字,甚至是重写代码的部分逻辑等,都或多或少的存在问题比如对于支持反射的语言,代码混淆可能与反射发生冲突,被混淆的代码难于理解,而且也不能真正阻止逆向,只能增大逆向的难度

对安全性要求很高的场景,这些常规的混淆方式,并不能保证源代码的安全鉴于此,TalkingData 团队最终决定,自研一套能够完美集成到打包流程中实现自动化的无侵入的混淆工具由于不同业务线的要求并不一致,所以 TalkingData 自研的这套混淆工具未必适用所有业务线但文中提到的一些自研过程中可能会遇到的一些问题,值得我们去借鉴和思考

### 🐎 [Swift 5 Frozen enums](https://useyourloaf.com/blog/swift-5-frozen-enums)

在 Swift 5.0 中编译器针对使用 C style 枚举增加了一类提醒(即使 `switch` 已经覆盖了所有的 `case` 依然会有这样的警告):
[@没故事的卓同学](https://weibo.com/1926303682/profile):在 Swift 5.0 中编译器针对使用 C style 枚举增加了一类提醒(即使 `switch` 已经覆盖了所有的 `case` 依然会有这样的警告):

> Switch covers known cases, but 'XXXXX' may have additional unknown values,Handle unknown values using "@unknown default"

Expand All @@ -80,7 +93,6 @@

[@邦Ben](https://github.com/linwenbang):Swift 5 中的标准库中加入了 Result Enum (success / failure),该文作者通过一个 URLSession 的请求例子,演示了使用 Result Enum 改造过程。使用 Enum 会让你的程序看上去更为简洁以及意思明确,详细请看文章内容。


### 🐕 [Improve your iOS team’s productivity by building features as frameworks](https://medium.com/flawless-app-stories/improve-your-ios-teams-productivity-by-building-features-as-frameworks-9d2a64cbcab5)

[@老峰](https://github.com/GesanTung):如果你使用 Swift 开发过大一点的项目,那么你可能会有这样的感受,明明只是修改了一行代码,但却把整个 App 重新编译了一次,花费了很多时间。
Expand All @@ -89,58 +101,19 @@

尽管作者这一方案可以缩短编译时间,但如果 Framework 粒度太小,太多动态库反而会引起其他问题如增加 APP 启动时间App 安装包变大;粒度太大,每次修改代码又会涉及多个 Framework ,编译时间优化又不会很明显,感兴趣的读者可以借鉴这一思路,做些有益的尝试

### 🐕 [RxSwift & MVVM - How to use RxTests to test your ViewModel](https://benoitpasquier.com/how-to-use-rxtests-to-test-mvvm/)

[@Damonwong](https://github.com/Damonvvong): 之前我问过好多人这样一个问题,你觉得 Rx 框架到底解决了一个什么样的问题?虽然答案都不太一样,但是引入 Rx 框架,便于封装 ViewModel,然后编写单元测试提高应用稳定性是大部分人比较认可的一点。

所以推荐大家阅读一下作者写了三篇关于 RxSwift & MVVM 的文章:

- 第一篇是 [How to integrate RxSwift in your MVVM architecture](https://benoitpasquier.com/integrate-rxswift-in-mvvm/): 主要介绍了如何使用 RxSwift 编写 MVVM 结构的代码
- 第二篇是 [RxSwift & MVVM - An alternative structure for your ViewModel](https://benoitpasquier.com/rxswift-mvvm-alternative-structure-for-viewmodel/): 主要描述了一个 ViewModel 最基本的结构要怎么设计,我个人特别喜欢他在文中描述的 Intput 和 Output 的设计。这个设计也是为做单元测试做了一个很好的铺垫。
- 最后一是 [RxSwift & MVVM - How to use RxTests to test your ViewModel](https://benoitpasquier.com/how-to-use-rxtests-to-test-mvvm/): 讲的是如何利用前面的 VM 设计 结合 RxTest 编写单元测试。

### 🐕 [Humble Asset Catalog](http://lingyuncxb.com/2019/04/14/HumbleAssetCatalog/) & [Assets Catalogs 与 I/O 优化](https://juejin.im/post/5cb74d786fb9a068773948fc)

[@looping](https://github.com/looping):这两篇文章分别从各自的角度解释了在使用 Asset Catalogs 后,读取图片资源的速度变快的原因。

通过仔细阅读这两篇文章,我们能够更清晰地了解到:
- Asset Catalogs 和 car (Compiled Asset Catalogs) 文件的相关内容以及它们的作用
- CoreUI 框架对图片资源加载过程的一些逻辑细节

从而明白使用 Asset Catalogs 后,在加载资源上速度更快的原因:
- Asset Catalogs 会对图片进行分类压缩存储,减少在目标机型上的资源文件大小,提高读取速度
- 通过内存映射 (mmap),减少 I/O 操作,加速读取 car 文件内容
- car 文件实际上是一种特殊的 BOM 文件,能够在加载图片时直接获取 renditionrenditionKey 以及 attribute 这些信息,不同于从文件夹 (bundle) 中读取,需要执行耗时的 `-[CUIMutableStrucetedThemeStore canGetRenditionWithKey:]` 操作来读取 rendition 和 renditionKey

除了文章带给我们的结论,以及我们今后可以做的事情 (将常规资源文件都迁移到 xcassets 中) 之外,两位作者对问题的探寻和思考的方式也是非常值得学习借鉴的

### 🐕 [How to deploy a Swift backend on Amazon AWS](https://medium.com/@gianpispi/how-to-deploy-a-swift-backend-on-amazon-aws-ea9213518c43)

[@小非86](https://weibo.com/xuyafei86):目前 Swift 的后端框架主要有 Perfect、Vapor、Kitura 和 Zewo 等。[往期周报](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2329-2018.07.30.md) 推荐过使用 [Perfect](http://blog.yuusann.com/posts/article/18014) 开发后端的经验。本期推荐大家这篇使用 Kitura 开发后端的另一种尝试。

### 🐎 Conditional Compilation [Part 1](https://davedelong.com/blog/2018/07/25/conditional-compilation-in-swift-part-1/) [Part 2](https://davedelong.com/blog/2018/07/25/conditional-compilation-in-swift-part-2/) [Part 3](https://davedelong.com/blog/2019/04/09/conditional-compilation-part-3/)

[@四娘](kemchenj.github.io):之前我们在 [29 期周报](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2329-2018.07.30.md#-conditional-compilation-in-swift-part-1)里介绍过这篇文章的第一篇:

> 本文讲述了 Swift 中方的条件编译当然首先是传统的方法 arch(),作者对各个参数都做了详细的介绍不过随着 Swift 4.1 的到来,你更应该了解一下方便好用的 targetEnvironment()(SE-0190)其次是使用配置文件.xcconfig),这个方式其实被 CocoaPods 大量使用作者也用示例做出了详细的介绍,同学们不妨也在自己的工程中试一试

后面陆续写了 Part 2 和 Part 3,主要是介绍了跨平台代码库编译选项的一些控制方式,对这方面有疑虑的同学可以看一看

### 🐎 [Designing Swift APIs](https://www.swiftbysundell.com/posts/designing-swift-apis)
[@zvving](https://twitter.com/zvving):如何写出可读性更高的代码?本文提供一些示例:参数标签可以帮助我们定义清晰易读的 API,嵌套类型能提供辅助的上下文关系,强类型为代码增添必要的仪式感,可扩展的 API 设计能同时满足便捷调用和丰富定制。

作者认为:人人都是 API 设计师,当我们在设计非私有属性或方法时,我们都在设计 API,你认为呢?

### 🐕 [Disjoint-set union in C++ and Swift](https://medium.com/flawless-app-stories/disjoint-set-union-data-structure-in-c-and-swift-a52703b01fcb)

本文使用 C++ 与 Swift 实现了简单的并查集大家可以借此对比同一个数据架构在不同语言的实现


## 工具

### [Accio](https://github.com/JamitLabs/Accio)

Accio 是一个机遇基于 SwiftPM 和 Carthage 的包管理工具,其有以下特点:
Accio 是一个基于 SwiftPM 和 Carthage 的包管理工具,其有以下特点:

- 依赖预编译,也就是二进制化
- 自动集成到项目文件里,不像 Carthage 那样需要手动集成,这也解决了 Carthage 项目中最麻烦的部分
Expand All @@ -149,15 +122,10 @@ Accio 是一个机遇基于 SwiftPM 和 Carthage 的包管理工具,其有以

## 代码

> 库,代码段,开源app
### [Markdown Playgrounds for Swift](https://github.com/objcio/markdown-playgrounds)

[@莲叔](https://weibo.com/aaaron7/) Markdown Playgrounds for Swift 是 objc.io 基于 Swift5 开发的一款 markdown 编辑器,最大的特性就是在你 markdown 中的 Swift 代码可以被执行。对比传统 markdown 编辑器,核心就是实现了 Swift 语法的高亮以及将 Swift 代码提取出来后用 Swift REPL 程序去执行并拿到返回的结果(Swift REPL 程序就是终端中的 Swift 命令)。整个工具是开源的,并且 objc.io 有一整套配套的教学视频(第一章是免费的)一步步的教你如何写一个类似的工具出来,从工具的属性可以看出从中可以学到各种高级的字符串处理(如符号高亮、代码提取等),算是非常不错的 Swift 学习材料。

## 书

> 比较不错的书的推荐和书评

## 音视频

### 🌟 [深入了解 Flutter 的高性能图形渲染](https://mp.weixin.qq.com/s/RNhdYtoQ8RQcjIXJReGZWA)
Expand Down

0 comments on commit d0ca287

Please sign in to comment.