iOS(越狱)通过 SBAppContextHostManager 显示应用程序
Posted
技术标签:
【中文标题】iOS(越狱)通过 SBAppContextHostManager 显示应用程序【英文标题】:iOS (jailbroken) Displaying application via SBAppContextHostManager 【发布时间】:2013-08-04 21:17:22 【问题描述】:基本上,我正在尝试使用 SpringBoard 的私有 API SBAppContextHostManager 显示应用程序。到目前为止,我有这个代码:
SBAppContextHostManager *app = [[objc_getClass("SBAppContextHostManager") alloc] init];
[app setAppBundleID:@"com.apple.springboard"]; // just as an example
[app enableHostingForRequester:@"uniqueID" priority:1];
[app orderRequesterFront:@"uniqueID"];
SBHostWrapperView *view = [app hostViewForRequester:@"uniqueID"];
然后我打电话给
UIGraphicsBeginImageContextWithOptions([UIScreen mainScreen].bounds.size, YES, [UIScreen mainScreen].scale);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(c, YES);
[view.layer renderInContext:c];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
获取包含应用程序的视图的 UIImage。但是,这个 UIImage 的输出是完全空白的,这导致我认为我对 SBAppContextManager 的调用不正确,从而导致空白 SBHostWrapperView。因此,我应该如何以这种方式显示应用程序?
【问题讨论】:
哦,顺便说一句,我发现 SO 确实不是向 MobileSubstrate 提问的最佳场所。我只是碰巧在这里。我们大多数越狱开发者都在 irc.saurik.com 的 #theos 中闲逛。在那里提问很可能比在这里提问得到更好的回答。 谢谢,刚刚又问了一个问题;老实说,根本不知道频道存在! 【参考方案1】:如果您尝试预览应用程序,渲染 SBHostWrapperView 将不起作用。你看,SBHostWrapperViews 不会复制应用程序的渲染输出,它只是在屏幕上提供一个不同的位置供应用程序渲染。
相反,您可以在 SBUIController
类中使用 - (SBFullscreenZoomView*)systemGestureSnapshotWithiosurfaceSnapshotOfApp:(SBApplication*)arg1 includeStatusBar:(BOOL)arg2;
。
该方法返回一个 SBFullscreenZoomView,它是 UIView 的子类,并带有 arg1 中提供的应用程序快照。您可以使用您提供的第二个 sn-p 代码来获取 SBFullscreenZoomView 的 UIImage。这应该可以满足您的要求,为您提供仅特定应用程序的屏幕截图。
【讨论】:
干杯,效果很好,除了我的代码看起来像在 SD 设备上一样轻微像素化后生成的图像。关于为什么会这样的任何想法? 这很奇怪。你在视网膜设备上吗?另外,您是否对图像进行了任何转换?试试抗锯齿,可能吗? 是的,它是视网膜,图像上没有任何变换;我会尝试抗锯齿,然后调整比例 排序后发现我使用了错误的缩放比例;用正确的代码更新问题。以上是关于iOS(越狱)通过 SBAppContextHostManager 显示应用程序的主要内容,如果未能解决你的问题,请参考以下文章