Search code examples
objective-ciosjailbreak

Get list of all installed apps


I would like to get a list of all installed apps(NSArray). My app is a jailbreak app and is located in/Applications so Sandbox is no problem there. Is there any way to get a list of app store apps? I've already seen this in other apps (Activator, SBSettings...). I have no idea how to do this, because all of the apps sandboxes have that huge code, so i don't know how it would be possible to access the .app folder inside the sandbox.


Solution

  • You can use this code snippet:

     #import "InstalledAppReader.h"
    
    static NSString* const installedAppListPath = @"/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist";
    
    @interface InstalledAppReader()
    
    -(NSArray *)installedApp;
    -(NSMutableDictionary *)appDescriptionFromDictionary:(NSDictionary *)dictionary;
    
    @end
    
    
    @implementation InstalledAppReader
    
    #pragma mark - Init
    -(NSMutableArray *)desktopAppsFromDictionary:(NSDictionary *)dictionary
    {
        NSMutableArray *desktopApps = [NSMutableArray array];
    
        for (NSString *appKey in dictionary)
        {
            [desktopApps addObject:appKey];
        }
        return desktopApps;
    }
    
    -(NSArray *)installedApp
    {    
        BOOL isDir = NO;
        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]];
    
            return installedApp;
        }
    
        DLOG(@"can not find installed app plist");
        return nil;
    }
    
    @end