Retrieving an instance of SBApplication
To retrieve a known instance, you must go through SBApplicationController. For example, if the display ID of the application is known, you can use:
SBApplication* app = [[SBApplicationController sharedInstance] applicationWithDisplayIdentifier:@"com.yourcompany.appname"]; // iOS 8 SBApplication* app = [[SBApplicationController sharedInstance] applicationWithBundleIdentifier:@"com.yourcompany.appname"];
Get all active applications
|Available in||3.0 –|
|Available in||3.2 –|
Getting active applications traditionally need to be done via the static function at 0xeadc, or evaluate through the result of -[SBApplicationController allApplications] and check if the pid is valid. Fortunately, starting from 3.0, the SpringBoard class provides a method -[SpringBoard _accessibilityRunningApplications] which directly calls 0xeadc. Therefore, you can get the array of active applications from this.
Starting from 3.2 one can also use -[SpringBoard _accessibilityFrontMostApplication] to get the front most application. If you know the app you can check if [[app process] isFrontmost].
Launching an SBApplication
To launch an SBApplication you can use SBUIController:
[[SBUIController sharedInstance] activateApplicationAnimated:app];
Note 1. this method will not respect parental control. You can look up the list of restricted apps using -[SpringBoard parentalControlsDisabledApplications], however.
Note 2. this method will only work if on the home screen. It will not work when already in an application.
Note 3. this method is not available on iOS 9, use
SpringBoard will recognize the following Info.plist keys:
- Other UIKit keys described in http://developer.apple.com/IPhone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html
Starting from 3.2 these documented keys are also recognized:
- ProductType, UIDeviceFamily, DeviceFamily
As of iOS 8, the following undocumented key is also recognized:
Now Playing App Info
Getting the App info of the nowPlayingApp is now possible, thanks to SBMediaController's property (int _nowPlayingProcessPID) To do so, you must use SBMediaPlayer in combination with SBApplication itself:
int pid = [SBMediaPlayer sharedInstance].nowPlayingProcessPID SBApplication *nowPlayingApp = [SBApplicationController applicationWithPid:pid];
Now, you can use many of SBApplication's useful methods (like -(id)displayName and -(id)bundleIdentifier) to retrieve app Info of the nowPlaying app.
- The keys UIDeviceFamily and DeviceFamily are private but equivalent to ProductType.