当我们在使用任何一款APP时,他们都有各自的启动流程,看似比较简单容易,实际有我们想象不到的复杂。而且每次点开APP之后都会有点卡顿,显示加载中的状态,进入APP时比较慢,这时就需要对ios app启动流程进行优化了,而优化的前提是要知道哪些方面出现了问题,友盟+U-APM监控测试平台可以帮助开发者检测APP,找到问题根源所在,才能有针对性的解决问题,让优化省时省力。这篇文章就给大家分享如何精准定位bug及ios app启动流程!

1、完整启动流程

  •点击程序图标

  •执行main函数

  •执行UIApplicationMain函数

  •创建UIApplication对象、UIApplication的delegate对象

  •开启事件循环监听系统

  •程序加载完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法

  ①、创建窗口对象

  ②、创建控制器对象

  ③、设置窗口的根控制器

  ④、让窗口成为主窗口、并且可见

  2、UIApplicationMain方法

  在main.m的main函数中执行了UIApplicationMain这个方法,这是ios程序的入口点

  int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName)

  ①、argc、argv:ISO C标准main函数的参数,直接传递给UIApplicationMain进行相关处理即可;

  ②、principalClassName:指定应用程序类,该类必须是UIApplication(或子类)。

  ③、delegateClassName:指定应用程序类的代理类,该类必须遵守UIApplicationDelegate协议;

  此函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性;UIApplication对象会依次给delegate对象发送不同的消息,接着会建立应用程序的main runloop(事件循环),进行事件的处理(首先会调用delegate对象的application:didFinishLaunchingWithOptions:),程序正常退出时这个函数才返回。如果进程要被系统强制杀死,一般这个函数还没来得及返回进程就终止了。

  3、UIApplication

  ①、UIApplication是应用程序的核心,每一个程序在运行期必须有UIApplication(或子类)的一个实例(有且仅有一个),通过[UIApplication sharedApplication]可以得到这个单例实例的指针。

  ②、UIApplication帮助管理应用程序的生命周期,而它通过delegate来履行这个任务。

  ③、UIApplication可以接收事件,把所有用户事件都放入队列,逐个处理,它会发送当前事件给一个合适的目标控件进行处理。它还将部分事件转给delegate对象来处理,delegate可处理的事件包括:应用程序的生命周期事件(如程序启动和关闭)、系统事件(如来电)

  4、AppDelegate代理(生命周期回调)

  UIApplicationMain方法根据第四个参数delegateClassName生成应用程序类的代理(该类必须遵守UIApplicationDelegate协议),然后设置给UIApplication。应用程序生命周期发生变化就会调用AppDelegate代理中的方法。

  5、UIWindow

  UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow,但可以手动创建多个UIWindow。

  UIWindow的主要作用:

  ①、提供一个区域来显示视图

  ②、将事件分发给视图

  ③、与UIViewController协同工作,方便完成设备方向旋转的支持

  6、UIViewController控制器

  UIViewController属于MVC模型中的C(Controller),说的更具体点它是一个视图控制器,管理着一个视图(UIView)。

一个UIViewController应该只管理一个view hierarchy,通常来说一个完整的view hierarchy指的是占满整一个屏幕。而很多app满屏中会有各个区域分管不同的功能,一些开发者喜欢直接新建一个UIViewController和一套相应的view来完成所要的功能,这样做完全不符合Apple提供的设计规范。 

精准定位bug

软件技术员都知道要常常跟踪BUG,发现BUG,但等到真正上手工作的时候,还是觉得繁琐的细节很多,一个不留神就容易出错了!那么,到底在实际工作中,有没有实用的测试管理工具来助力自己的软件测试工作一臂之力呢?

友盟+U-APM应用性能监控平台,通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析、内存分析、网络分析等性能监测能力,支持多场景、多通道智能告警监测,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。提供云真机测试能力,助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。

友盟+U-Apm应用性能监控平台,对于错误捕获能力强,类型丰富、快速定位错误根源,多种告警通道、专业产品服务等诸多优势,可快速精准帮助开发者同学快速、便捷的定位到出问题的代码行,以及线上应用崩溃的情况和解决方案。在实际开发过程中很⼤程度的提升了我们对线上 app 的优化分析效率,是一款专为移动开发者打造的质量监控工具。

灵活的运用检测工具,其实是非常有利于我们的测试工作的。而且也能更好的提高我们的软件测试工作效率!