老司机 iOS 周报 #144 | 2021-01-14

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

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

WWDC20

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

新闻

The 2020 State of the OCTO—VERSE[1]

@Parsifal:GitHub 官方的 2020 年度报告,作为聚集了最多全球开发者的开源平台,GitHub 这次从社区、生产率以及安全三个方面,展示不同的数据来总结过去的 2020 年。

新手推荐

he different types of self in Swift[2]

@极速男孩:这篇文章简单的介绍了在 Swift 三种 self 的不同用法,包括 self. 前缀,.self 后缀和 self 类型。

文章

从 Weex 到Web,性能逆势如何破局?

@Damien:今年双十一飞猪会场从前端渲染引擎从 Weex 回归到 WebView,在迁移变化的同时,同时性能指标上的优化也不能落下,飞猪团队为了极致的性能体验,使用了端侧预渲染、服务端渲染、页面快照、SPA 单页应用模式以及资源&数据预缓存等方案来进行极致的优化,同时取得的效果也是很惊艳的:日常会场首屏耗时环比降低 25%,较 618 以及国庆会场首屏耗时环比降低 20%。对 WebView 优化相关的同学推荐阅读此文,或许可以找到灵感。

如何持续的自我提升

@J_Knight_:本文作者结合自己的实际学习案例分享了 “如何自我学习/提升”的问题,整体的学习思路如下:

  • 初识:被灌输知识的过程。
  • 思考:主动消化知识的过程。
  • 探索:手动进行研究的过程
  • 总结和超越:完成自我提升的过程

而且文章还提到了费曼学习法,感兴趣的读者可以阅读一下本文。

Preventing Data Races in the Swift Concurrency Model[3]

@享耳先森:并发一直是现代语言的重要部分,根据 Swift Roadmap,预计 Swift 6.0 将推出基于协程的 async/await 模型及新的 Actor Isolation 并发模型,Swift 核心成员 Doug 写了一篇文章,介绍 Swift 加入了新的并发模型之后,有哪些方式可以避免数据竞争。

参考:

  • Swift Concurrency Roadmap
  • Protocol-based Actor Isolation: Draft #2

8 Common SwiftUI Mistakes - and how to fix them[4]

@zvving:SwiftUI 之于 UIKit,就像 objc 之于 swift:二者在设计思想、具体实现方面有诸多关联,却又是底层逻辑完全不同、『推倒重建』的两类事物。

带着 UIKit 已有经验去学习 SwiftUI,能快速上手的同时也会掉一些不易察觉的坑:细节不符合预期、实现冗余、写法错误而不自知……本文作者总结了 SwiftUI 新手常犯的 8 类错误,解决问题的同时,帮助你更好的理解 SwiftUI 的独特之处。

更现代的 Swift API 设计

@EyreFree:Swift 是一门简洁同时富有表现力的语言,这其中隐藏着众多的设计细节。本文通过提出一个 Struct 的语义问题,在寻找答案的过程中逐步引出 DynamicMemberLookup 应用、PropertyWrapper(WWDC19 的 PropertyDelegate) 的实现原理以及 SwiftUI DSL 中 PropertyWrapper 的应用,来一起看看更现代的 API 背后的设计过程。希望这些理念能帮助你用 Swift 在项目中设计出更现代、清晰度更高的 API。

一文了解 Xcode 生成「静态库」和「动态库」 的流程

@JonyFang:本篇主要解答了 iOS App 的链接是由谁完成的。作者通过创建 Demo 来实践 Xcode 生成静态库动态库的流程,过程中分析 Report navigator 页面中详细的 Build(构建)日志,得到的结论是:

  • 只有在 动态库 的链接过程会依赖 clang Driver
  • 真正执行生成 静态库动态库 的任务的是 libtoolld64

工具

iSimulator[5]

@红纸:iSimulator 是一款用于操控 Xcode 模拟器的 GUI 工具,其包含基础增删模拟器、展示应用安装列表、快捷导航应用的 Sandbox/Bundle 文件夹、APP 多模拟器同步装载等多种功能。还在烦恼找不到模拟器安装、文件夹路径的小伙伴可以尝试一下此工具。

代码

滴滴DoKit For Flutter正式开源,功能及核心实现解读

@邦Ben:本文介绍了滴滴开源的 DoKit,DoKit 是一个针对 Flutter 的产研工具包,集成了各种丰富的小工具,UI、网络、内存、监控等等。本文也简单介绍了一下原理,但是实际实现方式还是仔细看代码更为确切。作为辅助类的工具,可以在调试方面提供到比较实时的反馈(例如测试找你反馈bug的时候,不用连个线去 debug 或者传日志一点点看),有需要可以一用。

  • Github 地址:https://github.com/didi/DoraemonKit/tree/master/Flutter
  • Pub 仓库地址:https://pub.dev/packages/dokit

https://mp.weixin.qq.com/s/7j6gNjSQE9Jxr1te1BbdIA

2021 给 iOS 开发者的一些建议

发布于:12天以前  |  62次阅读  |  详细内容 »

iOS 优化篇 - 启动优化之Clang插桩实现二进制重排

发布于:28天以前  |  96次阅读  |  详细内容 »

抖音品质建设 - iOS启动优化《实战篇》

发布于:28天以前  |  79次阅读  |  详细内容 »

iOS APP 图标版本化

在我们的项目开发过程中,需要频繁打包给测试人员去测试,有时候我们都不知道测试机上安装的版本是否是最新的,这样会造成很多不必要的麻烦和成本。因此我们需要将buildNumber以水印的方式打在APPIcon上,可以很直观的知道当前是哪一个版本。

发布于:1月以前  |  89次阅读  |  详细内容 »

如何实现一个HTTP请求库——axios源码阅读与分析

在前端开发过程中,我们经常会遇到需要发送异步请求的情况。而使用一个功能齐全,接口完善的HTTP请求库,能够在很大程度上减少我们的开发成本,提高我们的开发效率。

发布于:1月以前  |  96次阅读  |  详细内容 »

老司机 iOS 周报 #144 | 2021-01-14

发布于:1月以前  |  115次阅读  |  详细内容 »

快手,快影 iOS App反调试

发布于:1月以前  |  125次阅读  |  详细内容 »

优酷iOS插件化页面架构方法

随着业务不停地迭代,优酷 APP 用于分发视频资源的 UI 控件越写越多,也越来越复杂,并且同时相似相近的代码也非常多。

发布于:3月以前  |  225次阅读  |  详细内容 »

iOS中的内嵌汇编

写一篇在iOS上使用汇编的文章的想法在脑袋里面停留了很久了,但是迟迟没有动手。虽然早前在做启动耗时优化的工作中,也做过通过拦截objc_msgSend并插入汇编指令来统计方法调用耗时的工作,但也只仅此而已。刚好最近的时间项目在做安全加固,需要写更多的汇编来提高安全性(文章内汇编使用指令集为ARM64),也就有了本文

发布于:3月以前  |  233次阅读  |  详细内容 »

77.9K 的 Axios 项目有哪些值得借鉴的地方

Axios 是一个基于 Promise 的 HTTP 客户端,同时支持浏览器和 Node.js 环境。它是一个优秀的 HTTP 客户端,被广泛地应用在大量的 Web 项目中。

发布于:3月以前  |  215次阅读  |  详细内容 »

不会吧,这也行?iOS后台锁屏监听摇一摇

一般情况下,出于省电、权限、合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是“当 APP 处于后台或锁屏状态时,依旧可以监听到摇一摇,进而触发某些功能,比如:语音播报”。

发布于:4月以前  |  358次阅读  |  详细内容 »

iOS 稳定性:App 被终止的原因

本次 session 主要内容如下: 介绍了后台应用终止的常见原因,并提供了一些优化建议 介绍了 MetricsKit 提供的在代码中获取诊断和性能数据的方法 介绍了 Xcode Metrics Ogranizer 提供的关于线上用户性能数据的可视化报告

发布于:4月以前  |  549次阅读  |  详细内容 »

优酷iOS插件化页面架构方法

随着业务不停地迭代,优酷 APP 用于分发视频资源的 UI 控件越写越多,也越来越复杂,并且同时相似相近的代码也非常多。

发布于:4月以前  |  370次阅读  |  详细内容 »

Vue中Axios的封装和API接口的管理

在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json、客户端防御XSRF等。所以我们的尤大大也是果断放弃了对其官方库vue-resource的维护,直接推荐我们使用axios库。如果还对axios不了解的,可以移步axios文档。

发布于:4月以前  |  343次阅读  |  详细内容 »

iOS 持续集成:更完备的 App Store Connect API

时隔两年 App Store Connect API 有了更新,WWDC 2018 推出了 App Store Connect API ,用于自动化一些 App Store Connect 后台操作。这次更新包含了 app 元数据相关的API,补上了原来缺失的重要一环, 使得几乎可以通过 App Store Connect API 完成 App Store Connect 上的所有操作。今后开发、证书配置、用户管理、测试、发布全流程都可以通过 API 完成。

发布于:4月以前  |  433次阅读  |  详细内容 »

iOS 性能优化:优化 App 启动速度

苹果是一家特别注重用户体验的公司,过去几年一直在优化 App 的启动时间,特别是去年的 WWDC 2019 keynote[1] 上提到,在过去一年苹果开发团队对启动时间提升了 200%

发布于:4月以前  |  385次阅读  |  详细内容 »

iOS圆角的离屏渲染,你真的弄明白了吗

发布于:4月以前  |  363次阅读  |  详细内容 »

iOS导航栏整体滑动解决方案(类似淘宝)

发布于:4月以前  |  436次阅读  |  详细内容 »

让你的应用远离越狱:iOS 14 App Attest 防护功能

当越狱在 iOS 设备第一次流行起来时,iOS 开发人员会尝试各种方法来保护自己的应用程序,以让应用免受盗版等不确定因素的困扰。有许多方法可以做到这一点,包括检查 Cydia 是否存在、检测应用程序是否可读取自身沙箱之外的文件、在检测到调试器时让应用程序崩溃等等。

发布于:4月以前  |  401次阅读  |  详细内容 »

探秘 iOS 14 的 WidgetKit

Widget Extension 提供了 small, medium, large 三个尺寸,不同尺寸可以展示不同的数据、不同的界面,开发者也可以锁定自己APP的 Widget 只有某类尺寸,相同的widget也能重复添加。作为添加在主屏幕上的控件,苹果用了 “At a glance” 来形容 widget ,所以 widget extension 是无法交互的,它能做的只有展示一些信息与点击两个作用,点击后就会引导至app,同时为了性能与耗电量的考虑,Widget extension 也不能展示视频和动态图像。

发布于:4月以前  |  442次阅读  |  详细内容 »

最多阅读

快速配置 Sign In with Apple 1年以前  |  3901次阅读
开篇 关于iOS越狱开发 1年以前  |  2618次阅读
使用 GPUImage 实现一个简单相机 1年以前  |  2603次阅读
APP适配iOS11 1年以前  |  2590次阅读
给数组NSMutableArray排序 1年以前  |  2526次阅读
在越狱的iPhone设置上使用lldb调试 1年以前  |  2512次阅读
App Store 审核指南[2017年最新版本] 1年以前  |  2411次阅读
UITableViewCell高亮效果实现 1年以前  |  2362次阅读
所有iPhone设备尺寸汇总 1年以前  |  2326次阅读
使用ssh访问越狱iPhone的两种方式 1年以前  |  2255次阅读
关于Xcode不能打印崩溃日志 1年以前  |  2163次阅读
使用ssh 访问越狱iPhone的两种方式 1年以前  |  2059次阅读
UIDevice的简单使用 1年以前  |  1844次阅读
为对象添加一个释放时触发的block 1年以前  |  1826次阅读
使用最高权限操作iPhone手机 1年以前  |  1789次阅读