MobileCoreService这个系统的库,里面有个私有的类LSApplicationWorkspace
,利用运行时可以获得私有类里面的方法,- (id)allInstalledApplications; 该方法能够获得设备上所有的应用信息,包括系统的和用户的应用
获得的应用的信息是一个类对象LSApplicationProxy,该对象里面有方法获得app的版本,名称,bundleID,类型
- (void)getAllApps{ //获取手机上所有的app Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace"); NSObject *workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)]; NSArray *apps = [workspace performSelector:@selector(allInstalledApplications)]; Class LSApplicationProxy_class = objc_getClass("LSApplicationProxy"); for (int i = 0; i < apps.count; i++) { NSObject *temp = apps[i]; if ([temp isKindOfClass:LSApplicationProxy_class]) { //应用的bundleId NSString *appBundleId = [temp performSelector:NSSelectorFromString(@"applicationIdentifier")]; //应用的名称 NSString *appName = [temp performSelector:NSSelectorFromString(@"localizedName")]; //应用的类型是系统的应用还是第三方的应用 NSString * type = [temp performSelector:NSSelectorFromString(@"applicationType")]; //应用的版本 NSString * shortVersionString = [temp performSelector:NSSelectorFromString(@"shortVersionString")]; NSLog(@"类型=%@应用的BundleId=%@ ++++应用的名称=%@版本号=%@",type,appBundleId,appName,shortVersionString); } } }