zoukankan      html  css  js  c++  java
  • iOS获取已安装应用列表

    1. /var/mobile/Applications/ 获取应用列表

     

        NSString *appDocDir = @"/var/mobile/Applications/"; //52844E32-3BDF-47DF-910E-3DCBB44324D6/";

        NSString *appDocDir1 = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] relativePath];

    //    NSArray *contentdir = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];

     

        NSArray *contentOfFolder = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:appDocDir error:NULL];

        

    //    NSDirectoryEnumerator* directoryEnumerator = [[NSFileManager defaultManager] enumeratorAtPath: appDocDir];

        

     

        for (NSString *aPath in contentOfFolder) {

            NSLog(@"apath: %@", aPath);

            NSString * fullPath = [appDocDir stringByAppendingPathComponent:aPath];

            BOOL isDir;

            if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir)

            {

    //            [fileList addObject: aPath];

                NSLog(@" -----   aPath:%@ ", aPath);

            }

     

     

     

     

    2.  获取应用列表文件  com.apple.mobile.installation.plist

     

    #pragma mark - Init  方法1

    -(NSMutableArray *)desktopAppsFromDictionary:(NSDictionary *)dictionary

    {

        NSMutableArray *desktopApps = [NSMutableArray array];

        

        for (NSString *appKey in dictionary)

        {

            [desktopApps addObject:appKey];

        }

        return desktopApps;

    }

     

    -(NSArray *)installedApp

    {

        BOOL isDir = NO;

        static NSString* const installedAppListPath = @"/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist";

     

        if([[NSFileManager defaultManager] fileExistsAtPath: installedAppListPath isDirectory: &isDir] && !isDir)

        {

            NSMutableDictionary *cacheDict = [NSDictionary dictionaryWithContentsOfFile: installedAppListPath];

            NSDictionary *system = [cacheDict objectForKey: @"System"];

            NSMutableArray *installedApp = [NSMutableArray arrayWithArray:[self desktopAppsFromDictionary:system]];

            

            NSDictionary *user = [cacheDict objectForKey: @"User"];

            [installedApp addObjectsFromArray:[self desktopAppsFromDictionary:user]];

            NSLog(@"installedApp :: %@",installedApp);

     

            return installedApp;

        }

        

        NSLog(@"can not find installed app plist");

        return nil;

    }

    #pragma mark - Init  //  方法2

    - (BOOL)APCheckIfAppInstalled:(NSString *) bundleIdentifier

    {

    static NSString *const cacheFileName = @"com.apple.mobile.installation.plist";

    NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName];

    NSDictionary *cacheDict = nil;

    NSString *path = nil;

    // Loop through all possible paths the cache could be in

    for (short i = 0; 1; i++)

    {

            

    switch (i) {

                case 0: // Jailbroken apps will find the cache here; their home directory is /var/mobile

                    path = [NSHomeDirectory() stringByAppendingPathComponent: relativeCachePath];

                    break;

                case 1: // App Store apps and Simulator will find the cache here; home (/var/mobile/) is 2 directories above sandbox folder

                    path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];

                    break;

                case 2: // If the app is anywhere else, default to hardcoded /var/mobile/

                    path = [@"/var/mobile" stringByAppendingPathComponent: relativeCachePath];

                    break;

                default: // Cache not found (loop not broken)

                    return NO;

                break; }

     

    BOOL isDir = NO;

    if ([[NSFileManager defaultManager] fileExistsAtPath: path isDirectory: &isDir] && !isDir) // Ensure that file exists

    cacheDict = [NSDictionary dictionaryWithContentsOfFile: path];

     

    if (cacheDict) // If cache is loaded, then break the loop. If the loop is not "broken," it will return NO later (default: case)

    break;

    }

     

    NSDictionary *system = [cacheDict objectForKey: @"System"]; // First check all system (jailbroken) apps

    if ([system objectForKey: bundleIdentifier]) return YES;

    NSDictionary *user = [cacheDict objectForKey: @"User"]; // Then all the user (App Store /var/mobile/Applications) apps

    if ([user objectForKey: bundleIdentifier]) return YES;

     

    // If nothing returned YES already, we'll return NO now

    return NO;

    }

     

     

     

     

     

     

     

     

        //

    //#import "MobileInstallation.h"

    #import "UIDevice+ProcessesAdditions.h"

     

        //越狱渠道

    //    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@"ApplicationType",@"Any",nil];

    //    NSDictionary *apps = MobileInstallationLookup(options);

    //    NSLog(@" %@", apps);

        

        // Example usage.  (公开)获取当前所有进程

        NSArray * processes = [[UIDevice currentDevice] runningProcesses];

        for (NSDictionary * dict in processes){

            NSLog(@"%@ - %@", [dict objectForKey:@"ProcessID"], [dict objectForKey:@"ProcessName"]);

        }

     

  • 相关阅读:
    event与WaitForSingleObject、MsgWaitForMultipleObjects等
    vc不包含MFC就不打印内存泄露?
    使用visual leak detector(vld)查找内存泄露
    C#里面中将字符串转为变量名
    如何编写nopCommerce插件
    object成员,不见了!
    NopCommerce 定制系列(一):增加 Sha256+Base64 加密
    c#中的二维数组与锯齿数组
    待搞清楚
    NopCommerce 2.5的部署
  • 原文地址:https://www.cnblogs.com/lee4519/p/4256632.html
Copyright © 2011-2022 走看看