I can't offer anything in regards to HomeKit integration, as I have zero experience with this. I have spent quite some time carefully considering different options for this same type of automation.
I have a mix of Z-Wave and Zigbee devices connected to my C8 hub. I've tried to strategically place line powered Z-Wave devices to help build a strong mesh. This way, battery powered Z-Wave devices have a better opportunity to function without issues. This said, I'm moving away from Z-Wave water sensors to Zigbee. This is something I need to know will work first time, every time. Zigbee has proven to be more stable for me.
I'm using Sinope water sensors, both the WL4210 and WL4210S. The only difference between them is one comes with a remote sensor. Devices without the remote sensor are great for placement by toilets, water heaters, and other areas where they are not likely to be disturbed. Under sinks, I use the remote sensor version since it's easy to affix the sensor in place. This is an area where containers, bottles, etc. seem to be pushed around and can dislodge or tilt a sensor, potentially rendering it incapable of sensing. These also emit an audible tone when a leak is detected, or temperatures fall to a risk of freezing, in addition to sending a signal to the hub. They are supported by Hubitat directly, which is great. These ship with lithium batteries (can also be powered with alkaline), and with the supplied lithium batteries, they claim up to a 10 year battery life. These are more expensive than some others on the market. I would argue however, these are a very solid product. When considering the level of inconvenience a water leak can cause, this seems to be one application where it's money well spent. Our neighbour had a main floor washing machine leak while they weren't home. They were out of their house for 3 months while all the damage was being repaired. Home insurance or not, the stress and grief of water leak damage just isn't worth the cash outlay to mitigate such and event. When holding these, they just feel "solid". Each Sinope device paired quickly, first time, every time. I've got some line powered Zigbee devices, so there is a mesh I've created. Despite it being much smaller than my Z-Wave mesh, it has proven to be very reliable. My Z-Wave sensors (despite a strong mesh) sometimes did not pair right away, leaving me concerned about whether they'll actually work correctly when they need to.
For my valves, I use the EcoNet Controls Bulldog. One of these turns the water off. The second, opens the system to a drain via air gap. Residual pressure can continue to leak for some time, increasing possible water damage. Opening a second valve to a drain bleeds this off quickly to reduce this risk. When this occurs, I receive notifications to my cellphone, audible voice alerts to all the Sonos speakers in the home, and lights such as the kitchen floor lights, etc. illuminate blue to indicate a water problem.
Right now I have 9 Sinope Zigbee sensors, and 5 Z-Wave in the queue for gradual replacement. I have placed one under the built-in dishwasher, at each washing machine, under every sink, and beside each toilet, near the condensate pump for the furnace air conditioner, and the humidifier.
Even though none of this directly applies to HomeKit, hopefully it will offer some ideas about possible configurations of an overall approach.
EDIT:
One point I forgot to mention, is that with a water leak detection, I also cut power to appliances that uses water. These include washing machines, dishwasher, and tankless water heater. The reason being, the leak may be related to one of these pumping out water on a drain cycle. In this case, shutting off the water line will not help.