1:查看手机中安装的所有App的包名
(void)GetPackageName{
Class lsawsc = NSClassFromString(@"LSApplicationWorkspace");
NSObject* workspace = [lsawsc performSelector:NSSelectorFromString(@"defaultWorkspace")];
NSArray *Arr = [workspace performSelector:NSSelectorFromString(@"allInstalledApplications")];
for (NSString * tmp in Arr)
{
NSString * bundleid = [self getParseBundleIdString:tmp];
NSLog(@"%@",bundleid);
}
}
(NSString *)getParseBundleIdString:(NSString *)description
{
NSString * ret = @"";
NSString * target = [description description];
// iOS8.0 "LSApplicationProxy: com.apple.videos",
// iOS8.1 " com.apple.videos",
// iOS9.0 " com.apple.PhotosViewService "
if (target == nil)
{
return ret;
}
NSArray * arrObj = [target componentsSeparatedByString:@" "];
switch ([arrObj count])
{
case 2: // [iOS7.0 ~ iOS8.1)
case 3: // [iOS8.1 ~ iOS9.0)
{
ret = [arrObj lastObject];
}
break;
case4:// [iOS9 +){ ret = [arrObj objectAtIndex:2]; }break;default:break;
}
return ret;
}
2:通过准确的包名唤起App
(void)OpenApp{
Class lsawsc = NSClassFromString(@"LSApplicationWorkspace");
#pragmaclang diagnostic push
#pragmaclang diagnostic ignored"-Warc-performSelector-leaks"
NSObject* workspace = [lsawsc performSelector:NSSelectorFromString(@"defaultWorkspace")];
#pragmaclang diagnostic pop
// iOS6 没有defaultWorkspace
if ([workspace respondsToSelector:NSSelectorFromString(@"openApplicationWithBundleID:")])
{
#pragmaclang diagnostic push
#pragmaclang diagnostic ignored"-Warc-performSelector-leaks"
[workspace performSelector:NSSelectorFromString(@"openApplicationWithBundleID:") withObject:@"com.Calendar"];
#pragmaclang diagnostic pop
}
}