老司机 iOS 周报 #98 | 2020-01-06

点击「阅读原文」获取更佳阅读体验

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

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

新闻

RN 转小程序引擎 Alita 2.0 正式发布:基于 webpack 进行重构

@looping:近期 Alita 发布了基于 webpack 进行重构后的 2.0 版本,带来了诸多新特性,包括完善 npm 支持、包大小分析、一键小程序分包等等。Alita 本身侵入性很低,并不会对原有 ReactNative 开发方式造成太大影响。同时本文也从基本原理、2.0 版本新特性、性能优化这三个方面介绍了下 Alita。感兴趣的同学可以进一步关注学习下。

新手推荐

? How to use scroll view in Interface Builder / Storyboard (Xcode 11)

@极速男孩:本文介绍了如何在 Xcode 11 的 Interface Builder 或者 Storyboard 中使用 scroll view。主要介绍了如何在 view controller 中使用 scroll view 并且设置它的约束和如何设置 scroll view 元素的约束并且如何通过设置当中元素的约束来自动控制 scroll view 的 Content view 的大小。

? SwiftUI learning curve in 2019

xiaofei86:今年 iOS 开发领域发生了巨大变化,我们拥有了 SwiftUI 框架。SwiftUI 是苹果生态系统中用声明式框架构建 App 的新方式。作者总结了学习 SwiftUI 需要的所有文章列表,包括基础知识、布局系统、架构、声明式特性、动画和交互、辅助功能、绘制自定义视图总 28 篇文章,推荐给对 SwiftUI 感兴趣的同学。

文章

? ? 手淘架构组最新实践 | iOS基于静态库插桩的⼆进制重排启动优化

@satanwoo:启动优化是个老生常谈的问题了,但相关优化涉及的技术却总是停滞不前。而 2019 年下半年抖音提出的二进制重排方案给业界带来了一股新的风潮来一些新鲜感。本文是来自手淘架构组的谢俊逸同学在二进制重排方案的基础上,针对原有方案的一些实践限制,提出了一种基于静态库二进制插桩的重排方案,对于大量应用组件化构建应用的团队来说,是一个值得学习借鉴的好文章。对了,本文配合原有的抖音研发实践:基于二进制文件重排的解决方案 APP 启动速度提升超 15%更佳~

? ? APP 网络优化之 DNS 优化实践

@Parsifal:网络优化一直是 App 性能优化中比较重要的一部分,而在网络优化中 DNS 优化又是相对重要的一块。通常我们做 DNS 优化想要达到的目的有以下 3 个:

  • 降低 DNS 解析带来的延迟
  • 预防 DNS 劫持
  • IP 做到服务器动态部署

其中,“降低 DNS 解析带来的延迟” 在 HTTP 2.0(从 1.1 开始 keep-alive 默认开启,2.0 支持多路复用,大大提高了链接的可重用性和传输效率)时代影响已经比之前小很多,但 “预防 DNS 劫持” 和 “IP 做到服务器动态部署” 这两点问题依然可以用 IP 直连来解决。目前市面提供的类似服务主要有:阿里云 HTTPDNS 和 腾讯云 HTTPDNS,其中需要解决的问题大同小异,两家都在开发文档中有提及。本文则在这些问题的基础上,补充了两个实践过程中遇到的问题。如果你之前从未了解过客户端 DNS 优化相关内容,这篇文章可以较完善地为你释疑;如果你之前已经有尝试过,那么也能通过这篇文章,看看他们实践中遇到的问题。

? 立志欲坚不欲锐 - 2019 年小结

@J_Knight_:本文是冬瓜的 2019 年总结。本篇总结分别从社区贡献(GitHub,博客,公众号,DissCode 算法平台),读书,在线课程,算法题几个方面展开;在文章结尾处还分享了他的年度 OKR 并简单介绍了他在抖音的工作。可以说这一年他在技术上的学习以及输出都是非常高的,很值得同行学习。关于他的公众号,有兴趣的朋友可以从 2019 年文章汇总这篇文章中详细了解。

? MANAGE YOUR IOS RESOURCES TYPE-SAFELY WITH R.SWIFT

@Damonwong:在开发 iOS 项目的时候,如果你想要用代码访问一些资源文件,通常情况下,你需要使用 magic strings 在运行时动态的查找,这并不是一个十分安全的方式。

在这方面,Android 的设计就比 iOS 好很多,每个 Android 项目都有一个 R.java 文件来解决 magic strings 的问题。也正是因为这个设计,iOS 这边衍生出了 R.swift 这个库,借助 Swift 的特性,在编译的时候就能及时的发现类似于资源文件丢失的问题。

与 R.swift 类似还有一个库叫 SwiftGen。这两个库大同小异,大家可以根据自己的项目实际情况来选择。

? CocoaPods 1.9 新特性

@EyreFree:CocoaPods 是使用最广泛的 iOS 项目依赖管理工具,相信大家都有使用过,在此不多做赘述。目前 CocoaPods 已经发布了 1.9.0.beta.2 版本,按照以往的节奏,相信很快就会发布正式版。本次的 1.9 版本除修复了大量 Bug 外,还添加了 XCFramework 支持、Podspec 的基于配置的依赖关系以及 Swift 版本变体等一系列新特性,快来点开文章提前预习一波吧。

? 9to5mac 年度回顾:Apple 在 2019 年全年发布的所有产品

@张嘉夫:对于苹果公司而言,2019 年是繁忙的一年,全年分发了无数的硬件和软件版本。从 Mac 系列和 iPhone 11 Pro 的多个更新到 Apple Watch Series 5 和 AirPods Pro,Apple 在 2019 年对其所有产品系列进行了更新和发布。本文是 9to5mac 对苹果在 2019 年发布的所有内容(包括软件和硬件)的一个回顾。

? Debugging with Swift Combine Framework

@zvving:响应式编程一贯有调试不便的问题,本文介绍基本的日志打印、断点调试和图表分析方法,帮助你更好的上手 Combine 开发。

? 向现有应用添加 Flutter

@CrazyCoderShi:随着 Flutter 1.12的发布,官方带来了一项新功能 - Add-to-app, 通过创建 Flutter module 的方式,可以快速的给现有应用添加 Flutter 能力,全程体验顺滑如丝。自此,还有什么理由说 Flutter 集成体验差?。

工具

Publish

@四娘:Publish 是一个使用 Swift 编写的静态网站生成器,支持主题和插件等自定义功能,前身是 SwiftBySundell 这个网站的生成工具,现在作者整理后将它开源了出来。

AppHost

@JimQ:一个轻量级的包托管网站,主要用于 iOS 和 Android 的包管理,作用类似于 fir.im,不同之处是可以自由部署在内网,方便了公司项目保密,并且代码开源,方便根据各自需求进行定制化开发。

内推

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

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

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

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

关注我们

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

说明

? 表示需访问外国网站,? 表示编辑推荐

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