# 老司机 iOS 周报 #147 | 2021-02-01

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

### 🌟 🐕 [AppTrackingTransparency 的要求即将生效](https://developer.apple.com/cn/news/?id=8rm6injj)

[@极速男孩](https://github.com/ztlyyznf001)：苹果在初春发布的 iOS 14、iPadOS 14 和 Apple tvOS 14 更新版本中要求 APP 通过 AppTrackingTransparency 证的用户同意来获取广告标识符，在未征得同意的情况下，设备的广告标识符都为零。同时增加 app 的“私人点击测量”支持，来让用户可以测量网站的广告活动。


## 文章


### 🐢 🌟 [抖音品质建设 - iOS启动优化《实战篇》](https://mp.weixin.qq.com/s/ekXfFu4-rmZpHwzFuKiLXw)

[@Leo](https://github.com/leomobiledeveloper)：文章从启动监控，分析工具以及最佳实践三个角度详细介绍了抖音 iOS 客户端是如何做启动优化的。即包括了启动任务管控，预加载等常规方案，又介绍了动态库懒加载，background fetch 等非常规方案，推荐阅读。

### 🐕 🌟 [基于 Flutter 的移动中间件体系和音视频技术](https://mp.weixin.qq.com/s/9b4T9dU5PUaUSzwi32GSGQ)

[@zvving](https://github.com/zvving)：由 UC 团队为大家带来的 Flutter 引擎技术沙龙分享第三篇，从播放器视角分析如何拆分、共建 Flutter 业务，并总结在业务定制、播放性能、高效视频编辑部分的实践经验。有相关领域探索诉求的小伙伴不容错过。

### 🐕 [谈 UIKit 和 CoreAnimation 在 iOS 渲染中的角色（上）](https://mp.weixin.qq.com/s/PgdH8x8nrC9SRU6nMErH8Q)

[@老驴](https://www.weibo.com/6090610445)：iOS 开发者不可避免的就是写各色各样的 UI 了，而写 UI 又不能避免用到 UIKit 和 CoreAnimation 这两个 framework 了。只是平时大家也只是用 UIKit 和 CoreAnimation，很少会去深究背后是怎么工作的。这篇文章就很好的介绍了 iOS 渲染是怎么工作的。文章还有下部分，见参考链接。

参考链接：
[谈 UIKit 和 CoreAnimation 在 iOS 渲染中的角色（下）](https://mp.weixin.qq.com/s?__biz=MzA5MTM1NTc2Ng==&mid=2458325030&idx=2&sn=473e586bfde4b73d70fe0a57d66dfe28&chksm=870e1f3fb07996296305bafcc8a0801b0c57619635a3bc7a8e4b836e7fc6553e8b92879d3b78&cur_album_id=1700205981982343172&scene=189#rd)

### 🐕 [WKWebView 请求拦截探索与实践](https://mp.weixin.qq.com/s/u1fzioTZFLUpDEhSzUMRug)

[@JonyFang](https://github.com/JonyFang)：想要达到 WebView 加载速度提升的技术方案之一是离线包技术，离线包技术中最关键的环节是拦截 WebView 发出的请求将资源映射到本地离线包。而对于 WKWebView 的请求拦截，iOS 原生并没有提供直接的请求拦截能力，本篇主要是围绕 WKWebView 的请求拦截进行展开。

网易云音乐大前端团队通过将 iOS 原生 `WKURLSchemeHandler` 与 `JavaScript` 脚本注入结合的方式，实现了 WKWebView 在离线加载、免流等业务中需要的请求拦截能力，解决了拦截过程中可能存在的重定向、请求体丢失、Cookie 不同步等问题，并能以页面为维度进行拦截隔离。


对于体积较大的网页，离线包技术能够一定程度上明显的降低网络加载耗时的问题。

### 🐕 [听说你想写个虚拟机（一）？](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247484228&idx=1&sn=704addfc6b1e50c7dedf1ad61787358d&chksm=cf558c8cf822059a11e9062f73266ebc32562f2437a29c9a06ce4ff9d298b637b6b699edd20d&token=1309308849&lang=zh_CN#rd)

[@老驴](https://www.weibo.com/6090610445)：大部分开发者应该都或多或少用过虚拟机，但是也很少有人去深究过虚拟机是怎么工作的。这篇文章就带你从零开始写虚拟机，看懂这篇文章所需要的，只是一点基础的 C 语言知识。作者在文章最后也把代码放到了 Github 上，有兴趣的话可以来学习一下。

### 🐕 [关于 SwiftUI State 的一些细节](https://onevcat.com/2021/01/swiftui-state/)

[@J_Knight_](https://github.com/knightsj)：本文介绍了作者在 State 的使用上发现的一个问题，并通过研究 State 的实现机制来给出了相应的解决方案。也同时类比了 StateObject、Binding 和 ObservedObject 在使用上的相同点和不同点。

### 🐢 [Core Animation 动画全析](https://juejin.cn/post/6920908515758309383#heading-41)

[@AidenRao](https://weibo.com/AidenRao)：《[iOS 核心动画高级技巧](https://zsisme.gitbooks.io/ios-/content/index.html)》是一本不错的书，文章作者对其总结的很精髓，并附上了很多自己的 demo，很适合做学习动画的阅读资料。

## 工具

### [Sloc Cloc and Code](https://github.com/boyter/scc)

[@EyreFree](https://github.com/EyreFree)：SCC 是一个非常快速精确的代码计数器，一个用 Go 开发的类似于 cloc、sloccount 和 tokei 的工具。用于计算许多编程语言中源代码的物理行、空行、注释行和物理行。

## 代码

### [SwiftUIKitView](https://github.com/AvdLee/SwiftUIKitView)

[@四娘](https://kemchenj.github.io/)：这个库让我们可以在 SwiftUI 很方便地直接使用 UIKit 的 View：

```swift
import SwiftUI
import SwiftUIKitView

struct SwiftUIwithUIKitView: View {
    var body: some View {
        NavigationView {
            UILabel() // <- 这里可以使用任何 `UIKit` 的 view.
                .swiftUIView(layout: .intrinsic) // <- 这个函数会返回一个 SwiftUI 的 `View`.
                .set(\.text, to: "Hello, UIKit!") // <- 使用 KeyPath 来更新数据
                .set(\.backgroundColor, to: UIColor(named: "swiftlee_orange"))
                .fixedSize()
                .navigationTitle("Use UIKit in SwiftUI")
        }
    }
}
```

## 赞助者

虚位以待..

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 iTDriverr 哦~**

## 内推

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

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

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

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

## 关注我们

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

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

## 说明

🚧 表示需某工具，🌟 表示编辑推荐

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