老司机 iOS 周报 #97 | 2019-12-30

5,021 阅读6分钟

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

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

新闻

🌟 Updating Apps that Use Web Views

@anotheren:如果你还在使用 UIWebView, Apple 已经给你下了最后通牒。自 2020 年 4 月起,使用 UIWebView 的新应用将无法提交到 App Store;自 2020 年 12 月起,相关旧应用也将无法提交更新。赶紧计划迁移到 WKWebView 吧。

新手推荐

🌟 🐎 Clean Architecture and MVVM on iOS

@极速男孩:本文介绍了如何在 iOS 中使用 MVVM 架构,MVVM 各个部分如何在 iOS 中发挥作用,以及如何保持一个清晰的文件结构。

文章

🌟 🐢 系列文章:多地图源业务向地图控件开发思路

@享耳先森:如果你在开发地图相关 App,应该知道服务商地图质量各有长短,所以,最好是能适配多种地图,让用户选择。

这系列文章介绍了如何对地图服务进行抽象,可以方便的切换地图服务,同时在地图之上封装了统一的 UI 交互。

🌟 🐕 用户端智能的应用实践

@莲叔:端智能是近年来客户端除了动态化之外为数不多的技术新方向。端智能,顾名思义就是在客户端上运行机器学习/深度学习的算法。传统的端智能多半都 focus 在解决图形图像领域、NLP 方向的任务,比如 Apple 的 CoreML 与 Vision 框架。最近两年国内的互联网公司纷纷开始尝试拓宽端智能的应用范畴,比如端侧推荐重排等。目前端智能的瓶颈其实并不在于模型如何裁剪,算法如何提效,更多的在于合适的业务场景+合适的特征选取(也就是训练数据)。bang 的这篇文章介绍了他的团队在端智能上的一些业务场景尝试,对于希望落地端智能应用的同学与团队都非常有参考价值。文章举了金额推荐、智能 push 和本地处理三个场景,并且给出了落地过程中遇到的一些问题。从另一个侧面反映了目前端智能仍然处于不断探索的阶段,还没有到大规模普及与应用,但仍然蕴含着巨大的空间。

🌟 🐢 你的 App 在 iOS 13 上被卡死了吗?

@Parsifal:一篇由 OpenUDID + UIPasteboard + iOS 13 上引发 App 卡死问题的深入分析好文。全文并不局限于这个问题,而是同时总结了排查这个问题过程中用到的方方面面知识技巧,十分值得我们借鉴。看完这篇文章,除了学习到排查复杂小概率问题的技巧,你还会对以下几个知识点有一个更清楚的认识。

  • Bugly 等第三方崩溃日志收集服务局限性在哪里?
  • 在第三方后台无法捕获崩溃日志时,我们可以做些什么?
  • 如何分别在有 dSYM 文件和无 dSYM 文件时解析崩溃日志?
  • UIPasteboard 是一个系统共享的服务,那么它的数据同步是如何做的?
  • UDID 被苹果禁用后的这么长时间,社区使用 UDID 的方式有着怎么样的变化?

🐎 UserDefaults Access via Property Wrappers Is Worse Than You Might Think

@老峰:本文讨论了文章 The Advanced Guide to UserDefaults in Swift 使用 Property Wrappers 封装 UserDefaults 可能存在多个地方定义不同初始值的问题,并给出了更优的方案 SwiftyUserDefaults

🐎 No space left on device: Testing low storage scenarios

@Parsifal:如果你的 App 大量用到持久化存储技术,那么存储空间不足的错误应该是比较常见的。本文提出了一种利用模拟器重现存储空间不足的技巧,让我们可以轻松在该场景下测试和调试自己的 App。

工具

Proxyman:网络调试工具

@Jimq:Proxyman 是一款 macOS 上的网络调试工具,使用 Swift 和 C++ 编写,美观高效功能强大,免费版就能使用抓包 / rewrite / breakpoint 等基本功能,推荐一试。PS:Setapp 也包含了这个 App。

代码

R.swift

@zvving:类似于 Android 开发中的 R 类,为 image、font、localized-string 等资源提供强类型的访问方式,如:

let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)
let string = R.string.localizable.welcomeWithName("Arthur Dent")

在减少字符串硬编码的同时,带来代码自动完成、编译期检查等功能,推荐一试。

HomeKit Accessory Development Kit (ADK)

@老驴:苹果放出了 HomeKit 附件开发包,其缩写为 HomeKit ADK。

此 SDK 主要面向开发 HomeKit 相关的设备的开发者,提供了快速开发 HomeKit 相关功能的 API。需要注意的是,HomeKit ADK 只能用于非商用用途开发和使用,若进行商业开发,则需要注册 MFI,然后使用对应的商业版本的 SDK。

KeyedCodable

@四娘:KeyedCodable 是一个简化 Codable 逻辑的库,之前一些自定义的逻辑都需要通过手写 decode 和 encode 去完成,例如嵌套,默认值和自定义编码策略等,现在使用这个库就即可自动完成。

Hippy

@looping:Hippy 是由腾讯 QQ 浏览器部门发起,针对前端开发者推出的跨端解决方案,它同时支持 React 和 Vue 两种前端主流框架,并且已经在 GitHub 上正式开源。

Hippy 在腾讯内部已经形成一套完整生态,包括对 GCanvas、Lottie、SVG 等都有相应组件封装,同时腾讯内部自研的 Hippy 业务组件库、高性能图形库、异常上报(支持 Sentry)等,也会在未来逐步对外开放。

内推

美团点评平台事业部业务研发中心技术架构组的招聘高级 iOS 开发,负责美团 App 部跨平台动态化布局项目iOS端SDK开发和维护,参与动态化布局项目编译脚本开发与维护。我们需要你 3 年或以上 iOS 开发经验,扎实的 Objective-C 语言基础,熟练掌握iOS开发、测试、调优等技术,以及相关工具的使用,积极主动,有良好的团队合作精神和强烈的责任感,对移动产品有浓厚兴趣及见解。详情联系美团点评 iOS 高级工程师 SketchK:zhangsiqi1988@gmail.com。

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

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

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

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

关注我们

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

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

说明

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

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