Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS Private API - Launching an app by bundle ID

Set of three questions, last one is the desired goal:

1) It is possible to use a GraphicsServices method and link the binary from private framework. Why is it not possible to do similar with SpringBoard SBUIController?

2) Is there no way to use SBUIController without jail breaking?

3) How to launch an app by bundle ID (through private API but without jailbreaking) on iOS 6?

like image 819
TorukMakto Avatar asked Mar 25 '23 01:03

TorukMakto


2 Answers

Application vs Framework

GraphicServices is framework. It's specifically designed to be linked to and user by 3rd party apps. As I remember SBUIController is part of Springboard, which is standalone app (which is not designed to be linked to)

Even in the case, if you somehow able to link/load the code from Springboard, the code won't work, because you are missing entitlements to talk to other services.

Entitlements

Jailbreak allows you to inject code into 3rd party apps (including Springboard) and this way the code is executed in Springboard and has proper entitlements.

Actually, for the jailbreak device you can add entitlements to your code and sign it. However, you won't be able to do this for non jailbroken device.

So, I would say, that you should drop SBUIController approach for non jailbroken devices.

Attempts to launch an app

I had the same question about half year ago and I spend a lot of time on it. I tried following things without success:

  • SBSLaunchApplicationWithIdentifier
  • SBReturnToPreviousAppAtSpecifiedTime
  • Tried to use BKSWorkspace

and couple of other approaches.

Some additional thoughts

If 3rd party application handles some URL scheme, you can use it to launch this 3rd party app.

like image 139
Victor Ronin Avatar answered Apr 09 '23 15:04

Victor Ronin


As I know, only private api can do this.

@interface PrivateApi_LSApplicationWorkspace
- (bool)openApplicationWithBundleID:(id)arg1;
@end

PrivateApi_LSApplicationWorkspace* _workspace;
_workspace = [NSClassFromString(@"LSApplicationWorkspace") new];
[_workspace openApplicationWithBundleID:bundleIdentifier];

You can check https://github.com/wujianguo/iOSAppsInfo.

like image 24
justin Avatar answered Apr 09 '23 16:04

justin