我知道,其他应用程序可以从通过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?