# 老司机 iOS 周报 #78 | 2019.08.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) 提出。

## 新手推荐

### 🌟 🐕 [swift-best-practices](https://github.com/Lickability/swift-best-practices)

随着 Swift 的稳定，越来越多的项目开始尝试 Swift 这门「新」的语言，当然会有一部分新手不太清楚如何正确的在项目中使用 Swift。[swift-best-practices](https://github.com/Lickability/swift-best-practices) 就告诉了你答案。内容包括但不局限于这几点：基础 MVVM 结构、通用控制器类型、文档的编写等。

### 🐕 [iOS 开发舆图](https://ming1016.github.io/2019/07/29/ios-map/)

[@老峰](https://github.com/GesanTung)：本文是来自戴铭的 iOS 开发全景图以及一些相关资料整理，成体系地罗列了 iOS 开发的知识点与技能栈，方便我们在日常开发中查漏补缺，主要包括以下内容：

- iOS 基础：列表、布局、图标、图形、多媒体、AppServices、动画
- iOS 系统：XNU、dyld、Mach-O
- 编程语言
- 开发工具
- 计算机基础
- 通用知识
- 视野

## 文章

### 🌟 🐕 [Deriving Reactive from Imperative: An Introduction to Duals](https://jasdev.me/duals)

[@莲叔](https://weibo.com/aaaron7)：Swift 的函数式编程从 Swift 语言发布之初、宣布支持 First Class Function 开始，就一直备受关注，开源社区陆续贡献了 RAC4，RxSwift 等基于 Swift 函数式特性实现的、方便用户更轻松的在日常的业务开发中应用函数式特性的开发框架。最近 Apple 官方推出了 Combine 框架，给社区增加了更多的信心。

虽然如此，但很多同学对函数式编程仍然觉得云里雾里，本篇文章开辟了一个新的视角，对比了命令式编程与函数式编程的其中一个分支：响应式编程, 并从函数式编程的角度，论证了一定程度上，响应式编程和命令式编程是对偶关系。作者首先从范畴轮的角度解释了什么叫对偶，并基于命令式编程中的 IteratorProtol 以及 Sequence，来对比响应式编程中的 Subscriber 和 Publisher，并用之前对于对偶的定义来论证了他们存在的对偶关系。

整篇文章视角新颖，能够带给人很多思考，读起来不算轻松，建议花时间消化消化。

### 🐕 [分析一个 App 需要的技术手段](https://mp.weixin.qq.com/s/ZmDd3tOkHwSqCCsG7kfokQ)

[含笑饮砒霜](https://weibo.com/chinafishnews/)：有时候看见喜欢的 App 可能会想要对它的实现一探究竟，本文作者以微信为例，站在逆向的角度，列举了分析一个 App 所需要的技术手段，包括：

- 砸壳 - ipa 获取
- 手机越狱
- CaptainHook Hook 代码
- Logos 语法
- 查找可执行文件技巧
- class-dump 使用
- Cycript 调试程序
- MachOView
- 在 Cycript 和 LLDB 中使用私有的方法调试
- 使用 NSInvocation 调用方法
- 查看 App 中的字符串
- UIDebug 工具

使用上述技术手段，可以获取到 App 的相关信息，包括：

- 头文件
- 第三方库
- UI 查看
- 继承层级
- 数据库设计
- 沙盒目录
- Pod 集成
- 查看网络请求数据
- 查看动态库

推荐阅读
- [WeChatRedEnvelop 抢红包](https://github.com/buginux/WeChatRedEnvelop)
- [深入iOS系统底层之汇编语言](https://www.jianshu.com/p/365ed6c385e5)

### 🐢 [iOS Memory 内存详解](https://juejin.im/post/5d3ee77ef265da039f1290b2#heading-2)

[@J_Knight_](https://github.com/knightsj)：本文以 iOS 内存作为主题，以一般的操作系统的内存机制、iOS 系统内存、iOS APP 内存管理等三个层面进行了介绍。在文章后面还提供了一些内存分析的方法以及参考资料。想比较全面了解 iOS 内存相关知识的读者可以看一下这篇文章。

### 🐢 [Rule-based logic in Swift](https://www.swiftbysundell.com/posts/rule-based-logic-in-swift)

[@享耳先森](https://github.com/iblacksun)：对于系统设计而言，只考虑技术架构的话其实相对简单(比如使用 MVVM 还是其他架构模式)，虽然架构模式非常重要，但我们还是可以通过对一些次要代码或结构进行改进来提升代码质量，所谓见微知著。本文通过 URL 匹配这一点入手，介绍如何将原来难以维护的代码抽象出一些规则来进行重构。

### 🐎 [Swift 5 之后 "Method Swizzling"？](https://mp.weixin.qq.com/s/8z7A_-d0ZvvAJ3155DogvA)

[@四娘](kemchenj.github.io)：Swift 5.1 里新增了一个私有功能叫做 Dynamic Method Replacement，可以简单地理解为一个类型安全的 Method Swizzle。

瓜神在这篇文章里给我们介绍了这个功能的使用方法以及内部的实现，并且通过阅读源码解决了连环 Hook 失效的问题。

## 工具

### 🚧 [iOS Continuous Integration with GitLab CI, Fastlane & OTA Installation](https://medium.com/flawless-app-stories/ios-continuous-integration-with-gitlab-ci-fastlane-and-ota-installation-from-gitlab-pages-f312e07ab06e)

[@水水](https://www.xuyanlan.com/): 本文介绍了基于 GitLab 的持续集成、Fastlane、无线下载安装。在本文中，我们将讨论的点有:

- 为什么选择 Gitlab？
- Gitlab CI 和 Runner
- Gitlab Runner 安装
- Fastlane 简介
- CocoaPods，Bundler 和 Ruby gems 权限
- 配置 Fastlane
- 为我们的 TestProject 配置Gitlab CI
- 来自 Gitlab 的无线 IPA 安装

值得一提的是，[Gitlab.com](https://about.gitlab.com/) 为我们提供了免费的 CI。希望本文介绍的工具对正在做持续集成的团队或个人有所助益。

### [Swift 5 for Android is here](https://www.scade.io/download/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web)

一份代码，多端运行一直是我们移动端非常关注的点，业界也有很多不同的方案，如 Flutter、Qt、React Native、Weex 等等，而这些大多是采用 C++ 或者 JS 作为开发语言。Swfit 作为苹果力推的开发语言，社区成员从一开始就希望它可以移植到更多的平台，像之前 Github 上就有用 Swfit 来开发 web 的 demo。如今，SCADE 为我们带来了 Swift for Android，它使用 iOS 和 Android 各自的 Native 控件，保持了平台 UI 的差异性，然后通过统一的 Swfit API 进行调用。同时，它的图形引擎支持很多动画效果，并且在屏幕适配上也很简单，这可以让我们开发更加复杂的应用。

## 代码

### [SwiftUIX: An extension to the standard SwiftUI library.](https://github.com/SwiftUIX/SwiftUIX)

[@张嘉夫](https://github.com/josephchang10)：SwiftUI 标准库的扩展，力求完善尚未成熟的 SwiftUI，提供了大量组件、扩展和工具。

### [apple_bleee](https://github.com/hexway/apple_bleee)

[@anotheren](https://github.com/anotheren)：这是一份通过蓝牙/Wi-Fi获取 iPhone 用户信息代码示例，攻击者可以在特定条件下，获取到受害者的部分设备信息甚至手机号码。严格的来说这不是一种系统漏洞，这是 Apple 生态的一部分，这种东西一方面能够使人享受整个 Apple 生态圈的便利，但是另一方面也会造成少数窃取个人隐私的可能。具体也可以看看少数派的[这篇文章](https://sspai.com/post/55920)。

## 音视频

### 🌟 [用 Flutter 开发 iOS 应用](https://www.bilibili.com/video/av61563879/?redirectFrom=h5)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Google 官方为了能让 iOS 开发出身的同学用上 Flutter 真的是操碎了心，用尽了办法。这次 Google 官方在 B 站发布了一个视频，内容是讲解如何用 Flutter 开发 iOS 应用，由官方的两名工程师讲解，不仅仅讲解技术，更带有不少平台设计美学讲解。喜欢视频学习的同学不要错过，弹幕和评论也很精彩哟😄

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

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

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

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

## 说明

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

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）


