-->

启动没有iphone URL模式等应用程序?(Launch other application wi

2019-06-26 14:41发布

我知道,其他应用程序可以从通过URL模式应用程序中调用。 但并不是所有的应用程序注册的模式URL。 所以,我怎么可以启动该应用程序? 我开发的iPhone jaibroken。

Answer 1:

我用这种方式:

void* sbServices = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices", RTLD_LAZY);
int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) = dlsym(sbServices, "SBSLaunchApplicationWithIdentifier");
int result = SBSLaunchApplicationWithIdentifier((CFStringRef)bundleId, false);
dlclose(sbServices);

而你需要授予你的应用程序的权利:

 <key>com.apple.springboard.launchapplications</key>
 <true/>

它可以在iOS 6上运行。



Answer 2:

有几种方法可以使用捆绑ID启动应用。

SBApplication

SBApplication *app = [[objc_getClass("SBApplicationController") sharedInstance] applicationWithDisplayIdentifier:@"com.wrightscs.someapp"];
[[objc_getClass("SBUIController") sharedInstance] activateApplicationFromSwitcher: app];

SBApplicationController

SBUIController *uicontroller = (SBUIController *)[%c(SBUIController) sharedInstance];
SBApplicationController *appcontroller = (SBApplicationController *)[%c(SBApplicationController) sharedInstance];

if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
{
    [uicontroller activateApplicationFromSwitcher:[[appcontroller applicationsWithBundleIdentifier:bundleID] objectAtIndex:0]];
}
else
{
    // doesn't work outside of Springboard
    [uicontroller activateApplicationAnimated:[[appcontroller applicationsWithBundleIdentifier:bundleID] objectAtIndex:0]];
}

有我在4.x和使用其他方法SBUIController但停在5.0工作,所以我不打算将它张贴。



Answer 3:

据我所知,只有私有API可以做到这一点。 第一

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

然后用它

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

您可以检查https://github.com/wujianguo/iOSAppsInfo 。



Answer 4:

我刚才已经测试:在IOS 9.3.5和11.2的工作,也该方法不需要任何包含或库的动态加载。 完全依赖于OBJ-C运行时。 而且这种方法也并不需要越狱的设备,可以在Xcode设备和免费的开发者帐户配置的配置文件来完成。 不要以为它会通过应用程序商店审查程序,但可以在企业或临时destribution等被成功地使用。

id wrkS;
wrkS = [NSClassFromString(@"LSApplicationWorkspace")  performSelector:@selector(defaultWorkspace)];
[wrkS performSelector:@selector(openApplicationWithBundleID:) withObject:@"com.apple.reminders"];


文章来源: Launch other application without URL schema in iphone?