Adding an executable, that can be called via XPC 1. Copy configuration plist to appropriate system location* 2. Change plist owner to root 3. Add plist to lauchd (load or bootstrap) 4. Put service's executable to location, defined in configuration plist 5. Run client! *System locations
— user agent for current user: ~/Library/LaunchAgents/
— user agent for all users: /Library/LaunchAgents/
Establishing XPC connection Details: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/ Chapters/CreatingXPCServices.html Client side call on the server side
Establishing XPC connection Details: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/ Chapters/CreatingXPCServices.html Server side Instantiate your listener soon after launch: set it's delegate
Method signature restrictions for XPC calls Methods should return Void. Parameters could be: 1. Arithmetic types (int, char, float, double, uint64_t, NSUInteger, and so on) 2. BOOL 3. C strings 4. C structures and arrays containing only the types listed above 5. Objective-C classes, that implement the NSSecureCoding protocol (e.g. NSString or custom classes). 6. NSArray, NSDictionary and other collections with objects, conforming to NSSecureCoding. 7. Only one block (reply block), that returns Void and receives parameters of types, listed above.
Passing objects by copy and by proxy Passing by copy is a recommended and performant way. Passing by proxy decreases performance and should be avoided.