m (Added iOS 8 line) |
m (→Classic Mode) |
||
(12 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
[[SBApplication]] is a class | [[SBApplication]] is a class that represents individual applications. It contains anything you could possibly want to know about the application it represents. | ||
== | == Fetching SBApplications == | ||
[[SBApplicationController]] holds all known instances of SBApplication. There will usually just be a single instance per currently-running application. An instance can be retrieved using the wanted-application's bundle identifier. | |||
<source lang="objc"> | <source lang="objc"> | ||
//iOS 7- | |||
SBApplication* app = [[SBApplicationController sharedInstance] applicationWithDisplayIdentifier:@"com.yourcompany.appname"]; | SBApplication* app = [[SBApplicationController sharedInstance] applicationWithDisplayIdentifier:@"com.yourcompany.appname"]; | ||
// iOS 8 | |||
// iOS 8+ | |||
SBApplication* app = [[SBApplicationController sharedInstance] applicationWithBundleIdentifier:@"com.yourcompany.appname"]; | SBApplication* app = [[SBApplicationController sharedInstance] applicationWithBundleIdentifier:@"com.yourcompany.appname"]; | ||
</source> | </source> | ||
== | == Fetching Frontmost App's SBApplication Instance == | ||
This method will return the frontmost application's SBApplication instance. If no app is currently running <code>nil</code> will be returned. Internally it queries [[SBSceneManagerCoordinator]] to retrieve the application (if any) that is fulfilling the primary layout role. | |||
<source lang="objc"> | |||
[[SpringBoard sharedApplication] _accessibilityFrontMostApplication]; | |||
</source> | |||
== Fetching All Instances == | |||
[[SBApplicationController]] can provide an array containing all known instances of SBApplication. | |||
<source lang="objc"> | |||
[[SBApplicationController sharedInstanceIfExists] runningApplications]; | |||
</source> | |||
== Fetch "Now Playing" App == | |||
<source lang="objc"> | |||
SBApplication *nowPlayingApp = [[SBMediaController sharedInstance] nowPlayingApplication]; | |||
</source> | |||
== Launching an SBApplication == | == Launching an SBApplication == | ||
[[SBUIController]] can be used to launch an SBApplication. | |||
<source lang="objc"> | |||
SBApplication *appToLaunch = [[SBApplicationController sharedInstanceIfExists] runningApplications][0]; | |||
[[SBUIController sharedInstanceIfExists] activateApplication:appToLaunch]; | |||
</source> | |||
== Classic Mode == | |||
Here are the constants that represent application classic mode depending on the screen type, retrieved from reversing <code>SBApplicationClassicModeDescription(NSInteger)</code> or <code>SBApplicationClassicModeForString(NSString *)</code> from [[SpringBoard.framework]]. | |||
<source lang="objc"> | |||
// The number suffix, if present, represents the diagonal size of the screen, in inches | |||
typedef NS_ENUM(NSInteger, SBApplicationClassicMode) { | |||
SBApplicationClassicModeNone = 0, | |||
SBApplicationClassicModePhone = 1, | |||
SBApplicationClassicModePhone4 = 2, | |||
SBApplicationClassicModePhone4_7 = 3, | |||
SBApplicationClassicModePhone5_5 = 4, | |||
SBApplicationClassicModePhone5_8_Zoomed = 5, // rounded | |||
SBApplicationClassicModePhone5_8 = 6, // rounded | |||
SBApplicationClassicModePhone6_1 = 7, // rounded | |||
SBApplicationClassicModePhone6_5 = 8, // rounded | |||
SBApplicationClassicModePhone6_7 = 9, // rounded | |||
SBApplicationClassicModePad = 10, | |||
SBApplicationClassicModePad_10_5 = 11, | |||
SBApplicationClassicModePad_12_9 = 12, | |||
SBApplicationClassicModePad_11 = 13 // rounded | |||
}; | |||
</source> | |||
To disable launch animations simply apply the correct activation setting before calling <code>-activateApplication:</code>. | |||
<source lang="objc"> | |||
[appToLaunch setFlag:1 forActivationSetting:1]; // flag 1 = ON, Activation Setting 1 = @"noAnimate" | |||
</source> | |||
'''Notes:''' | |||
* This method will not respect parental control. However, you can determine if an SBApplication is restricted (parental locked) by using [[SBApplicationRestrictionController]], which [[SBApplicationController]] holds an instance of. | |||
<source lang="objc"> | <source lang="objc"> | ||
[[ | SBApplication *appToCheck = [[SBApplicationController sharedInstanceIfExists] runningApplications][0]; | ||
BOOL appIsRestricted = [[[SBApplicationController sharedInstanceIfExists] restrictionController] isApplicationIdentifierRestricted:[appToCheck bundleIdentifier]]; | |||
</source> | |||
'''Other Known Activation Flags''' | |||
{| class="activationflags" | |||
|- | |||
! Flag || Setting | |||
|- | |||
| 1 || Launch without animations. | |||
|- | |||
| 8 || Force launch animation to use app's context view instead of a snapshot. | |||
|- | |||
| 11 || Delay launch animation. | |||
|- | |||
| 43 || Set the app as the "Now Playing" application. | |||
|} | |||
== Useful Methods == | |||
These are a few of the useful items in SBApplication. | |||
<source lang="objc"> | |||
//the apps bundle id | |||
- (NSString *)bundleIdentifier; | |||
//is it SpringBoard's instance | |||
- (BOOL)isSpringBoard; | |||
//app location info | |||
- (NSString *)path; | |||
- (NSString *)dataContainerPath; | |||
- (NSString *)bundleContainerPath; | |||
- (NSString *)bundleVersion; | |||
- (NSString *)sandboxPath; | |||
//general info | |||
- (BOOL)isSetup; | |||
- (BOOL)isMobilePhone; | |||
- (BOOL)isFaceTime; | |||
- (BOOL)behavesLikePhone; | |||
- (BOOL)isWebApplication; | |||
- (BOOL)isWatchApplication; | |||
- (BOOL)isNowPlayingApplication; | |||
- (BOOL)isNowRecordingApplication; | |||
- (BOOL)showsProgress; | |||
- (BOOL)isRecordingAudio; | |||
- (BOOL)isRunning; | |||
- (BOOL)hasStartedLaunching; | |||
//the string displayed under the icon | |||
- (NSString *)displayName; | |||
//has it been launched at some point in SpringBoard's life | |||
- (BOOL)hasBeenFrontmost; | |||
//badge number | |||
- (id)badgeNumberOrString; | |||
//returns the app's FBScene instance, useful for doing context host view stuff | |||
- (FBScene *)mainScene; | |||
</source> | </source> | ||
== Application Info.plist == | == Application Info.plist == | ||
Line 52: | Line 154: | ||
Starting from 3.2 these ''documented'' keys are also recognized: | Starting from 3.2 these ''documented'' keys are also recognized: | ||
* ProductType, UIDeviceFamily, DeviceFamily<ref>The keys | * ProductType, UIDeviceFamily, DeviceFamily<ref>The keys ProductType and DeviceFamily are private but equivalent to UIDeviceFamily.</ref> | ||
* UIAppFonts | * UIAppFonts | ||
* UIFileSharingEnabled | * UIFileSharingEnabled | ||
Line 60: | Line 162: | ||
* _UILaunchAlwaysFullScreen<ref>http://pastebin.com/XmRqevnD</ref> | * _UILaunchAlwaysFullScreen<ref>http://pastebin.com/XmRqevnD</ref> | ||
== References == | == References == | ||
<references /> | <references /> | ||
* Header: | * Header: https://github.com/theos/headers/blob/master/SpringBoard/SBApplication.h | ||
{{occlass|library=SpringBoard.app|navbox=1}} | {{occlass|library=SpringBoard.app|navbox=1}} |
Latest revision as of 08:10, 6 June 2021
SBApplication is a class that represents individual applications. It contains anything you could possibly want to know about the application it represents.
Fetching SBApplications
SBApplicationController holds all known instances of SBApplication. There will usually just be a single instance per currently-running application. An instance can be retrieved using the wanted-application's bundle identifier.
//iOS 7-
SBApplication* app = [[SBApplicationController sharedInstance] applicationWithDisplayIdentifier:@"com.yourcompany.appname"];
// iOS 8+
SBApplication* app = [[SBApplicationController sharedInstance] applicationWithBundleIdentifier:@"com.yourcompany.appname"];
Fetching Frontmost App's SBApplication Instance
This method will return the frontmost application's SBApplication instance. If no app is currently running nil
will be returned. Internally it queries SBSceneManagerCoordinator to retrieve the application (if any) that is fulfilling the primary layout role.
[[SpringBoard sharedApplication] _accessibilityFrontMostApplication];
Fetching All Instances
SBApplicationController can provide an array containing all known instances of SBApplication.
[[SBApplicationController sharedInstanceIfExists] runningApplications];
Fetch "Now Playing" App
SBApplication *nowPlayingApp = [[SBMediaController sharedInstance] nowPlayingApplication];
Launching an SBApplication
SBUIController can be used to launch an SBApplication.
SBApplication *appToLaunch = [[SBApplicationController sharedInstanceIfExists] runningApplications][0];
[[SBUIController sharedInstanceIfExists] activateApplication:appToLaunch];
Classic Mode
Here are the constants that represent application classic mode depending on the screen type, retrieved from reversing SBApplicationClassicModeDescription(NSInteger)
or SBApplicationClassicModeForString(NSString *)
from SpringBoard.framework.
// The number suffix, if present, represents the diagonal size of the screen, in inches
typedef NS_ENUM(NSInteger, SBApplicationClassicMode) {
SBApplicationClassicModeNone = 0,
SBApplicationClassicModePhone = 1,
SBApplicationClassicModePhone4 = 2,
SBApplicationClassicModePhone4_7 = 3,
SBApplicationClassicModePhone5_5 = 4,
SBApplicationClassicModePhone5_8_Zoomed = 5, // rounded
SBApplicationClassicModePhone5_8 = 6, // rounded
SBApplicationClassicModePhone6_1 = 7, // rounded
SBApplicationClassicModePhone6_5 = 8, // rounded
SBApplicationClassicModePhone6_7 = 9, // rounded
SBApplicationClassicModePad = 10,
SBApplicationClassicModePad_10_5 = 11,
SBApplicationClassicModePad_12_9 = 12,
SBApplicationClassicModePad_11 = 13 // rounded
};
To disable launch animations simply apply the correct activation setting before calling -activateApplication:
.
[appToLaunch setFlag:1 forActivationSetting:1]; // flag 1 = ON, Activation Setting 1 = @"noAnimate"
Notes:
- This method will not respect parental control. However, you can determine if an SBApplication is restricted (parental locked) by using SBApplicationRestrictionController, which SBApplicationController holds an instance of.
SBApplication *appToCheck = [[SBApplicationController sharedInstanceIfExists] runningApplications][0];
BOOL appIsRestricted = [[[SBApplicationController sharedInstanceIfExists] restrictionController] isApplicationIdentifierRestricted:[appToCheck bundleIdentifier]];
Other Known Activation Flags
Flag | Setting |
---|---|
1 | Launch without animations. |
8 | Force launch animation to use app's context view instead of a snapshot. |
11 | Delay launch animation. |
43 | Set the app as the "Now Playing" application. |
Useful Methods
These are a few of the useful items in SBApplication.
//the apps bundle id
- (NSString *)bundleIdentifier;
//is it SpringBoard's instance
- (BOOL)isSpringBoard;
//app location info
- (NSString *)path;
- (NSString *)dataContainerPath;
- (NSString *)bundleContainerPath;
- (NSString *)bundleVersion;
- (NSString *)sandboxPath;
//general info
- (BOOL)isSetup;
- (BOOL)isMobilePhone;
- (BOOL)isFaceTime;
- (BOOL)behavesLikePhone;
- (BOOL)isWebApplication;
- (BOOL)isWatchApplication;
- (BOOL)isNowPlayingApplication;
- (BOOL)isNowRecordingApplication;
- (BOOL)showsProgress;
- (BOOL)isRecordingAudio;
- (BOOL)isRunning;
- (BOOL)hasStartedLaunching;
//the string displayed under the icon
- (NSString *)displayName;
//has it been launched at some point in SpringBoard's life
- (BOOL)hasBeenFrontmost;
//badge number
- (id)badgeNumberOrString;
//returns the app's FBScene instance, useful for doing context host view stuff
- (FBScene *)mainScene;
Application Info.plist
SpringBoard will recognize the following Info.plist keys:
- UISystemProvisioning
- SBDemoRole[1]
- SBIsRevealable[1][2]
- SBUsesNetwork[3]
- UIJetsamPriority
- SBIconClass
- SBSpotlightIcons
- UIRoles
- SBMachServices
- disabled
- CFBundleIconFile
- SPSearchDomainLaunchInfo
- SBAppTags[4][5]
- 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[6]
- UIAppFonts
- UIFileSharingEnabled
- UISupportedInterfaceOrientations
As of iOS 8, the following undocumented key is also recognized:
- _UILaunchAlwaysFullScreen[7]
References
- ↑ 1.0 1.1 http://blogs.oreilly.com/iphone/2008/11/hunting-down-infoplist-prefere.html
- ↑ http://www.tuaw.com/2007/11/29/enable-app-hiding-on-your-iphone/
- ↑ http://stackoverflow.com/questions/596589/iphone-sdk-internet-connection-detection
- ↑ http://www.ifans.com/forums/threads/what-keeps-these-hidden.331215/#post-2552445
- ↑ http://www.ifans.com/forums/threads/hide-applications.76176/#post-717439
- ↑ The keys ProductType and DeviceFamily are private but equivalent to UIDeviceFamily.
- ↑ http://pastebin.com/XmRqevnD