一组三个问题,最后一个是期望的目标:
1)是否可以使用GraphicsServices方法并链接私有框架中的二进制文件。为什么不能像SpringBoard SBUIController那样做类似的事情?
2)没有越狱的情况下,有没有办法使用SBUIController?
3)如何在iOS 6上通过bundle ID启动应用程序(通过私有API但不需要越狱)?
一组三个问题,最后一个是期望的目标:
1)是否可以使用GraphicsServices方法并链接私有框架中的二进制文件。为什么不能像SpringBoard SBUIController那样做类似的事情?
2)没有越狱的情况下,有没有办法使用SBUIController?
3)如何在iOS 6上通过bundle ID启动应用程序(通过私有API但不需要越狱)?
应用程序和框架
GraphicServices是一个框架。它专门设计成可以链接到和被第三方应用程序使用。据我记得,SBUIController是Springboard的一部分,它是一个独立的应用程序(不设计为链接到其他应用程序)。
即使在某种情况下,您可以以某种方式链接/加载来自Springboard的代码,该代码也无法工作,因为您缺少与其他服务通信的授权。
授权
Jailbreak允许您将代码注入第三方应用程序(包括Springboard),从而在Springboard中执行代码并具有适当的授权。
实际上,对于越狱设备,您可以向您的代码添加授权并进行签名。但是,您将无法为未越狱的设备执行此操作。
因此,我建议您在未越狱设备上放弃SBUIController方法。
尝试启动应用程序
大约半年前我有同样的问题,并花了很多时间去解决它。我尝试了以下方法,但都没有成功:
还有其他几种方法。
一些额外的想法
如果第三方应用程序处理某些URL方案,则可以使用它来启动该第三方应用程序。
@interface PrivateApi_LSApplicationWorkspace
- (bool)openApplicationWithBundleID:(id)arg1;
@end
PrivateApi_LSApplicationWorkspace* _workspace;
_workspace = [NSClassFromString(@"LSApplicationWorkspace") new];
[_workspace openApplicationWithBundleID:bundleIdentifier];
你可以尝试使用RTLD_LAZY
或objc_getClass
。我已经在我的非越狱的iPhone 5上使用了这两种方法来访问BluetoothManager
。
#import <objc/runtime.h>
- WrightsCS