Difference between revisions of "SBApplication"

From iPhone Development Wiki
Jump to: navigation, search
(Added a note on how to disable app launch animations.)
m (Now Playing App Info: Simplified the process.)
Line 69: Line 69:
  
 
== Now Playing App Info ==
 
== 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:
 
 
<source lang="objc">
 
<source lang="objc">
int pid = [SBMediaPlayer sharedInstance].nowPlayingProcessPID
+
SBApplication *nowPlayingApp = [SBMediaController nowPlayingApplication];
SBApplication *nowPlayingApp = [SBApplicationController applicationWithPid:pid];
 
 
</source>
 
</source>
  
Now, you can use many of SBApplication's useful methods (like -(id)displayName and -(id)bundleIdentifier) to retrieve app Info of the nowPlaying app.
+
You can use many of SBApplication's useful methods (like -(id)displayName and -(id)bundleIdentifier) to retrieve app Info of the nowPlaying app.
  
 
== References ==
 
== References ==

Revision as of 22:54, 13 February 2016

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];

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"

Notes:

  • 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 UIApplication or [[SBUIController sharedInstance] activateApplication:app]; instead.

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

SBApplication *nowPlayingApp = [SBMediaController nowPlayingApplication];

You can use many of SBApplication's useful methods (like -(id)displayName and -(id)bundleIdentifier) to retrieve app Info of the nowPlaying app.

References