【问题标题】:Helper app performing regular task using NSXPCListener使用 NSXPCListener 执行常规任务的帮助应用程序
【发布时间】:2014-08-11 22:58:21
【问题描述】:

我的助手代理应用在启动后需要不断执行一项活动,但它还需要通过 XPC 与主应用通信

但是,监听器的设置需要一个特定的 main 函数,并接管应用程序(省略标准的 AppDelegate NSApplication 方法)

int main(int argc, const char *argv[])
{
    NSString *bundleId = [[NSBundle mainBundle] bundleIdentifier];
    NSXPCListener *listener = [[NSXPCListener alloc] initWithMachServiceName:bundleId];
    XX *xx = [XX new];
    listener.delegate = xx;
    [listener resume];
    return 0;
}

如何两者兼得?带有 NSRunLoop 和 NSXPCListener 应用的后台应用?

【问题讨论】:

    标签: macos cocoa nsxpcconnection


    【解决方案1】:

    NSApplication 是 AppKit 框架的一部分。所以如果你写一个命令行工具作为代理,你就不能用这个了。但是您当然仍然可以使用我们的 NSRunLoop。只需使用[[NSRunLoop currentRunLoop] run]; 启动一个运行循环。在您的 [listener resume] 之后添加它应该保持进程正常运行。

    【讨论】:

    • 但是当我添加 [[NSRunLoop currentRunLoop] 运行]; [听众简历]之后;它永远不会被调用,因为简历接管了应用程序:/
    • 如果听众锁定你的程序,它永远不会返回,如果我正确理解你的问题,那就是实际问题。我刚刚运行了代码,它对我来说很好。程序继续运行,我可以通过 XPC 连接。如果我没看错,您的助手在应用程序包之外?因为您要公开 Mach 服务。您是否尝试在应用程序包之外使用 XPC 包?
    • helper 应该独立周期性地执行任务并通过 XPC 进行通信...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2016-11-21
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多