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.
4 Answers
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
-
Is this unsing a private API? – rajomato Sep 01 '12 at 18:59
-
5This is not a private API, but we get access to private folder. Apple will reject your app. Use this code only for jailbroken iPhone. – Igor Sep 01 '12 at 19:19
-
2@Fedorchuk, how can i get this installed application list from normal iOS devices i mean without jailbroken iPhones, plz help me to do this. – maddysan Jan 06 '14 at 04:57
-
3without jailbroken iPhones you can not do this. – Igor Jan 06 '14 at 07:33
-
1why does it always returns "can not find installed app plist" – Funny Oct 02 '14 at 08:50
-
1@Funny: You were probably trying on iOS 8. This only works on previous versions, as that plist doesn't exist anymore. – Gdogg Sep 24 '15 at 21:48
-
any other method for greater than iOS 8 version – Saurabh Jain Apr 04 '17 at 05:09
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"];

- 9,899
- 9
- 40
- 66
-
1That reads only the pre installed apps and the cydia apps, im talking about the app store apps. – JonasG Aug 29 '11 at 13:26
-
1Try the `mobile` user's applications folder then: `/private/var/mobile/Applications` – Björn Marschollek Aug 29 '11 at 14:55
-
1The original answer doesn't work in iOS 8 (that plist is missing) so this answer is the best so far. – Gdogg Sep 24 '15 at 21:47
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.

- 3,801
- 9
- 35
- 69

- 2,019
- 24
- 55
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