SBApplication: Difference between revisions

From iPhone Development Wiki
Line 30: Line 30:
Note 1. this method will not respect parental control. You can look up the list of restricted apps using {{ObjcCall|SpringBoard|parentalControlsDisabledApplications}}, however.
Note 1. this method will not respect parental control. You can look up the list of restricted apps using {{ObjcCall|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 2. this method will only work if on the home screen. It will not work when already in an application. (Fact check this please. this is not true for iOS 9 at least)


Note 3. this method is not available on iOS 9, use <code>[[UIApplication#Launching_an_application|UIApplication]]</code> instead.
Note 3. this method is not available on iOS 9, use <code>[[UIApplication#Launching_an_application|UIApplication]]</code> instead. You could also use <code>[[SBUIController sharedInstance] activateApplication:app];</code>. Also Note 2 is false.


== Application Info.plist ==
== Application Info.plist ==

Revision as of 20:29, 16 November 2015

SBApplication is a class representing the application screen on the SpringBoard. SBApplication is a subclass of SBDisplay. See SBDisplay for more info.

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

Signature -(NSArray*)_accessibilityRunningApplications;
Available in 3.0 –
Signature -(SBApplication*)_accessibilityFrontMostApplication;
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. (Fact check this please. this is not true for iOS 9 at least)

Note 3. this method is not available on iOS 9, use UIApplication instead. You could also use [[SBUIController sharedInstance] activateApplication:app];. Also Note 2 is false.

Application Info.plist

SpringBoard will recognize the following Info.plist keys:

Starting from 3.2 these documented keys are also recognized:

  • ProductType, UIDeviceFamily, DeviceFamily[6]
  • UIAppFonts
  • UIFileSharingEnabled
  • UISupportedInterfaceOrientations

As of iOS 8, the following undocumented key is also recognized:

  • _UILaunchAlwaysFullScreen[7]

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.

References