老司机 iOS 周报 #96 | 2019-12-23

5,651 阅读7分钟

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

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

文章

🐕 iOS 微信编译速度优化分享

@J_Knight_:作者首先列举了调研过的,目前已有的编译速度优化方案,然后分享了微信使用的编译速度优化方案:

  1. 优化头文件搜索路径
  2. 关闭 Enable Index-While-Building Functionality
  3. 优化 PB/模版,减少冗余代码
  4. 使用 PCH 预编译
  5. 使用工具优化头文件引入;尽量避免头文件里包含 C++ 标准库

而且在分享具体方案的过程中,还简单介绍了编译原理的知识,以及分析耗时的工具。对编译速度优化感兴趣的读者可以学习一下此文章。

🐎 Flutter: 首个面向环境计算打造的 UI 平台

@邦Ben:文章中写道,在这个新兴世界中,大家关注的焦点也开始从单一设备转向环境——一个允许您随时随地获取服务和软件的环境。我们将其称为环境计算 (ambient computing)。

从这里我们可以了解到 Flutter 跨平台的决心和愿景。文章中大略总结了 Flutter 的近况,没了解过的可以看下,然后挑感兴趣的深入了解一番。

  • Flutter 发布 1.12
  • Flutter web 支持 beta 版
  • 可以发布 macOS App
  • Dart 2.7 发布
  • Supernova / Rive / Adobe 等在设计与原型工具中,增加对 Flutter 的支持,还支持设计稿导出 Flutter 代码

🐕 React Native 在美团外卖客户端的实践

@looping:MRN(Meituan React Native)是美团研发团队基于 React Native 开源框架,并结合美团业务场景,定制化开发的一套动态化框架。

本文从接入 MRN 后应用的整体架构,业务开发在现有技术栈上的选型,动态化后对研发流程的变化,在运维上对业务可用性的监控以及使用 MRN 后对效率的衡量等方面的实践做了非常详尽的介绍。

如果有在建设动态混合开发方案,或对这块的工程化感兴趣的同学,推荐仔细阅读,从中还是能得到很多参考和启发的。

🐎 Swift API Availability

@xiaofei86:本周 NSHipster 为你带来 @available 的详细用法,与 #available 的对比,以及在第三方 Framework、Swift Packages 中的使用建议。

🐕 百度 APP iOS 暗黑模式适配的完美解决方案

@张嘉夫:由于 Dark Mode 只支持 iOS 13 以上的系统,为了给全系统所有用户最好的体验,百度研发出了一套皮肤主题框架,不仅可以全系统支持 DarkMode,还可以扩展多套皮肤主题。本文主要从皮肤主题框架实现、色值表的管理以及配套工具链等方面详细的介绍了百度 App iOS 暗黑模式的适配。目前系统所有控件及其 Color 属性和 Image 属性均已支持这套皮肤主题框架,业务方只需使用简单的 API 设置 Color 和 Image,即可实现主题换肤。同时为了提升一键刷新所有视图主题的性能,采用了 NSHashTable 弱持有控件的方案,通过测试数据得出: 在上万个视图量级下, HashTable 性能是远远优于通知的方式。

🐎 iOS 开发调试概览

@红纸:本文是一个概览文章,简述 iOS 开发过程中,常用的一些调试手段。

  1. 常用的一些 LLDB 命令,扩展介绍了一下 chisellldb_commands 两个 lldb 的扩展仓库
  2. 常见的异常捕获方式。全局异常、EXC_BAD_ACCESS、Memory Leak
  3. Xcode 自带的调试方法。条件断点编辑、UI Debugger、主线程检查等等
  4. 第三方工具,Charles 网络调试工具和百宝箱 WoodPecker 集网络沙盒等功能于一体的调试工具

注:推荐 《Advanced Apple Debugging & Reverse Engineering》 一书,从中你能了解到更加细节的调试方法

🐢 iOS 项目技术还债之路《二》IAP 掉单优化

@anotheren:本文介绍了作者团队对于 IAP 的掉单优化,对于下单及验证流程进行了详细的分析,并介绍了优化后的实践方案。如果你也遇到类似的 IAP 问题,不妨一起讨论一下。

🐕 亮剑 - Stinger 是如何在速度上吊打 Aspects 的

@JimQ:如题,饿了么团队进行了一项卓越的工作,其开源的 AOP 库 Stinger 的执行速度比目前最具统治力的 AOP 库 Aspect 快了大约 20 倍。本文从基本原理对比、测试速度对比、源码分析对比、各项功能对比四个层面与 Aspect 进行了综合 PK,其言吊打,亦不为过。

🐢 聊聊 Symbol

在日常开发中,我们或多或少都应该接触过 Symbol ,而真正使用到它的地方可能并不多。其实 Symbol 在编译期和运行时都扮演了重要的角色,但了解 Symbol 、Symbol Table 等概念对我们在一些问题的定位甚至做程序架构都很有帮助。

🐕 Objective-C Direct Methods

@AidenRao:Direct Methods 是 Objective-C 上新的方法调用机制(最早可能出现在 Xcode 11.x 上),调用 Direct Methods 时,它直接调用其基础实现,而不是通过 objc_msgSend。由于 objc_msgSend 在优化上已经做了很多,Direct Methods 并不会有太大的性能优势。实际的优点:Direct Methods 是私有方法,并不能被外部访问,也可以防止被 Objective-C 运行时动态地调用。不过根据实现此功能的 Pierre 所说,此优化的主要好处是减少了代码大小。

工具

PodfilelockToPng

@EyreFree:便利小工具,通过 Profile.lock 快速生成项目库依赖关系图,由作者 Orange-W 自荐。同类工具还有 prettyEFPodsAnalyzer 等。

代码

SwipeCellKit

@老峰: UITableViewCell/UICollectionViewCell 侧滑组件 Swift 版,支持左右滑动、图标文字自定义、自定义拖拽动画等,可优雅的实现 Cell 侧滑事件。

flutter dart 私有仓库

@CrazyCoderShi:作用跟 Pod 私有库类似,作为公司内的私有备份还是很有必要的。同时包含了一个简单的搜索页面,强烈推荐。

推荐一款 Postman 的开源替代品: Postwoman

@水水:大家都知道,Postman 是一个非常受欢迎的 API 接口调试工具,小编自己也用过哦~,它提供有 Chrome 扩展插件版和独立的 APP,不过它的很多高级功能都需要付费才能使用。而 Postwoman 是一个 Postman 的免费、快速且美观的替代方案,作为一款开源的 Postman 替代品,主打特性有如下一些:

  • 轻盈,可直接在线访问;
  • 简约,采用简约的 UI 设计精心打造;
  • 支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法;
  • 支持验证;
  • 实时,发送请求即可获取响应。

有兴趣的朋友可以点击Postwoman GitHub 项目官网下载体验啦~

内推

字节跳动-视频(北京)团队收 iOS/Android/Flutter/服务端/前端/QA。初中高级开发+实习都可以哟。收到的每一份简历都会帮大家跟踪流程。简历发送至:silence007pp@bytedance.com 如果感兴趣可以加微信详细聊一下:LuaPlayer

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

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

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

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

关注我们

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

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

说明

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

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