// // main.m // InstallerConnection // // Created by Mayur Pawashe on 7/9/16. // Copyright © 2016 Sparkle Project. All rights reserved. // #import #import "SUInstallerConnection.h" #import "SUInstallerCommunicationProtocol.h" #include "AppKitPrevention.h" @interface ServiceDelegate : NSObject @end @implementation ServiceDelegate - (BOOL)listener:(NSXPCListener *)__unused listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection { // This method is where the NSXPCListener configures, accepts, and resumes a new incoming NSXPCConnection. // Configure the connection. // First, set the interface that the exported object implements. newConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(SUInstallerConnectionProtocol)]; newConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(SUInstallerCommunicationProtocol)]; SUInstallerConnection *exportedObject = [[SUInstallerConnection alloc] initWithDelegate:newConnection.remoteObjectProxy remote:YES]; newConnection.exportedObject = exportedObject; // Resuming the connection allows the system to deliver more incoming messages. [newConnection resume]; return YES; } @end int main(int __unused argc, const char * __unused argv[]) { // Create the delegate for the service. ServiceDelegate *delegate = [ServiceDelegate new]; // Set up the one NSXPCListener for this service. It will handle all incoming connections. NSXPCListener *listener = [NSXPCListener serviceListener]; listener.delegate = delegate; // Resuming the serviceListener starts this service. This method does not return. [listener resume]; return 0; }