阅读 4421

老司机 iOS 周报 #121 | 2020-07-27

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

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

WWDC20

本周在周报公众号上我们推送了 6 篇 WWDC20 内参专栏内的文章,每篇都很精彩!

文章

🐕 🌟 Apple Widget:下一个顶级流量入口?

@EyreFree:Widget 是 Apple 在 WWDC20 推出的新的桌面内容展现形式。Widget 的出现,让 iOS 系统的桌面有了破局,更多产品能够有机会借助 Widget 来丰富自己产品的内容表达。本文对 Widget 的特点、刷新方式、Widget 和 SwiftUI 的关系、Widget 的展示形式等进行了全面的介绍,并进行了总结与展望,对 Apple Widget 感兴趣的同学千万不要错过!

🐕 🌟 有赞移动热修复平台建设

@含笑饮砒霜:本文主要介绍了有赞的热修复平台,及在搭建过程中遇到的一些问题。以 Android 端为例,目前有赞的热修是基于 Tinker 自建的后端服务 + Android SDK 实现的。有赞热修复平台,是结合有赞移动团队实际开发过程遇到的问题,逐步解决逐渐完善的,读者可以结合自身团队打造合适的热修复管理平台。

🐕 🌟 猿辅导 iOS 精准测试实践 - Objective-C 与 Swift 混编工程精准测试探索

@Damien:文章从质量保障问题出发抛出「精准测试」的概念,进一步深入到如何在 iOS 移动端使用 LLVM Code Coverage 方案来实现覆盖率的检测,以及深入挖掘了 LLVM Code Coverage 覆盖率的实现原理。最后作者分享了猿辅导在落地精准测试体系的探索和实践经验,为业界的覆盖率检测方案提供了新思路。

🐎 WWDC20 Summary

@张嘉夫WWDC20 结束后,世界各地的团队正在积极地适配 Apple 平台里最新、最棒的技术。设计和产品团队通常专注于产品,不一定会密切关注来自平台的最新技术。而另一方面,开发者的主要关注点则是各个技术 session。因此,很多情况下没有人会直接对平台的演进负责,这也导致来自平台的新技术可能需要花上几个月、几年才能适配。不论是开发者还是设计师,只有少数的 geek 才会关注平台的每一项更新,因此作者制作了一份总结 WWDC20 的 Keynote 幻灯片(只涵盖 iPhone 和 iPad),以便让您的产品和设计团队获悉来自平台的所有技术更新。

🐕 What should you know about a navigation history stack in iOS 14

@老峰:iOS 14 导航栏新特性,返回上一级页面时,长按返回按钮,会出现选择返回到第几级页面菜单,更加人性化。本文主要介绍了适配这个 feature 时处理长标题,自定义标题,无标题等场景时需要注意的问题,适配 iOS 14 的同学可以了解一下。

🐎 我们重新设计了 pub.dev,不来试试?

@极速男孩:pub.dev 对 flutter 开发者来说是重要的查找包的工具。google 最近对他进行了更新,是我们更方便的找到优质的 package 。进一步优化了 pub.dev 的评分体系,从而更能通过评分判断一个 package 的质量。并对多平台通过筛选和标签做了进一步的区分,方便我们快速的找到正确的平台支持。

🐎 WasmPatch 开源,又一个 iOS 热修复框架

@五子棋: 作者基于 libffi + WebAssembly 实现了一套 iOS 热修复的框架,整体思路比较清晰,对于想要了解 Objective-C Runtime 的同学来说是一个不错的系列文章。

🐕 Swift Code Injection using dyld_dynamic_interpose

@四娘:Injection 是一个代码注入工具,可以在不重启 App 的情况下让代码修改生效(也就是俗称的热刷新),在最早的 Objective-C 版本里,这件事情很简单,只要在加载完 dylib 之后调用 Runtime API 进行替换即可。

问题在于 Swift,最早 Swift 1.0 发布之后,作者只能使用修改 vtable 的方式去修改 non-final 的函数,但 struct 和 enum 的声明和函数派发一直是个问题。

在最近发布的 InjectionIII 里这个问题终于得到了解决,作者在 Twitter 的讨论里发现了一个 dyld 的私有 API dyld_dynamic_interpose,这个 API 可以在加载 dylib 时便捷地替换掉函数实现,在此基础上作者还添加了 SwiftUI 的支持,感兴趣的同学可以看一下。

🚧 🐎 Streamoji - Custom Emoji Library for iOS UITextView

@xiaofei86: 自定义表情符号是一种有趣的方式,可以给你的 App 带来更多的活力和可定制性。它们在一些最流行的 App 中都有使用,比如 Slack、Discord 和 Twitch。然而,iOS SDK 并没有为自定义 Emojis 提供直接的支持。现在,使用新的开源库 Streamoji 只需几行代码就可以将它们添加到自己的 App 中。

你可以通过 gif、png、unicode 来定义表情,用 UITextView 来渲染他们,还可以控制显示质量并与文本大小自动匹配。如果感兴趣,通过 Slackmojis 找到更多有趣的表情并应用到你的 App 中吧。

🐕 Handling deeplinks in iOS 14 with onOpenURL

@JonyFang:Xcode 12 beta 3 最新消息,SwiftUI 在 iOS 14 中为 deeplink 的处理新增了 onOpenURL 方法。开发者可以在视图上注册一个 URL 处理,以便这些视图可以根据需要来响应 URLs。这让 deeplink 的处理变得更加灵活,对项目解耦也有很大的帮助,与过去在 AppDelegate 和 SceneDelegate 中处理 URL 的方式有了很大的不同。

代码

Exposure Notification

@老驴:Apple 和 Google 合作的新冠病毒接触历史 API 已经上线有一段时间了,Apple 和 Google 也给这个 Framework 制作了文档。有兴趣的话可以来看看 Apple 和 Google 是怎么实现这个 API 的。

强烈建议搭配 nshipster 的 Contact Tracing 来看,这篇文章我们在之前也做过推荐。

OCRunner

@Parsifal:以 JSPatch 为代表的基于 JSCore 系列热修复方案接连被苹果审查后,社区近几年也涌现了不少其他的实现思路。在开源社区这块,比较多的是利用自定义轻量级 OC 解释器配合 libffi 来实现,比如 OCEval,以及这个 OCRunner

本开源代码由 SilverFruity 自荐。

内推

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

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

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

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

关注我们

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

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

说明

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

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

文章分类
iOS
文章标签