iOS 全息备份研究
一、获取手机中app列表
1、获取iPhone中所有安装的APP
获取iPhone手机中安装的所有App苹果没有提供直接的方法,但是可以通过苹果私有的api获取到。代码如下:
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");NSObject *workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];// 获取已安装app的列表
NSArray *appList = [workspace performSelector:@selector(allApplications)];
2、获取app相关信息
获取app一些相关的信息,比如名称、版本、图标、bundle Id 等。有两种方式可以获取。
1、通过应用资源文件中的plist文件获取
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");NSObject *workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];// 获取已安装app的列表NSArray *appList = [workspace performSelector:@selector(allApplications)];// 开始遍历appList数组中每个LSApplicationProxy类型的对象[appList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {ProgramModel *appModel = [[ProgramModel alloc] init];NSObject *object = appList[idx];
//获取应用资源文件路径NSString *filePath = [[object performSelector:@selector(resourcesDirectoryURL)] path];//获取plist文件的路径NSString *plistPath = [filePath stringByAppendingString:@"/info.plist"];NSDictionary *dictInfo = [NSDictionary dictionaryWithContentsOfFile:plistPath];NSLog(@"%@",dictInfo);NSString *name = dictInfo[@"CFBundleName"];NSString *bundleId = dictInfo[@"CFBundleIdentifier"];NSString *version = dictInfo[@"CFBundleVersion"];NSArray *arrIcon = dictInfo[@"CFBundleIconFiles"];NSString *icon;if (arrIcon.count > 0) {icon = dictInfo[@"CFBundleIconFiles"][0];}NSString *imagePath = [NSString stringWithFormat:@"%@/%@.png",filePath,icon];appModel.appName = name;appModel.appVersion = version;appModel.appBundleId = bundleId;appModel.appIcon = imagePath;[arrData addObject:appModel];
这种方法,能够获取大部分app的名称和小部分app的图标。为什么有些app的名称和图标获取不到,是因为有些应用的plist文件中没有这些数据。经过测试,这种方式只能在模拟器上获取到,真机上获取不到。
2、通过私有的API获取APP相关信息
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");NSObject *workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];// 获取已安装app的列表NSArray *appList = [workspace performSelector:@selector(allApplications)];// 开始遍历appList数组中每个LSApplicationProxy类型的对象[appList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {ProgramModel *appModel = [[ProgramModel alloc] init];NSObject *object = appList[idx];NSString *tempKey = [object performSelector:NSSelectorFromString(@"applicationIdentifier")];if (![tempKey containsString:@"apple"]) {//版本NSString *version = [object performSelector:NSSelectorFromString(@"shortVersionString")];//Bundle idNSString *bundleId = [object performSelector:NSSelectorFromString(@"applicationIdentifier")];// 下面两句代码是重点:利用私有API获取app的图标的路径NSDictionary *dict = [object performSelector:@selector(boundIconsDictionary)];NSString *appIconPath = [NSString stringWithFormat:@"%@/%@.png",[[object performSelector:@selector(resourcesDirectoryURL)] path],[[[dict objectForKey:@"CFBundlePrimaryIcon"] objectForKey:@"CFBundleIconFiles"] lastObject]];appModel.appVersion = version;appModel.appBundleId = bundleId;appModel.appIcon = appIconPath;[arrData addObject:appModel];}}];
这种方法可以在模拟器和真机上都有效,但是获取不到APP的名称,能够获取部分APP的图标。
iOS 全息备份研究相关推荐
- iGrimace IGevo 非ZNT V8 V3 IOSAPP一键新机 全息备份
IGevo一键新机 最新版iGevo正式版本 IGevo安装方式 IOS7.0-8.4系统通用一键新机 iGevo 首先打开越狱手机cydia-点击软件源--点击右上角编辑--再点左上角添加,输入源地 ...
- NZT 全息备份 详解
这里简单介绍一下NZT面板功能,详解看群公告或者群文件内的具体使用功能介绍, 机型:支持模拟3类型的设备iphone/itouch/ipad:配合下面的黑点,实时显示当前模拟的设备是什么型号: 版本号 ...
- NA-NP-IE系列实验5:配置文件的备份和IOS 的备份
实验5:配置文件的备份和IOS 的备份<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office& ...
- 实验十八 CISCO设备IOS的备份与升级
实验十八 CISCO设备IOS的备份与升级 一. CISCO设备IOS的备份 配置TFTP服务器.在PC上运行TFTP应用程序,并指定IOS的保存位置,如:E:\R-IOS . 2. 测试网 ...
- 专注于非越狱环境下iOS应用逆向研究,从dylib注入,应用重签名到App Hook
专注于非越狱环境下iOS应用逆向研究,从dylib注入,应用重签名到App Hook. 注意!本文所有操作均在以下环境下成功进行,不同平台或环境可能存在某些问题,欢迎大家在issue中提出问题以及相互 ...
- Tenorshare UltData for Mac(iOS数据恢复备份软件)
不小心删除了重要数据无法恢复怎么办?Tenorshare UltData for mac版是一个MacOS上的iOS数据恢复备份软件,可以帮助你轻松的找回手机里原有的数据,照片,短信,通话记录,联系人 ...
- iOS钥匙串三种提取方案【iOS加密备份】【keychain_dumper】【frida-objection】
iOS钥匙串(keychain)是iOS操作系统提供的一种安全存储机制,用于存储用户的敏感信息(如密码等).钥匙串管理器可以在任何应用和扩展中安全地存储和访问用户的敏感信息,而不会被其他应用的访问或破 ...
- iOS插件化研究之一——JavaScriptCore
原文:http://chentoo.com/?p=191 一.前言 一样的开篇问题,为什么要研究这个?iOS为什么要插件化?为什么要借助其他语言比如html5 js甚至脚本lua等来实现原本OC/Sw ...
- iOS 相册备份功能实现
公司产品做了备份相关功能,主要是检测未备份的图片,上传.以及检测已备份却不在相册的图片,恢复. 功能实现起来也不是很难,比对的话我用的MD5 ,进行比对文件是否重复,是否已上传 , ...
最新文章
- 3.推荐系统(矩阵分解)
- js里Date时间格式的常用转换-------(GMT转成yyyy-MM-dd)--------(根据日期获得星期几)...
- 你的 APP 为何启动那么慢?
- 《快学Scala》第二章 控制结构和函数
- 半潜式深海平台动力定位控制技术研究
- 什么是OLAP和OLTP
- Fiori Error message Exception raised without specific error
- java 向上抛异常_Java 异常的处理方式throws
- 清华大学张文增教授110页PPT讲专利申请、检索与解读
- pxe安装linux dhcp失败,利用PXE自动化安装Centos时启动DHCP服务时遇到错误,请求大佬指教...
- 创建虚拟目录http://localhost:1780/失败,错误:无法访问iis元数据库。您没用足够的特权访问计算机上的IIS网站...
- java中 获取classpath路径
- 高斯克吕格投影,将经纬度转换为投影坐标
- matlab二重定积分_怎么用matlab计算这个二重积分如何用matlab求二重积分
- 论文写作学习心得体会
- INSERT OVERWRITE LOCAL DIRECTORY
- 18.移动点餐端搭建----点餐系统移动端
- ECShop 需要短信功能的地方
- 2023 研究生考试 倒计时 213天
- 线性拟合的 R2 和p值怎么计算
热门文章
- 嵌入式成长轨迹33 【嵌入式学习阶段】【ARM环境调试】【在虚拟机下Ubuntu建立NFS网络文件系统】...
- Winmerge教程,包括可视化补丁,差异,合并示例
- 漫画喵的100行Python代码逆袭
- 评测三款最流行的txt阅读器(windows适用)
- Inferred type 'S' for type parameter 'S' is not within its bound
- Serverless Job—— 传统任务新变革
- 如何用FFmpeg编写一个简单播放器详细步骤介绍
- 软件工程之高质量代码(编码规范)
- 【翻译】HCP: A Flexible CNN Framework for Multi-Label Image Classification
- 最新 EDK2 实验