Get list of all installed apps

30,831

Solution 1

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

Solution 2

On jailbroken iPhones, you can just read the /Applications folder. All installed applications go there. Just list the directories in /Applications using NSFileManager:

NSArray *appFolderContents = [[NSFileManager defaultManager] directoryContentsAtPath:@"/Applications"];

Solution 3

After some research I have found a framework called iHasApp. Here is a good solution to return a dictionary with app name, identifier and icon: Finding out what Apps are installed

Solution 4

There's also the AppList library, which will do all of the dirty work for you: rpetrich/AppList It's used in a lot of Jailbreak tweaks, so I don't know why it wasn't suggested here before.

One way to get just AppStore apps would be to check the value of isSystemApplication for each app returned in the list. Those with the value set to NO are regular AppStore apps. There's also a function applicationsFilteredUsingPredicate:predicate, so perhaps it would even be possible to filter the list beforehand.

Share:
30,831

Related videos on Youtube

JonasG
Author by

JonasG

iOS app developer.

Updated on July 30, 2020

Comments

  • JonasG
    JonasG almost 4 years

    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.

  • JonasG
    JonasG almost 13 years
    That reads only the pre installed apps and the cydia apps, im talking about the app store apps.
  • Björn Marschollek
    Björn Marschollek almost 13 years
    Try the mobile user's applications folder then: /private/var/mobile/Applications
  • rajomato
    rajomato almost 12 years
    Is this unsing a private API?
  • Igor
    Igor almost 12 years
    This is not a private API, but we get access to private folder. Apple will reject your app. Use this code only for jailbroken iPhone.
  • maddysan
    maddysan over 10 years
    @Fedorchuk, how can i get this installed application list from normal iOS devices i mean without jailbroken iPhones, plz help me to do this.
  • Igor
    Igor over 10 years
    without jailbroken iPhones you can not do this.
  • Pushkraj Lanjekar
    Pushkraj Lanjekar over 10 years
    @BjörnMarschollek : Thanks you so much. I helped me a lot.
  • Funny
    Funny over 9 years
    why does it always returns "can not find installed app plist"
  • Gdogg
    Gdogg almost 9 years
    The original answer doesn't work in iOS 8 (that plist is missing) so this answer is the best so far.
  • Gdogg
    Gdogg almost 9 years
    @Funny: You were probably trying on iOS 8. This only works on previous versions, as that plist doesn't exist anymore.
  • Saurabh Jain
    Saurabh Jain about 7 years
    any other method for greater than iOS 8 version