# 老司机 iOS 周报 #87 | 2019-10-21

![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://github.com/SatanWoo) 加入我们编辑部，同时也恭喜我们周报的编辑阵容继续升级，为大家提供更多有价值的内容！！

## 新闻

### 🌟 [Transporter Now Available on the Mac App Store](https://developer.apple.com/news/?id=10152019a)

[@anotheren](https://github.com/anotheren)：Xcode 11 中 Apple 移除了 Application Loader，导致如果你需要上传 ipa 或 pkg 只能使用 Archive 功能或者必须依赖 Xcode 10.3 或更早版本的 Application Loader。现在，Transporter 作为替代品，已经在 [Mac App Store](https://apps.apple.com/us/app/transporter/id1450874784?mt=12) 上线。并且你可以从它的名称变化发现，不仅是应用，现在所有 Apple 生态链中最终产品的交付均可由它完成。

## 文章

### 🌟 🐢 [前端从 0-1 学习](https://juejin.im/post/5d9fc32f5188256c6d51dae6)

[@张嘉夫](https://github.com/josephchang10)：由知识小集团队 [Lefe](https://github.com/lefex) 发起的前端小课，一本帮助你学习前端的多媒体电子书。每天一小课，分阶段、系统地学习前端知识，前端从 0 到 1。

### 🌟 🐕 [Flutter in action 闲鱼技术最佳实践](https://mp.weixin.qq.com/s/RzvJeT_w69oZJmS9JHGBCg)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：最近咸鱼技术组又开源了自用 Flutter 项目开发 CLI （[flutter-boot](https://github.com/alibaba-flutter/flutter-boot)）, 这对于混合开发来说简直是福音, 大大简化了 Flutter 开发在混合项目上的配置流程和难度。文末的福利更是给力, 放出了阿里系对于 Flutter 探索过程中一些实践经验 - Flutter In Action , 书中详细讲解了多个 Flutter 知名开源项目, 可谓是 Flutter 进阶必读参物。

### 🌟 🐎 [Objective-C objc_msgSend 方法的新原型](https://zhuanlan.zhihu.com/p/86358529)

[@五子棋](https://github.com/SatanWoo)：从事 iOS 开发的同学想必都对 objc_msgSend 这个函数不陌生，许多黑科技玩法都是依托于 objc_msgSend 自身的实现。本文从 objc_msgSend 自身的流程谈起，摸索函数原型在 ABI 不匹配情况下会产生的一些非预期现象，最终推导出苹果最近为什么需要修改 objc_msgSend 函数原型。

### 🐢 [Flutter 浪潮下的音视频研发探索](https://mp.weixin.qq.com/s/GqoAMeuv1VRDpWT65YMzsQ)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：本文分享内容主要分为四个方面，首先对 Flutter 有一个简单介绍以及说明选择 Flutter 作为跨平台框架的原因，其次介绍了 Flutter 中与音视频关系非常大的外接纹理概念，以及对它做出的一些优化，并且对闲鱼在音视频实践过程中碰到的一些 Flutter  问题提出了一些解决方案—— TPM 音视频框架。最后详细介绍了闲鱼 Flutter 多媒体的开源组件，包括视频图像拍摄组件、播放器组件、视频图像编辑组件等。这些组件正在逐渐开源，开发者在基于 Flutter 开发音视频应用时可以充分利用闲鱼开源出的音视频模块能力，搭建 APP 框架，尽可能的减少重复劳动。

### 🐢 [如何在 Flutter 上实现高性能的动态模板渲染](https://mp.weixin.qq.com/s/fX6DtXYtKw0hFqf7t---eA)

[@老峰](https://github.com/GesanTung)：本来介绍了闲鱼技术团队通过动态模板下发，实现 Flutter 端的动态化模板高性能渲染，包括 Flutter 在 Layout 过程中 RelayoutBoundary 优化、Element 更新优化、以及自定义 Widget、Element 以及 RenderObject 优化，虽然当前方案还存在一些问题，但为我们实现态模板渲染提供了思路。

### 🚧 🐎 [React Native App : White Label 101](https://medium.com/flawless-app-stories/react-native-white-label-101-163c1967c12a)

[@looping](https://github.com/looping)：本文介绍了使用不同的 target 构建 iOS 端 React Native 的 white label（贴牌，模板 app） 应用的一种方案。主要是通过 WhiteLabelConfig.tsx 在 RN 侧获取应用信息，原生则通过在 target 对应的 WhiteLabelConfig.m 里提供应用信息，这样不同的 target 就能显示不同的内容了。

Android 也有类似方案，参考 [White Label 102](https://medium.com/@najera.sean/react-native-white-label-102-aba9c56f385c)。

### 🐕 [macOS 内核之 hw.epoch 是个什么东西？ | 枫言枫语](https://justinyan.me/post/3935)

[@四娘](https://kemchenj.github.io)：作者在学习 macOS 系统的 `sysctl()` 函数时，其中一个用来标记计时标准的常量 `EPOCH ` 在电脑里打印出来却与实际不相符，所以一路追查到 BSD 层去查看。虽然最后还是没有了解到原因，但也是一次有趣的代码之旅。

## 工具

### [XcodeCleaner-SwiftUI](https://github.com/waylybaye/XcodeCleaner-SwiftUI)

[@水水](https://www.xuyanlan.com)：这个 MacOS 的应用可以帮助你清除遗留以及废弃文件，从而极大的节省硬盘空间，你可以每月或者每周运行一次进行清理。更关键的是它是开源的，使用 SwiftUI 进行开发，对实现原理感兴趣的小伙伴可阅读源码一窥究竟。

### [lldb-symbolic](https://github.com/luoqisheng/lldb-symbolic)

对于线上的 Crash ，有很多工具可以去采集，如 Fabric 等，以便我们可以方便的定位 Crash 的原因。而对于开发中的 Crash ，我们依然可以通过异常断点或者查看堆栈的方式来做，但操作相对来说还是繁琐一些。于是，作者写了这个库来简化这一流程，有兴趣的同学可以看一下，也可以顺带了解下定位 Crash 的方式。

## 代码

### 🌟 [Impact - A crash detection and recording library](https://github.com/ChimeHQ/Impact)

[@xiaofei86](https://weibo.com/xuyafei86)：Impact 是一个用来检测和记录崩溃的工具库，它并不是一个完整的崩溃报告系统，但一定是其中最重要的一环。进程内的崩溃报告系统的运行环境是十分糟糕的，现有的第三方系统在某些方面都存在着一定的权衡与取舍。苹果自己的崩溃系统对开发者又十分不友好。而本仓库的作者在 [Crashlytics](https://firebase.google.com/products/crashlytics) 工作多年，也与 [PLCrashReporter](https://www.plcrashreporter.org/) 有过合作，在这方面的拥有相当多的经验。尽管进程内的崩溃报告还存在很多难题，但正因此才使得这项工作充满魅力，相信读者们也会在深入理解这个领域后受益良多。

### [ASCollectionView - A SwiftUI port of UICollectionView](https://github.com/apptekstudios/ASCollectionView)

[@享耳先森](https://github.com/iblacksun)：开始使用 SwiftUI 了吗？那你应该看看这个库：Swift UI 下对 UICollectionView 和 UITableView 的实现，支持 `preloading` 和  `onAppear/onDisappear`，还支持 `UICollectionViewCompositionalLayout`。

### [NEKit - A toolkit for Network Extension Framework](https://github.com/zhuhaow/NEKit)

[@EyreFree](https://weibo.com/eyrefree777)：NEKit 能够在我们构建一个基于 `NETunnelProvider` 的 Network Extension 应用时提供各种绕过网络过滤和审查所需的功能，同时尽可能减少对框架本身的干扰。它也是目前 GitHub 上与 Network Extension 相关的库中 Star 数最高的。同时我们也发现有国内的开发者基于该库实现了一些不可描述的功能，并开源了相应源码 [BearFree](https://github.com/zlyBear/BearFree)，可以作为使用示例，有需求的同学可以自行学习 & 研究。

## 内推

老司机周报团队联合知识小集和 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）


