Intro to XPC inter-process communication

6e39a16132f9e41e6869527ba0ced276?s=47 vashchenko
November 12, 2018

Intro to XPC inter-process communication

This presentation gives basic understanding how XPC works on macOS and how to establish it.

6e39a16132f9e41e6869527ba0ced276?s=128

vashchenko

November 12, 2018
Tweet

Transcript

  1. XPC Connection

  2. XPC currently the only non-deprecated inter-process communication API on macOS

  3. XPC services XPC connection

  4. We are NOT talking about XPC Services here. We are

    talking XPC as API fo inter-process communication
  5. XPC benefits 1. Performance: lazy (on-demand) automatic launching XPC services

    2. Architecture: one executable can represent several services 3. Security: making services with minimum privileges 4. Stability: crashing one process doesn't affect another
  6. 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/ — daemon: /Library/LaunchDaemons/
  7. Daemon config plist example

  8. libxpc API xpc.h and connection.h

  9. libxpc API xpc.h and connection.h

  10. NSXPCConnection 1. NSXPCConnection 2. NSXPCInterface 3. NSXPCListener 4. NSXPCListenerEndpoint

  11. NSXPCConnection 1. NSXPCConnection 2. NSXPCInterface 3. NSXPCListener 4. NSXPCListenerEndpoint optional

  12. None
  13. Establishing XPC connection Details: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/ Chapters/CreatingXPCServices.html Client side call on

    the server side
  14. 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
  15. Establishing XPC connection Server side In NSXPCListener's delegate method set

    up the connection:
  16. invalidation handler interruption handler

  17. invalidation handler interruption handler error →

  18. invalidation handler interruption handler error → OK →

  19. Error output goes to Console.app

  20. 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.
  21. 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.
  22. Thank you! Happy to help via julia.vashchenko@yahoo.com