要由launchd运行的iOS控制台应用程序

时间:2014-03-19 15:06:58

标签: ios xcode jailbreak launchd launch-daemon

有没有人有关于在Xcode for iOS中创建控制台工具的一些提示。我想通过launchd运行它,它应该向服务器发送请求。

但是我找不到任何方法来编译没有UI的“应用程序”在Xcode for ARM中。

THX

2 个答案:

答案 0 :(得分:2)

我同意the other answer,安装iOSOpenDev通常是解决此问题的正确方法。安装完成后,它会向Xcode添加新模板。然后,您可以使用文件 - >为项目添加新目标 - > :定位... 即可。从 iOSOpenDev 模板中选择一个名为命令行工具的模板。

但是,如果这不是一个选项,或者你想知道如何以另一种方式做到这一点,那就不难了。

只需创建一个新的Xcode项目。对于项目类型,从最简单的一个开始...可能是 iOS - > 申请 - > 单一视图应用

创建项目后,只需删除任何View,ViewController或.xib文件,因为您不会使用它们。在框架列表(项目设置 - >构建阶段)中,您可以删除UIKit.framework或非图形工具不需要的任何其他内容。

然后,只需进入生成的main.m文件,然后删除对UIApplicationMain()的调用。相反,我通常创建一个主守护进程类,然后从main.m开始使用类似的东西:

#import "HelloDaemon.h"

int main(int argc, char *argv[]) {
   @autoreleasepool {
      HelloDaemon* daemon = [[HelloDaemon alloc] init];

      // start a timer so that the process does not exit.
      NSTimer* timer = [[NSTimer alloc] initWithFireDate: [NSDate date]
                                                interval: 1.0
                                                  target: daemon
                                                selector: @selector(run:)
                                                userInfo: nil
                                                 repeats: NO];

      NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
      [runLoop addTimer: timer forMode: NSDefaultRunLoopMode];
      [runLoop run];
   }

   return 0;
}

我的守护进程类包含run:方法:

-(void) run:(NSTimer *) timer;

当您为iOS设备(而不是模拟器!)构建此“应用程序”时,它会将其粘贴在构建输出目录中,例如:

./Build/Products/Debug-iphoneos/HelloDaemon.app/HelloDaemon

可执行文件是.app目录下的HelloDaemon文件。将其复制到您的iPhone,并从命令行中将其用作启动守护程序,或者您喜欢的其他方式。

参考

Chris Alvares' old, but good tutorial on launch daemons

答案 1 :(得分:1)

iOSOpenDev准确提供您所描述的内容。