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];
To launch an app without the animation simply apply the correct activation setting before calling that method.
[application setFlag:1 forActivationSetting:1]; // flag 1 = ON, Activation Setting 1 = @"noAnimate"
- This method will not respect parental control. However, you can look up the list of restricted apps using -[SpringBoard parentalControlsDisabledApplications].
- This method is not available on iOS 9, use
[[SBUIController sharedInstance] activateApplication:app];instead.
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.