# 老司机 iOS 周报 #91 | 2019-11-18

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

## 新闻

### [Apple Push Notification Service Update](https://developer.apple.com/news/?id=11042019a)
[@looping](https://github.com/looping)：近期苹果发布通知，将在 2020 年 11 月后不再支持基于二进制协议的 APNs，建议我们尽快把推送服务更新到基于 HTTP/2 的 API 上。关于 APNs 详细内容可查看官方文档 [APNs Overview](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html)。

### [You Cannot Submit an Electron 6 (or 7) App to the Apple Store](https://david.dev/you-cannot-submit-an-electron-6-or-7-app-to-the-apple-store)

[@张嘉夫](https://github.com/josephchang10)：开发者 David.dev 报告，App Store 会拒绝使用 Electron 6 或 7 开发的 app，原因是使用了非公开框架，包括 CAContext、CALayerHost、NSAccessibilityRemoteUIElement、NSNextStepFrame、NSThemeFrame 以及 NSURLFileTypeMappings 等。Apple 在回复作者的消息中还说，如果在未来提交的 app 中继续使用或隐瞒非公开 API，可能会导致 Apple 开发者账号被停用，并从 App Store 移除所有相关的 app。

## 文章

### 🐢 [做一个高一致性、高性能的Flutter动态渲染，真的很难么？](https://mp.weixin.qq.com/s/R6IxJqawwbmlWvlwb3ZXww)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：最近闲鱼 Flutter 小组在尝试使用 DinamicX 的 DSL ，通过下发 DSL 模板实现 Flutter 端的动态化模板渲染。在解决了性能方面的问题后，又面临了一个新的挑战——渲染一致性。本文详细讲解了, 在实现的过程中各类坑的拆解, 从思路到实现的全过程, 抽丝剥茧带你一步步实现。

### 🐕 🌟 [Swift 在 GAIA 平台云端一体化的探索](https://mp.weixin.qq.com/s/7B2FDBZ_vnvswiYWjLih4Q)
[@莲叔](https://weibo.com/aaaron7)：Server Side Swift 一直以来都随着 Swift 的发展而发展，虽然陆续有公司、团队开始在 prod 环境使用 Swift 进行开发，但整体来看仍然相对小众，相比 GO、Java 等传统 Server-side 的语言仍有较大的差距。从另一方面，近段时间的服务端技术也得到了长足的发展，Faas(Function as a service) 逐步进入人们的视野，Faas 在容器化的基础上，将后端的服务更进一步的抽象为一个个函数，由于隐藏了大量的服务侧的技术细节，Faas 让前端、移动端开发人员全栈的完成端到云的逻辑成为可能，这似乎是 Server-Side Swift 新的机会。

作者就做了这样的一件事，在淘宝的 Faas 平台：GAIA，实现了 Swift 语言的适配。这样便可以用一门语言全栈的快速完成一个 App 的落地。作者分享了一个具体的案例以及对应的技术细节，虽然从文章本身无法窥见全貌，但仍然算一种 mind-opener，引人思考。感兴趣的同学可以阅读。

### 🐕 [Understanding the iOS 13 Scene Delegate](https://www.donnywals.com/understanding-the-ios-13-scene-delegate/)
[@anotheren](https://github.com/anotheren)：iOS 13 带来了全新的 Scene Delegate 以适配应用多窗口。本文详细讲解了 Scene Delegate 对传统的 App Delegate 的替换要点，对于理解全新的 Scene Delegate 所承担的职能很有帮助。无论你是否已迁移至 Scene Delegate，本文都值得一读。

### 🐕 [基于 SwiftSyntax 写一个命令行工具检测 Xcode 项目中不用的图片资源](https://juejin.im/post/5dc2a969f265da4d2a432249)
[@anotheren](https://github.com/anotheren)：类似的工具虽然已经有了喵神的 [FengNiao](https://github.com/onevcat/FengNiao)，但是重复造轮子的过程中总能够学到新的东西。作者分析了用于路径检索的 [Path.swift](https://github.com/mxcl/Path.swift) 以及用于语法分析的 [SwiftSyntax](https://github.com/apple/swift-syntax)，并将他们组合成一个完整可用的工具。

### 🐕 [iOS 程序员眼中的 Emoji](https://juejin.im/post/5dc3b9a46fb9a04a95289a84)
[@zvving](https://github.com/zvving)：😂有人评价 Emoji 是世界唯一通用语言。🤔你思考过它的编码原理吗？

从浏览 Emoji 到查看对应编码，从 ASCII 到 Unicode 基础概念，从 Emoji 拼接到对应 iOS 字符处理。本文清晰明了，带你快速了解 Emoji 编码基础原理。

### 🐕 [5 Reasons Why Apps Fail & How To Avoid Them](https://simpleprogrammer.com/why-apps-fail)
[@老驴](https://www.weibo.com/6090610445)：我们读者里应该有很大一部分在做个人项目，比如在工作之余做个 App 上架之类的。这个时候，大家也就变身 PM，努力用各种方法去推广自己的产品，让自己的产品能被更多的人喜爱。

这篇文章就用了比较概括的语言，阐释了作者心中的五种最常见的产品失败的原因，同时也给出了一点建议。来读读文章看看能否从中学到点什么吧。

### 🐕 [Flutter 性能分析](https://mp.weixin.qq.com/s/VydPJnfEno0-yvGdS5P0Ug)
[@五子棋](https://satanwoo.github.io)：性能优化是所有应用开发者都必须面对的一个挑战。而随着 Flutter 等跨平台框架的不断涌现，移动端的开发范式也正经历着转变。
本文从方法论和对应工具使用等两个层面阐述如何分析 Flutter 中的性能问题。文中的一些经验对于帮助大家快速定位问题能起到不小的作用。

## 工具

### [iShot 截图工具](https://apps.apple.com/cn/app/ishot-%E6%88%AA%E5%9B%BE-%E9%95%BF%E6%88%AA%E5%9B%BE-%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/id1485844094?mt=12)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：Mac 自带的截图功能，大部分使用场景下基本足够，但长截图的痛点苹果迟迟没有成全用户。相信不少用户曾被推荐 Xnip 这款截图工具，但毕竟是付费的。iShot 工具的出现应该会让不少 Xnip 用户倒戈阵营，iShot 是 Mac 上一款免费优秀、功能全面的区域截图、窗口截图、长截图、延时截图、快速标注的工具，小巧实用，非常适合对截图有多重需求的用户。

### [Topology](https://github.com/le5le-com/topology)
[@Jimq](https://github.com/waz0820)：Topology 是一款开源的基于 canvas + typescript 的绘图引擎，可用于实现软件架构图、微服务部署结构图、流程图、活动图、类图、时序图、SCADA 等，也可以按照自己的想法实现任何想要的图形库。

官方有基于 Topology 实现的在线绘图平台，可在线编辑，一键保存到云服务器，免费使用，且前端开源。

## 代码

### [xcdiff - A tool which helps you diff xcodeproj files](https://github.com/bloomberg/xcdiff)
[@xiaofei86](https://weibo.com/xuyafei86/)：一个用来对比 xcodeproj 文件的开源库，能够输出更易于理解的对比结果。关于使用场景，作者举例：“当我们使用工具来生成 xcodeproj 文件时，对比 xcodeproj 文件能够增强我们对迁移过程的信心”。推荐给有需求的同学。

### 🐕 🌟 [LDNetDiagnoService](https://github.com/Lede-Inc/LDNetDiagnoService_IOS)
[@莲叔](https://weibo.com/aaaron7)：如果关注用户反馈的开发者可能多多少少都会遇到这样的一个无力时刻：用户反馈使用 App 期间遇到网络问题无法正常使用，但缺乏相应的信息来判断是 App 本身的问题还是用户的设备所处的环境问题。LDNetDiagnoService 是一个网络诊断的库，基于 ping 和 traceroute 的原理对指定的域名进行测试，并生成诊断报告。结合该库，在用户网络出错的时候运行该诊断，想必能更好的协助用户和开发者定位原因。有类似困扰的开发者不妨一试。

### [UIFontComplete](https://github.com/Nirma/UIFontComplete)
[@anotheren](https://github.com/anotheren)：这是一个可以安全调用字体的管理库，使用 enum 将字体的调用方式进行了封装，而不使用字符串这种不安全的方法。同时支持 iOS 和 tvOS。

### 🐎 [FSPagerView](https://github.com/WenchaoD/FSPagerView)

[@老峰](https://github.com/GesanTung)：FSPagerView 是一个 Swift 实现的优雅轮播图库，它可以在制作横幅视图、产品展示、欢迎 / 指南页面、屏幕 / 视图控制器滑块等为我们带来很大的便利。

## 内推

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


