9

According to this iphonedevsdk.com forum post, Frenzapp uses two methods to detect other apps installed on an iOS device:

  1. UIApplication canOpenUrl: to check if known custom URL schemas can be opened
  2. A "kernel level C function", that is "authorized by apple".

What "kernel level C function" are they using? Where is it documented?

Glenn Barnett
  • 2,031
  • 1
  • 21
  • 31
  • 2
    Check my answer to similar question: http://stackoverflow.com/questions/4312613/can-we-retrieve-the-applications-currently-running-in-iphone-and-ipad/4312705#4312705 . I'm not sure if that's the approved method, but at least it gives you a list of processes) – Vladimir Dec 09 '10 at 15:47
  • good question, saw that app and was wondering myself. – James J Dec 09 '10 at 17:06

2 Answers2

3

Thanks to Vladamir and Stephen Darlington for commenting and pointing us at what is most likely the answer:

Community
  • 1
  • 1
Glenn Barnett
  • 2,031
  • 1
  • 21
  • 31
  • Actually, `sysctl` is documented (http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man3/sysctl.3.html) and is, therefore, "blessed" by Apple. The absence of documentation _does_ mean it's forbidden. – Stephen Darlington Dec 09 '10 at 17:08
0

Right, though the process list is both very limited and presupposes that the process is indeed "running" in the background.

The key for discovery is having a large enough inventory of both process names (but the background tasking can only go so far...) and URLhandlers. And only a few companies in the World (if that many) outside of Apple can actually do this well.

And of course, the Springboard has an open-socket protocol that lets the App Store app (and potentially other apps) query whether an app is installed or not... but that's actually a much tougher one to crack.

Yann
  • 11
  • 2