0

有一个名为Cydia的命令行实用程序open,它将打开一个 iOS 应用程序并附加到 SpringBoard。

是否有相应的close命令可以向应用程序发送正确的信号?它需要发送正确的信号,以便在终止之前进行必要的清理。该kill命令无法使用,因为应用程序无法捕获信号。

我一直在寻找这个特定的命令行工具,但还没有找到。

谢谢你。

4

2 回答 2

0

我不知道任何这样的命令,但是您当然可以自己构建一个模拟主页按钮按下的命令。那应该以正常方式关闭打开的应用程序。这不是异常kill。如果应用程序支持多任务处理,它将进入后台,并在此过程中进行所有正常的UIApplicationDelegate回调。

  1. 构建一个非图形的 iOS 应用程序。只需去掉UIApplicationMain()调用main.m

  2. 将您的应用程序与 GraphicsServices.framework 链接起来。它是一个私有框架,因此在 Xcode Build Phases设置窗口中,您通常选择要链接的框架,您不会在公共列表中看到它。在文件系统上导航到Private Frameworks文件夹(例如/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/PrivateFrameworks)并选择它。

  3. 您需要为 GSEvent.h(可能还有 GSWindow.h,它#includes)生成头文件。 在这里您可以找到两者的副本。将它们添加到您的项目和#include GSEvent.h文件main.m中。

  4. 使用这个功能:

#include "GSEvent.h"

- (void)simulateHomeButton
{
   struct GSEventRecord record;
   memset(&record, 0, sizeof(record));
   record.type = kGSEventMenuButtonDown;
   record.timestamp = GSCurrentEventTimestamp();
   GSSendSystemEvent(&record);
   record.type = kGSEventMenuButtonUp;
   GSSendSystemEvent(&record);
}

此代码应该可用作关闭当前应用程序(即代码在前台的 UIApplication 内运行)或另一个打开的应用程序(如构建命令行实用程序的情况)的方法。

Hattip 到libActivator的想法。

于 2013-04-14T09:53:53.993 回答
0

您是否尝试过使用

killall MobileCydia

应该管用

于 2013-03-25T13:30:18.437 回答