三个问题,最后一个是期望的目标:
1) 可以使用 GraphicsServices 方法并从私有框架链接二进制文件。为什么不能用 SpringBoard SBUIController 做类似的事情?
2)没有越狱就没有办法使用SBUIController吗?
3)如何在 iOS 6 上通过捆绑 ID(通过私有 API 但不越狱)启动应用程序?
三个问题,最后一个是期望的目标:
1) 可以使用 GraphicsServices 方法并从私有框架链接二进制文件。为什么不能用 SpringBoard SBUIController 做类似的事情?
2)没有越狱就没有办法使用SBUIController吗?
3)如何在 iOS 6 上通过捆绑 ID(通过私有 API 但不越狱)启动应用程序?
应用程序与框架
GraphicServices 是框架。它专门设计用于链接到第 3 方应用程序并由其用户使用。我记得 SBUIController 是 Springboard 的一部分,它是独立的应用程序(不是设计为链接到的)
即使在这种情况下,如果您能够以某种方式从 Springboard 链接/加载代码,该代码也将无法工作,因为您缺少与其他服务交谈的权利。
权利
越狱允许您将代码注入 3rd 方应用程序(包括 Springboard),这样代码在 Springboard 中执行并具有适当的权利。
实际上,对于越狱设备,您可以在代码中添加权利并对其进行签名。但是,您将无法为非越狱设备执行此操作。
所以,我想说,你应该放弃非越狱设备的 SBUIController 方法。
尝试启动应用程序
大约半年前我有同样的问题,我花了很多时间。我尝试了以下事情但没有成功:
以及其他几种方法。
一些额外的想法
如果 3rd 方应用程序处理一些 URL 方案,您可以使用它来启动这个 3rd 方应用程序。
据我所知,只有私有 api 可以做到这一点。
@interface PrivateApi_LSApplicationWorkspace
- (bool)openApplicationWithBundleID:(id)arg1;
@end
PrivateApi_LSApplicationWorkspace* _workspace;
_workspace = [NSClassFromString(@"LSApplicationWorkspace") new];
[_workspace openApplicationWithBundleID:bundleIdentifier];
您可以尝试使用RTLD_LAZY
或objc_getClass
。我已经BluetoothManager
在我的非越狱iPhone 5 上使用这两种方式访问。