GithubHelp home page GithubHelp logo

lanvsblue / appbrowser Goto Github PK

View Code? Open in Web Editor NEW
312.0 27.0 60.0 85 KB

不需要越狱,调用私有方法,获取完整的已安装应用列表、打开和删除应用操作、应用运行时相关信息的查看。

Home Page: https://www.0xlan.cn

Objective-C 100.00%

appbrowser's Introduction

AppBrowser(Application属性查看器,不需要越狱!!!)

不需要越狱,调用私有方法 --- 获取完整的已安装应用列表、打开和删除应用操作、应用运行时相关信息的查看。

支持iOS10.X

注意

目前AppBrowser不支持iOS11应用查看, 由于iOS11目前还处在Beta版, 系统API还没有稳定下来。等到Private Header更新了iOS11版本,我也会进行更新。

功能

  • 已安装的应用列表
  • 应用的详情界面 (打开应用,删除应用,应用的相关信息展示)
  • 应用运行时信息展示(LSApplicationProxy)
  • 定制喜欢的字段,展示在应用详情界面

介绍

所有已安装应用列表(应用icon+应用名)

为了提供思路,这里只用伪代码,具体的私有代码调用请查看:AppBrowser/AppBrowser/Model/LANAppHelper.m

获取应用实例:

//首先获取 LSApplicationWorkspace 实例
//对应于LANAppHelper类中的+(id)defaultWorkspace;方法:
id<LSApplicationWorkspace *> applicationWorkspace = [LSApplicationWorkspace defaultWorkspace];

//使用 LSApplicationWorkspace 获取应用列表(LSApplicationProxy对象列表)
//对应于LANAppHelper类中的+(id)allInstalledApplications;方法:
NSArray<LSApplicationProxy *> applicationArray = [applicationWorkspace allInstalledApplications];

//取出第一个应用对象
id<LSApplicationProxy *> application = applicationArray[0];

获取应用名和应用的icon:

/* 
 * APP_NAME_KEY_PATH 和 APP_SHORT_NAME_KEY_PATH 的定义在代码头上
 * 应用的名字有可能出现在两个地方:
 * 在桌面上显示的普通应用的应用名来自info.plist文件中的CFBundleDisplayName字段
 * 在桌面的部分系统应用显示的是localizedShortName
 * 对应于LANAppHelper类中的+(id)nameForApplication:(id)application;方法:
 */
 
 #define APP_NAME_KEY_PATH @"_infoDictionary.propertyList.CFBundleDisplayName"
 #define APP_SHORT_NAME_KEY_PATH @"localizedShortName"
 
NSString *applicationName = [application valueForKeyPath:APP_NAME_KEY_PATH] ?:
                                      [application valueForKeyPath:APP_SHORT_NAME_KEY_PATH];

/* 
 * 应用的图片可以调用UIImage的私用方法:_applicationIconImageForBundleIdentifier:format:scale:
 * 传入BundleID,格式,缩放大小
 * 对应于LANAppHelper类中的+(id)iconForApplication:(id)application;方法:
 */
 UIImage *applicationImage = [UIImage _applicationIconImageForBundleIdentifier:[application bundleIdentifier] 
                                                                        format:@"" 
                                                                         scale:@([UIScreen mainScreen].scale)];

应用列表界面展示:

应用列表

应用运行时详情

打开应用:

//对应于LANAppHelper类中的+ (BOOL)openApplication:(id)application方法:
[applicationWorkspace openApplicationWithBundleID:[application bundleIdentifier]];

卸载应用:

//对应于LANAppHelper类中的+ (BOOL)removeApplication:(id)application方法:
[applicationWorkspace uninstallApplication:[application bundleIdentifier] withOptions:nil];

获取info.plist文件:

//info.plist文件实例化以后就是_infoDictionary属性,位置在[LSApplicationProxy superClass],也就是在LSBundleProxy类中
#define APP_PROPERTY_LIST_KEY_PATH @"_infoDictionary.propertyList"

应用运行时详情界面展示:

应用运行时详情

  • 右上角,从左往右第一个按钮用来打开应用;第二个按钮用来卸载这个应用
  • INFO按钮用来解析并显示出对应的LSApplicationProxy类

树形展示LSApplicationProxy类

通过算法,将LSApplicationProxy类,转换成了字典。

转换规则是:属性名为key,属性值为value,如果value是一个可解析的类(除了NSString,NSNumber...等等)或者是个数组或字典,则继续递归解析。 并且会找到superClass的属性并解析,superClass如果也符合解析原则,也会进入递归解析。

具体算法可以查看 LANAppHelper.m文件中的

+(NSDictionary *)infoForApplication:(id)application;

解析LSApplicationProxy类

功能演示

已安装的应用列表

已安装的应用列表

应用详情页

应用详情页

打开应用

打开应用

卸载应用

卸载应用

应用属性列表

应用属性列表

参考及引用

appbrowser's People

Contributors

0xlan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

appbrowser's Issues

请问可以检测进程吗?

您好:
现在有个需求,就是检测某个打开的app是否正在运行,运行多长时间?这个可以监听吗?用什么方法?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.