I don't have an iPhone, but on it's face this seems like a very scary idea. They say they select from a database, but does that mean that I can whitelist what apps are shared with the server, or is some random person going to see everything I do?
There is no way to get hold of a list of installed or runnings apps through the Cocoa APIs (this is in contrast to Android, where you can obtain finite information on apps right down to data consumption).
However, there is a way to obtain all current running processes, using the standard sysctl function[1]. This includes apps that are backgrounded but not terminated. If you are interested someone on StackOverflow has put together some sample code (I haven't verified it, but it looks like it should work)[2].
This is not as useful as it sounds though. You're not getting app metadata, just process names. The developers behind AppMap will presumably have set up a database populated with the most popular apps, but will need to keep this current as more apps come to market.
It's really interesting. Thanks for the detailed explanation. I always wondered if there's any way to do this..
And it's good to know that Apple is OK with this kind of hack.
That's slightly different: iHasApp is matching back against a list of URL schemes (check the repository, you'll find a big fat JSON file full of app identifiers). This can tell you if an app is installed, but not if it's being actively run. See my answer above for how you can figure out whether an app is currently being used, rather than simply just installed.
You can use MobileDevice (private framework on OS X) or libimobiledevice to query lockdownd for a list of installed apps. Of course this only works from a PC host. Jailbroken apps can directly query lockdownd or traverse the filesystem if they would like to.
Also, the unstyled privacy page is a bit offputting: http://appmap.mobi/privacy