On Mac OS X Lion, CARemoteLayerServer and CARemoteLayerClient were added to QuartzCore. I tried to find out if they are suitable for sharing a graphical application between several processes, but without success.
I can use them successfully as part of a single process with some code in the lines:
- (void)buildLayerSingleProcess { CARemoteLayerServer *server = [CARemoteLayerServer sharedServer]; self.client = [[CARemoteLayerClient alloc] initWithServerPort: server.serverPort]; uint32_t clientID = self.client.clientId; CALayer *layer1 = [CALayer layer]; layer1.bounds = CGRectMake(0.0, 0.0, 100.0, 100.0); CGColorRef color = CGColorCreateGenericRGB(0.4, 0.2, 0.3, 1.0); [layer1 setBackgroundColor: color]; CFRelease(color); [layer1 setOpacity: 0.75]; [layer1 setBorderWidth: 5.0f]; layer1.position = CGPointMake([[self.window contentView] frame].size.width / 2.0, [[self.window contentView] frame ].size.height / 2.0); self.client.layer = layer2; CALayer *servedLayer = [CALayer layerWithRemoteClientId: self.client.clientId]; [[[self.window contentView] layer] addSublayer: servedLayer]; }
This is good, but I would like to try and do something similar between processes. The fact that server.serverPort is of type mach_port_t implies that it is suitable for use between processes.
However, when I split this code into two processes (two separate applications or the main process and the XPC service), when I try to initialize CARemoteLayerClient using mach_port_t from the server in another process, we get:
unable to register with server: 0x10000003
They may not be suitable for random processes, but using mach_port_t kinda implies that.
Has anyone else managed to use these classes between processes?
source share