腾讯云 COS 上传

端内文件上传, 之前各个业务都是自己写的上传, 有的是用 PUT 请求, 有的是放在业务POST请求的 body 中, 对于批量图片上传由于担心上传长时间抢占带宽设置了30 秒强制超时, 对于大文件比如视频上传则是业务自己实现了分片上传, 上传逻辑复杂, 业务自己实现细节繁多, 成功率也不高. 后来切换到了腾讯云的 COS 上传, 图片上传成功率由97.5% 上升至 99.13%, 视频上传成功率由 92.88% 上升到 96.92%. 同时将 COS上传 封装为通用的上传逻辑, 输入支持磁盘文件/内存对象的上传, 输出支持进度以及结果回调, 并额外支持了秒传/断点续传/分片上传/批量上传/取消上传/秘钥小颗粒权限以及自动续期/容灾/全球加速/IPv6/结果统计/安全打击/灵活扩容/拓展灵活(如图片格式/尺寸/视频入库...)等能力.

阅读全文 »

记录下云服务器自己的踩坑

宝塔面板

国内的最新版(7.9.8)登录需要绑定宝塔的账号, 降级到不需要绑定的又有各种问题, 担心绑定账号有安全风险, 最后换成了宝塔国外版aaPanel, 除了页面是英文, 其他跟国内一样用

最好用全新的服务器安装, 不然各种问题, 别踩坑了

阅读全文 »

[转载] 从汇编角度分析objc_msgSend的hook过程

转载: 原文地址

objc_msgSend 是基于汇编实现的,hook objc_msgSend 和我们平时 hook OC 方法不一样,在 github 上有开源的项目通过 hook objc_msgSend 来监控每个函数的耗时情况。这篇文章对其 hook 逻辑的主要代码进行分析记录。阅读前建议先了解开源库 fishhook 的源码。

阅读全文 »

[转载] Matrix-iOS 耗电监控

转载: 原文地址

前言

在微信开发过程中,有时会收到一些反馈说,手机使用微信一段时间后就开始发烫了。为了跟进用户的发烫问题,最开始的时候,我们只能通过日志看看用户在这段时间做了些什么操作,努力去复现问题。

会导致手机发烫的原因很多,有可能只是用户在阳光下使用手机;但也有可能真的是微信某个模块代码有问题,导致当前 CPU 占用过高。这很让人头疼。如果能像查卡顿问题一样,有堆栈就好了。

WWDC 2018 What’s New in Energy Debugging 苹果推介了 Energy Log 这种日志来查耗电问题。系统定期会获取当前应用的线程堆栈,当应用在前台平均三分钟或者后台平均一分钟内 CPU 占用超过 80%,系统会将收集到的线程堆栈组合成一颗函数调用树形成 Energy Log。

在 “Xcode -> Organizer -> Energy Log” 中可以看到应用上报上来的 Energy Log 数据。这些数据确实暴露了微信的一些代码问题,拿到几份 Energy Log 后,我们能快速地定位出一些耗电场景。但是 Energy Log 日志是 iOS 系统收集的,我们无法对日志做定制化,无法扩展;而且在日常开发过程中,获取 Energy Log 的成本很高。

经 Energy Log 的启发,我们在 Matrix 扩展实现了耗电监控功能,现在 Matrix 也能上报应用的 “Energy Log” —— 耗电堆栈。

阅读全文 »

[转载] Matrix for iOS macOS 异步堆栈回溯

转载: 原文地址

前言

在当前微信耗电监控上报的堆栈当中,我们发现了大量与 GCD 异步调用相关的系统堆栈,如下图所示。而真正与业务相关的堆栈却“不见踪影”,这样的堆栈信息无法帮助我们确定耗电问题出现的具体位置。

阅读全文 »

M1 Mac 外接屏幕 开启 HiDPI 方法

Mac 的屏幕缩放功能是非常厉害的(HiDPI), 但是苹果一直不支持第三方模拟器使用这个功能.
以前有个 one-key-hidpi 可以为开启第三方屏幕开启 HiDPI. 但是 M1 芯片的 Mac 就不再支持了.

新的方法可以使用 BetterDummy 这个软件来免费开启, 缺点是每次电脑重启后需要自己手动打开软件.

阅读全文 »

正则表达式:使用、原理和优化

转载: 原文地址

什么是正则表达式

正则表达式描述了一种字符串匹配模式,包括普通字符(如a-z之间的字母)和特殊字符(比如.^$等有特殊意义的专用字符)。

典型的搜索和替换操作要求我们提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。
比如,需要验证用户输入的电话号码符合###-###-#### 格式(#表示一个数字)时,如果不使用正则表达式,则需要遍历用户输入的每个字符,确保#位置输入的是数字,非#位置输入的是-。而使用正则表达式的话,一行语句就可以完成验证功能。

阅读全文 »

MetricKit2.0 总结

MetricKit2.0 的新功能

MetricKit 会将过去 24 小时内收集的性能数据合并,在下一次 App 启动时,通过 delegate 方法回调给我们。
MetricKit1.0 知识请参考 iOS13+ 性能和耗电量信息收集框架
以下均为 MetricKit2.0(iOS14) 新增功能.

阅读全文 »