Get list of all installed apps
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.
Related videos on Youtube
![JonasG](https://i.stack.imgur.com/LD8wI.jpg?s=256&g=1)
Comments
-
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 almost 13 yearsThat reads only the pre installed apps and the cydia apps, im talking about the app store apps.
-
Björn Marschollek almost 13 yearsTry the
mobile
user's applications folder then:/private/var/mobile/Applications
-
rajomato almost 12 yearsIs this unsing a private API?
-
Igor almost 12 yearsThis 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 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 over 10 yearswithout jailbroken iPhones you can not do this.
-
Pushkraj Lanjekar over 10 years@BjörnMarschollek : Thanks you so much. I helped me a lot.
-
Funny over 9 yearswhy does it always returns "can not find installed app plist"
-
Gdogg almost 9 yearsThe original answer doesn't work in iOS 8 (that plist is missing) so this answer is the best so far.
-
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 about 7 yearsany other method for greater than iOS 8 version