• WWDC
    • 发布于2022年07月31日

    WWDC 2022 Keynote 中苹果给我们介绍了 iOS 16 中一个比较亮眼的更新:Live Activity(实时活动),开发者可以在锁屏页面上放置一个可以“实时”更新的 Widget,比如外卖或者打车应用,在开启实时活动之后我们可以在锁屏页上实时看到外卖小哥/司机与我们的距离及预计到达时间。但是这一 API 及对应功能并没有第一时间放出,而是随着 iOS 16 Beta4 一起放出:【实时活动...

    • Xcode
    • 发布于2020年11月21日

    日常开发中常常遇到某些类及其引用的资源文件仅在 Debug 或内测版本中生效,而不希望带到线上版本。因为一来会增加包体积,二来会把一些内部功能的相关接口暴露,导致可能的一些动态调试。那么有没有避免的方案呢?

    Pod

    答案肯定是有的,通常的做法是把对应功能抽成单独的 pod 库,然后仅 Debug 模式才集成到主工程,发出去的版本不集成。通常方式如下,以 FLEX 为例:

    pod 'FLEX', '~> 2.0', :configurations => ['Debug']
    

    但是如果某些强耦合主工程无法拆成独立 pod 的功能,这种方式可能就不再适用了。

    条件编译

    pod 这条路走不通,有没有其...

    • Crash
    • 发布于2020年09月20日

    卖个关子

    // 代码段1
    class Manager: NSObject {
        deinit {
             print("deinit " + String(format: "%p", self))
        }
    }
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            var x: Manager? = Manager()
            x = nil
        }
    }
    
    // 代码段2
    @interface Man...
    • WWDC
    • 发布于2020年06月20日

    本文基于 Session 10077 - Eliminate animation hitches with XCTest

    概述

    iOS中动画无处不在,应用中优雅流畅的动画可以显著提升用户体验,同理卡顿也会影响用户体验。通过这个 WWDC Session,我们将学会如何通过 XCTest 来检测滑动和动画过程中的掉帧,进而在开发阶段就能解决问题,避免糟糕的用户体验。

    如何定义卡顿(Hitches)

    当用户在页面上操作时,比如上下滑或者点击导航栏上的返回按钮时,主要焦点集中在手势的交互上。良好的交互体验是提供“众享丝滑”的响应速度,反之用户将会感知到明显的卡顿。我们将这些用户可感知的“抖动”称之为卡顿(H...

    • Crash
    • 发布于2020年04月20日

    名字取得有点标题党,不然没人愿意点进来😂😂😂

    1.背景

    项目前后两个版本,线上监控显示整体启动时间缩短了近 300ms,而且包体积也变小了 5M(提交到 App Store 的ipa包)。但是新版本没有大的需求插入,只是 bugfix 版本,启动阶段的代码也没有相关改动。为何会引起包体积和启动时间的变化呢?

    启动耗时&包体积变化

    使用 Instrument 多次跑耗时分析,发现两个版本启动阶段的 getMethodNoSuper_nolock() 函数的耗时的差异非常明显。关键是这个还是系统函数,看起来是消息发送阶段的耗时增加了。

    Instrument 启动阶段耗时对比

    2.继续分析

    上面 Instrument 的方法耗时在设置隐藏系统库之后,对比发现没有明...