Swift项目中的特权助手工具

Ale*_*lex 5 cocoa objective-c swift

我已经使用Swift创建了一个Xcode项目,并使用了Objective-C创建了一个特权助手工具。helper工具在也是在Objective-C中创建的项目中可以很好地工作,但是在用Swift创建的项目中似乎不起作用。

服务本身正在安装。我可以在/Library/PrivilegedHelperTools目录中看到辅助二进制文件,并且它的权限似乎还可以(以及用户:)root。使用项目删除帮助程序会launchctl导致在我的项目运行时(按预期方式运行)重新安装该工具,但是我无法调用该帮助程序工具的任何方法。

既不会引发任何异常,也不会发生任何其他错误(至少似乎没有错误,因为控制台也什么也不显示)。

有人知道这可能与Swift无关吗?因为在另一个项目(用Objective-C编写)中运行相同的帮助工具非常有效。

Ale*_*lex 1

我能找出问题所在。辅助工具有一个main.m包含main()方法。我只是忘记用创建我的帮助器类实例并触发其侦听器的代码填充它:

#import <Foundation/Foundation.h>
#import "Helper.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        Helper *helper = [[Helper alloc] init];
        [helper run];
    }
    return EXIT_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)

此代码导致Helper实例在无限循环中运行,等待传入连接(来自Helper.h):

- (void)run
{
    [_listener resume];
    [[NSRunLoop currentRunLoop] run];
}
Run Code Online (Sandbox Code Playgroud)

_listener是 的一个实例NSXPCListener