老司机 iOS 周报 #82 | 2019-09-02

6,108 阅读8分钟

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

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

新闻

🌟 苹果秋季发布会将在北京时间 9 月 11 日凌晨 1 点举办

一年一度的苹果秋季发布会的时间终于落定了,将于 9 月 11 日凌晨 1 点开始。你可以到 Apple 官网,也可以上腾讯视频、爱奇艺、优酷、哔哩哔哩等多个平台观看,不用到现场,通通都是前排的待遇。

杭州的朋友,还可以联系 Price Tag 的作者 @61 同学,参与现在线下观影活动。边喝咖啡,边观看直播。报名链接

文章

🌟 🐢 重磅!滴滴跨端框架 Chameleon 1.0 正式发布

@CrazyCoderShi:Chameleon (简写 CML ) 是滴滴开发团队历时三年打磨的一套跨端解决方案, 最近终于发布了 1.0 版本。CML 是一款真正专注于让一套代码运行多端的跨端框架,拥有业内先进的工程化设计,丰富的基础库,独创多态协议,提供标准的 MVVM 架构开发模式统一各类终端, 其能力堪称最强:

  • 支持所有小程序、H5和客户端, 快应用的支持已经完成开发, 正在测试中
  • 一套代码运行多端,并且高度一致
  • 性能的极致体验, CML 团队在新能优化上多了许多工作, 包括包大小、各端加载速度、执行效率等等
  • 生态化建设, 从组件库到调试工具都有官方标准产出, 并持续迭代
  • 全方位能力加持, CML 拥有先进的工程化理念,整体开发、打包构建等流程非常高效
  • 为降低原有项目迁移 CML 框架的成本,CML1.0 提供了以下两种优雅简洁的渐进式接入方案
    • CML1.0 能够将 CML 组件导出成各端组件,让你更自由地使用 CML
    • CML 已发布一款 webpack plugin:easy-chameleon,可直接在原有项目中集成 CML

CML 团队未来的规划中还有对 Native 跨端的支持, 比如 Flutter 和 React Native, 强的可怕。

🌟 🐕 基于 Mach-O 文件的静态链接的分析

含笑饮砒霜:这是系列文章中的其中一篇。静态库链接是指自己的模块与静态库里的某个模块(用到的某个目标文件,或多个目标文件)链接成可执行文件。Mach-O 目标文件是源代码编译得到的文件,文件里有机器指令、数据,还有链接时候需要的一些信息,比如符号表、调试信息、字符串等,然后按照不同的信息,放在不同的“段”(segment)中。这篇文章解析了链接过程中空间与地址的分配,以及符号解析与重定位。其实动态链接比静态链接复杂的多,感兴趣的同学可以阅读该系列中的其他文章。

推荐阅读

🐕 Code Review 最佳实践

@享耳先森: 作者认为 Code Review 是软件开发中的最佳实践之一:首先可以更好在团队内做到知识共享,其次可以有效提高整体代码质量,及时发现代码中可能存在的问题。作者还重点说明了 Code Review 应该怎么做,如果你团队中还没有实行 Code Review 或对 Code Review 有什么疑问,建议仔细读这篇文章。

🌟 🐎 Xcode Hacks to Make Your Life Easier

@老峰:掌握一些常用的 Xcode 快捷键,可以帮我们高效的 Coding,本文作者就为我们总结了如下 Xcode 使用技巧:

  • 快捷的通过 database model 创建 model:⌥ + Hold left mouse、⌘ and arrows、⌥ and arrows
  • 快捷创建构造函数:^ + Enter
  • 快捷 Debugging:e 表达式、 breakpoint enable、breakpoint disable、continue
  • 快捷浏览源代码、文件:⇧ + ⌘ + O、⌥ + ⌘ + [、⌥ + ⌘ + ]

文章中附有视频讲述这些快捷操作技巧,感兴趣的读者自行阅读实践吧。

🐎 The power of Environment in SwiftUI

@小非86:Environment 是 SwiftUI 中独有的特性,本文从比较基础的角度,从对 Environment 的概念和使用技巧,到 Environment 的继承和依赖注入,都通过简单示例进行了讲解。且文章篇幅较短,比较适合快速阅读。

🚧 🐢 A Swift YogaKit Guide to Flexbox

@小非86:Yoga 是 Facebook 开源的一个编写视图的跨平台代码,YogaKit 用于 iOS 开发,它基于 Flexbox,让布局变得更简单。本文为使用 Swift YogaKit 进行 Flexbox 布局一份详细指南,文章通过大量的代码和效果图形象的向我们展示 YogaKit 的使用,指导我们如何使用 Flexbox 创建出色的布局。推荐给有需要的读者阅读。

🐕 避免 iOS 组件依赖冲突的小技巧

@J_Knight_:本文作者介绍了一种避免 iOS 组件依赖冲突(当两个组件依赖了同一个组件的不同版本,并且依赖的版本没有交集的情况)的方法。大体方案是通过修改 subspec,实现默认中介者以及利用条件编译的方式,是一个相对比较优雅的解决方案,有兴趣的读者可以点击原文学习具体方案。

🐕 YYText 源码剖析:CoreText 与异步绘制

@红纸:本文是一篇 YYText 的源码分析文章,作者从 CoreText 布局原理出发,剖析了 YYText 中核心计算、自定义富文本属性、工具类封装原因等。有需要了解图文混排的同学可以参阅~

此外,作者对于 YYKit 中的其他源码仓库也进行了详细的源码分析。详情可以参考作者的博客

推荐人:波儿菜

🐎 独立开发者账号被封与解封回顾

@anotheren:独立应用 Pin 与 JSBox 的作者钟颖近期经历了开发者账号被封与解封的风波,本文是他自己对本次事件的完整回顾。虽然是误封,但是处理过程还是很值得学习,建议各位独立开发者都看一看。

🐕 BlockHook with Invocation(2)

BlockHook 这个库相信不少同学都听说过,它解决了在同步调用场景下对 Objective-C Block 的 AOP 问题。这篇文章是该库的作者对 BlockHook 拦截器的接口设计与实现,是对 BlockHook 相关的第二篇文章,没看过第一篇的可以先看一下第一篇 BlockHook with Invocation(1)

代码

🌟 🐕 CombineX

@zvvingRxCombine 尝试让 Observable 与 Publisher 能相互转化,用桥接的方式兼容 RxSwift 与 Combine。

CombineX 的目标则是提供完全对等 Combine 的开源实现:

项目仍在早期阶段,感兴趣不妨参考文档中的指引为项目添砖加瓦。

🌟 🐕 Flutter 通用基础库 flutter_luakit_plugin

@邦Ben:众所周知,flutter 跨平台,但是使用体验还不是很好,为什么?因为生态还比较弱,没有成熟可用的三方组件,最明显的就是数据库。目前因为不支持反射机制的原因,也没有好用的 ORM 库,妥妥裸写 SQL,或者桥接转换使用原生数据库,就两个字,痛苦。针对这种基础库不完备的情况,智宁大佬(Luakit 作者)灵机一动,flutter 在配合已稳定的 LuaKit 基础库可以迅速实现一整套完备的解决方案从而诞生了 flutter_luakit_plugin,提高了跨平台的效率,并且可以利用 Luakit 的脚本化来实现热更逻辑层(这意味着你需要重度使用 Luakit 进行维护逻辑层,UI 层使用 flutter)。另外大家伙都是支持扩展的,基础能力不够,依然需要自行扩展。目前据了解,该方案主要使用方为 YY 团队,并且他们的 flutter 系列文章也推荐一看(见文章底部)。

  • 多线程接口
  • orm 模型接口
  • 文件操作接口
  • http 请求
  • 异步 socket 接口
  • 全局通知机制
  • Lua 代码加解密

PS: 部分同学可能想问:我仅仅只是想用个 ORM 怎么办?作者贴心的给出了纯 flutter 调用的版本来降低使用成本:flutter_orm_plugin

内推

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

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

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

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

关注我们

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

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

说明

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

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