Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Privileged Helper Tool within a Swift project

I've created an Xcode project using Swift and a privileged Helper tool using Objective-C. The helper tool works fine within a project which has also been created in Objective-C but it doesn't seem to work within a project created with Swift.

The service itself is being installed. I can see the helper binary within the /Library/PrivilegedHelperTools directory and it's permissions seem to be okay (as well as the user: root). Removing the helper by using launchctl results in re-installing the tool when my project runs (that works as expected) but I can't call any method of the helper tool.

There is neither any exception being thrown nor does any other error occur (at least there seem to be no error as the Console shows nothing as well).

Does anybody know whether this might be an issue with Swift? Because running the same helper tool within another project (written in Objective-C) works well.

like image 517
Alex Avatar asked Dec 03 '14 09:12

Alex


1 Answers

I could figure out what the problem was. The helper tool has a main.m wich contains a main() method. I just forgot to fill it with code that creates an instance of my helper class and trigger its listener:

#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;
}

This code causes the Helper instance to run in an infinite loop waiting for incoming connections (from Helper.h):

- (void)run
{
    [_listener resume];
    [[NSRunLoop currentRunLoop] run];
}

_listener is an instance of NSXPCListener.

like image 96
Alex Avatar answered Oct 20 '22 15:10

Alex