iOS 准确获取app进程启动时间点
debug环境下打印启动耗时环境变量设置
EditSchema -> Run -> Arguments -> Environment Variables
添加
DYLD_PRINT_STATISTICS
和DYLD_PRINT_STATISTICS_DETAILS
值均为1
其中DYLD_PRINT_STATISTICS
打印信息如下:
Total pre-main time: 203.41 milliseconds (100.0%)dylib loading time: 164.62 milliseconds (80.9%)rebase/binding time: 126687488.9 seconds (48910103.9%)ObjC setup time: 12.02 milliseconds (5.9%)initializer time: 56.09 milliseconds (27.5%)slowest intializers :libSystem.B.dylib : 2.42 milliseconds (1.1%)libBacktraceRecording.dylib : 4.68 milliseconds (2.3%)libMainThreadChecker.dylib : 33.34 milliseconds (16.3%)ShadowDemo : 11.59 milliseconds (5.7%)
DYLD_PRINT_STATISTICS_DETAILS
输出如下:
total time: 8.1 seconds (100.0%)total images loaded: 358 (351 from dyld shared cache)total segments mapped: 21, into 383 pagestotal images loading time: 7.8 seconds (95.4%)total load time in ObjC: 12.02 milliseconds (0.1%)total debugger pause time: 7.6 seconds (93.4%)total dtrace DOF registration time: 0.00 milliseconds (0.0%)total rebase fixups: 45,504total rebase fixups time: 6.99 milliseconds (0.0%)total binding fixups: 533,200total binding fixups time: 296.49 milliseconds (3.6%)total weak binding fixups time: 0.93 milliseconds (0.0%)total redo shared cached bindings time: 333.74 milliseconds (4.0%)total bindings lazily fixed up: 0 of 0total time in initializers and ObjC +load: 56.09 milliseconds (0.6%)libSystem.B.dylib : 2.42 milliseconds (0.0%)libMainThreadChecker.dylib : 33.34 milliseconds (0.4%)ShadowDemo : 11.59 milliseconds (0.1%)
total symbol trie searches: 1243688
total symbol table binary searches: 0
total images defining weak symbols: 37
total images using weak symbols: 92
开发阶段只具备参考意义,并不能准确反映线上的情况。
获取进程创建的时间
#import <sys/sysctl.h>
#import <mach/mach.h>static CFAbsoluteTime __startProcessTime = 0.f; // 进程创建时间
void processStartTime() {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{struct kinfo_proc kProcInfo;int cmd[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, [[NSProcessInfo processInfo] processIdentifier]};size_t size = sizeof(kProcInfo);__startProcessTime = 0.f;if (sysctl(cmd, sizeof(cmd)/sizeof(*cmd), &kProcInfo, &size, NULL, 0) == 0) {NSUInteger startTime = kProcInfo.kp_proc.p_un.__p_starttime.tv_sec * 1000.0 + kProcInfo.kp_proc.p_un.__p_starttime.tv_usec / 1000.0;/// 处理成相对于2001/01/01 00:00:00的绝对时间戳,以便与CFAbsoluteTimeGetCurrent()时间戳相对应NSCalendar * calendar = [NSCalendar currentCalendar];calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];NSDate *date = [calendar dateWithEra:1 year:2001 month:1 day:1 hour:0 minute:0 second:0 nanosecond:0];NSTimeInterval interval = [date timeIntervalSince1970];__startProcessTime = startTime - interval * 1000;}});
}
其他方案,诸如将某个+load
的调用时间作为启动的时间点,或者注入一个动态库,在动态库中某个时机记录一个时间作为起始时间都不够精确。
iOS 准确获取app进程启动时间点相关推荐
- iOS 获取app进程被杀死事件applicationWillTerminate
我的需求是,app推入后台,不做用户信息清除,但是程序被用户双击上滑杀死后,就对app用户信息做一个清除,让用户再次打开app时重新登录,so,就要获取app被杀死的事件了,appDelegate里面 ...
- iOS 准确获取 iPhone 状态栏、导航栏、TabBar高度,看这篇就够了
前言 最近在项目开发的时候,发现项目提供的获取 「状态栏+导航栏高度」的方法,在 iPhone 12 系列机型上是错误的.解决了这个问题之后,决定做个简单的总结,于是有了这篇文章. 本文主要是分析了遇 ...
- iOS 如何获取app分享的文档类数据
通过UIDocumentInteractionController或者是QLPreviewController来预览PDF等格式文件的时候,我们可以通过自带的UIActivityViewControl ...
- 【iOS】获取App Store上的.ipa包
在仿写一些程序时,避免不了获取它的图片素材等等,那么最快也是最有效的方式就是获取原程序的ipa包.更或者,你想要逆向分析某一款APP时,那么只有获取了ipa后才能进行class-dump,ida等等后 ...
- iOS逆向工程——获取app素材图片
原文链接:http://blog.csdn.net/felicity294250051/article/details/52134375 一.拿到资源包. 在iTunes里找到喜欢的应用,然后下载,直 ...
- IOS 如何获取app更新链接 如【itms-apps://itunes.apple.com/cn/app/id1362432761?mt=8】
这是 iTunes 接口地址 ,有兴趣可以看一下,我们要用到的接口如下,xxx 处换成自己 App 的 AppId ,AppId 可以在 iTunes Connect 里面看到. http://itu ...
- iOS基础 获取状态栏的高度
由于各代iPhone对屏幕尺寸以及前置摄像头.传感器等的迭代,对于其状态栏的高度也发生了一些微小的变化,不再是如以前的20高度了. 因此在iOS13后,对于状态栏的高度,有这么一个方法可以获取. if ...
- adb-获取包名/界面名、获取app启动时间、卸载app、退出app、查看所有进程
获取包名/界面名 Mac/Linux: adb shell dumpsys window windows | grep mFocusedApp adb shell dumpsys window win ...
- iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted
iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted 之前介绍了怎么操作越狱的iOS设备(以下简称为手机),但简单操作手机并不是目标,小程的目标是手机上特 ...
最新文章
- 智源论坛 | 智能处理器探索(3月21日)
- 错误笔记(1)——关于克隆虚拟机引发的后续问题
- Linux 定制X86平台操作系统
- asp 取数据 计算_地学数据 | 地理空间数据获取方式汇总
- MySQL存储引擎的选择
- Oracle-查看oracle是否有表被锁
- 参会邀请 - ISWC2020 | 第十九届国际语义网会议
- mysql哪些字段适合索引_(转)Mysql哪些字段适合建立索引
- android studio android 测试
- mysql int 转 varchar_Java后端程序员必备:MySQL索引失效的十大杂症
- mysql 批量数据循环插入
- Codeforces Round #584 (Div. 1 + Div. 2)
- 年会弹幕文字_公司办年会有哪些比较创意的形式?
- linux重装系统步骤 包含raid【主要针对服务器重装】
- 云计算 三种模式 各种云的区别
- POJ 1359 Spacecraft Malfunction G++
- 我想学习编程, 但不知道从哪里开始
- word文档中把几个图形组合在一起
- 浙江大学的计算机考研难度,浙江大学部分专业考研难度分析
- 从一到无穷大 #5 公有云时序数据库定价