阅读 3194

老司机 iOS 周报 #104 | 2020-03-09

老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

近期 iOS 开发者需要关注的官方新闻

@looping:主要内容如下:

  • 目前 iOS 13 覆盖率已经达到 77%
  • 从 4 月 30 日起,所有提交到 App Store 的 iPhone 应用都必须使用 iOS 13 SDK(Xcode 11) 打包,也就是说要完成 iOS 13 适配
  • 再次强调了从 4 月 30 日起,所有提交到 App Store 的应用都必须使用 storyboard 作为 launch screen,并要求 iPhone 应用要适配所有的 iPhone 屏幕尺寸
  • 另外,审核条款也有更新(Updated App Store Review Guidelines Now Available),可浏览知识小集团队整理的变更内容:划重点:《App Store 审核指南》更新条目一览

文章

🌟 🐕 Project LightSpeed: Rewriting the Messenger codebase for a faster, smaller, and simpler messaging app

@zvving:Facebook 新版 iOS Messager 为了达成『更快、更小、更简单』的目标,进行了一项罕见的工作:重构架构并重写所有代码。

  • 重写效果:保留大多数功能,启动快一倍,大小为之前四分之一,代码从 170w 行降低到 36w 行
  • 追求架构全局最优的四原则:
    • 优先使用系统实现,少部分跨平台逻辑扩展 C 实现
    • 合并重用 UI 逻辑
    • 基于 SQLite 打造通用平台 MSYS:驱动 UI 业务,自动化测试 100% 覆盖
    • 统一客户端与服务端交互&同步机制
  • 面对未来的代码增长,为每个功能设置复杂度预算,长期评估质量

架构的抉择来自于 FB 工程师对如何用最新技术打造 IM 项目的整体思考:使用最新系统实现,追求复用,针对 IM 打造 DB 驱动核心,保持简单。读起来颇有『重剑无锋,大巧不工』的味道。

顺带一提:这是一次 native to native 的重写,和 RN 没有直接关系。

🌟 🐢 系列文章 - Swift Intermediate Language 初探

第二篇 - 真实案例引发的 iOS 底层实现窥探

@享耳先森:Swift 是构建在 LLVM 上,使用 LLVM 中间表示(IR) 和 LLVM 不同后端生成机器语言。除此之外,Swift 编译器在生成 IR 之前,还设计了一门新的高级中间语言 Swift Intermediate Language,简称 SIL,SIL 会对 Swift 进行高级别的语意分析和优化。

当你遇到一些无法理解的表面现象,没有办法通过文档或者前人经验解读问题的实质,想要尝试探究编程语言背后的实现细节,那么就需要跨越语言本身的了解,向下去专研编译器的实现细节。系列文章使用项目中实际遇到的一个真实案例,从一个具体的 UITableView 实现的例子引出,试图通过 SIL 这个中间语言,探究 Swift 背后的一些实现细节,帮助我们理解一些问题。

推荐人:@kingnight

🐕 Flutter +MLKit = ❤

@J_Knight_:本文分享了一个 Flutter 与 MLKit 结合起来的 Demo:给名片拍照后提取其中的邮件地址。具体从下面三个步骤来展开:

  1. 照相(使用 Flutter 的 camera package)
  2. 使用 MLKit 提取照片中的文字(使用 textRecognizer 实例来提取出图片中的文字)
  3. 寻找文字中的邮件地址(使用正则表达式)

而且在每一步骤作者都提供了相关代码,并在文章中提供了 Demo 地址:Business-Card-Mail-Extractor

🌟 🐕 dna --- 一个 dart 到 native 的超级通道

@老驴:Flutter 最近是越来越火了,有越来越多的大厂开始进行尝试。

dna 就是饿了么团队针对 Flutter 使用中的痛点:原生能力的调用,做的一个 channel 类型的框架。本文中也叙述了在 Android 和 iOS 下的实现的一些具体细节,有兴趣的同学也可以学习参考一波。

🐕 My experience replacing CocoaPods with SwiftPM

@anotheren:Xcode 11 中已经自带集成了 Swift Package Manager,随着越来越多第三方库的支持,切换到 SPM 已经逐渐成为可能。本文介绍了当前切换到 SPM 存在的优势与不足,现在主要影响的问题还有:

  1. 不支持 Objective-C 和 Swift 的混合使用
  2. 不支持资源文件

🐢 深入剖析 WebKit

@kyo:虽然苹果从 iOS 8 开始就引入了 WKWebView,但在过去很长一段时间里是允许 UIWebview 和 WKWebView 共存的。苹果从 iOS 13 开始将 UIWebview 列为 Deprecated API,意味着开发者讲不得不升级至 WKWebView。而 WKWebView 和 UIWebView 是完全不同的。如果想要更好的了解 WKWebView,那么就有必要深入了解一下 WebKit。本文是 @戴铭 老师关于 WebKit 的一篇文章,对于升级至 WKWebView 遇到的一些问题,或者想更深入了解 WebKit ,这里可能就有你想要的答案。

推荐人:@sigsegv

🐕 iPhone可以运行Android了

@EyreFree:Project Sandcastle(沙堡计划,项目地址:projectsandcastle.org/),目前支持在 iPhone7 / 7 Plus 设备上运行 Android,本文记录了作者完整的尝试过程,有兴趣的朋友可以看一下。

工具

MultipeerKit

@含笑饮砒霜:MultipeerKit 是一个 Swift 软件包,它允许 iOS、macOS 和 tvOS 设备通过 Wi-Fi 网络,点对点 Wi-Fi 和蓝牙在它们之间交换数据。可以通过查看 Public API 文件夹中的 Swift 文件,了解使用 MultipeerKit 的更多信息。

Xcode Build Settings

@AidenRao:Build Settings 有数百种配置,这个网站整理了每一个配置的含义,可以随时用来查询。结合 MatttXcode Build Configuration Files,了解使用 xcconfig 来管理 APP 的 Build Settings。

内推

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

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

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

关注我们

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

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

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)