tree 8cdab8731f84231bf0c26d8a8558ad83ccc3157c
parent ebc2576cc6fa5427484be6b3a6e3c0d5802aeff9
author Kiel Oleson <kielo@apple.com> 1723932016 -0700
committer GitHub <noreply@github.com> 1723932016 -0700
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsFcBAABCAAQBQJmwR1wCRC1aQ7uu5UhlAAAP0QQACuV1oT2MvXrc/XnAfjPwCJd
 RXS3BL0ILA4B6oe/KqzJv464/A7doRnkbeNk6lc0zMXC9w/5rfIS/ftejcvf6Ltq
 VDYtBNv6JMO2bg0WrPKZf3yhdwjRO08eUzJEWsXJa1CYs6DOS7/8VFCrde+4qGfy
 Gv9Pp6VROj6JB1t0GCz1cdbg8Fqa4b0VMZFJ6TTKcSlxJAXUS/tA6Aroh+KKnBN2
 25fOHG2l1nSCEht+enw722WBn5roxlCTHrYRy4F1xTp49OjkrRM9bAip0FYHS1BA
 MGc6VYwvwx4TV9BBjxqJiX9x/vfUBKBLVERWODeu88e13tvsVCuZ43bHadPT0wvX
 9Tq9zPwXKXNPwSHh7d7r/v6VX83fpD+/TFFy3DHMHedTiFkc4Gx2hMCVvMULD0np
 juMjxIA8G5o2Tel/NxI2HMdYgtNFAKvoMFYsN/a6YVeYkZyjjXa0Wn6zewBPZ3Ni
 oVLRAs453AGVEIG9k7MxSBbp6EMAPcxfixqr2s6kgUXH1ZMmrKAfwqE4EAbTnxvT
 kJxVEEbKzVV046Zhjaht3mYKsq4vfregoYfDCjUqOfvjQXDnJUyp9DAB4RX10OH/
 PynzkPAMHcJpsi+ykYOWFQRn/Tq4lQ5DVKJWcTo17elzgfrliBNRqiYNkaTCd+tM
 t97glg4kdbZ5lMbyt7KD
 =D2Sc
 -----END PGP SIGNATURE-----
 

[Darwin] New XPC Service (#34961)

* empty xpc service files

* XPC service needs to be C++ to use MTRLogging

* add tests; stub method signature

* start configuring test XPC listener

* add first test method to XPC service protocol

* tests: remove peformance test; add headers

* make MTRXPCService testable

* more working lines of XPC listener setup

* add dummy XPC service for testing

* add replying method to service protocol / implementation

* remove log - reply contents can be asserted

* make test interesting

* linty formatty

* remove personal development team from pbxproj

* fix new file headers

* less whitespace

* Restyled by whitespace

* Restyled by clang-format

* add new XPC device controller

* sketch out a first XPC method

* store WIP for rebase

* fix pbxproj merge mistake

* make WIP slightly more sensible

* WIP: remote proxy obj in `MTRDeviceController_XPC`

* more experiments

* WIP:  return type issue

run `MTRXPCServiceTests testMTRXPCServiceSetup` and see selection of proxy object method in `MTRDeviceController_XPC.m`/`initWithXPCListenerEndpointForTesting` around line 44 to see the problem.

* add `MTRDevice_XPC`

nothing exciting yet

* add device controller over XPC parameters stub

* add init split for XPC device controllers

not yet implemented, but there

* rename new XPC parameters class

`OverXPC` is already taken / means something else

* Restyled by whitespace

* Restyled by clang-format

* remove failing exploratory test

* lintfix

* Examples

* quickly attempt to fix test

unused variable -> warning -> error

* Restyled by whitespace

* Restyled by clang-format

* inevitably the file will need to be obj-C++

* prepare to use mach service name to create XPC connection

* allow for other XPC controller connection types for now

once mach service is working, i don't expect to need others, but easier to collapse classes than raise.

* constant for well-known matter plugin service name

* note to self and re-ordering of this code now what `XPCParameters` is a subclass

* XPC parameters should support secure coding

* don't keep around object proxy; make a new one when needed.  try calling the `checkIn` method when connecting.  remove old test methods that served their purpose.

* that doesn't need to be there.

* Restyled by whitespace

* Restyled by clang-format

* no longer fighting with compiler, have some `instancetype`

* extremely normal object construction

* somehow this header got thrown out

* Restyled by whitespace

* Restyled by clang-format

* Updating XPC interfaces

* hide `initWithMachServiceName:options:` constructor

tvOS/iOS compilation issues need a look

* make `MTRDeviceController_XPC` an XPC client

via `MTRXPCClientProtocol_MTRDeviceController`, which for the moment is empty

* remove initial tests

they served their purpose well but are no longer relevant

* call mach service constructor when appropriate

also logging

* remove some obsolete test methods

* more obsoletes fixed

* more obsolete removal and logging tweaks

* buildability tweaks

* Moving along

* Fixing header

* Fixing macros and codable

* Adding invoke?

* Restyled by whitespace

* Restyled by clang-format

* Actually hooking up to XPCConnection

* Actually hooking up to XPCConnection

* Adding XPC Parameters

* Adding XPC Parameter hookup

* Restyled by whitespace

* Restyled by clang-format

* true => YES

---------

Co-authored-by: Restyled.io <commits@restyled.io>
Co-authored-by: Justin Wood <woody@apple.com>