Consistent naming patterns help devs navigate the hierarchy of libraries/frameworks/APIs available.
CoreFoo is going to be a low level library for dealing with Foo. FooKit is going to be a high level way to create gui apps that deal with Foo. Likely FooKit uses CoreFoo under the hood.
And HomeKit is a product for IOT. Not 100% logical naming
They inherited "AppKit" and "Foundation" from Next and they have been running with that naming convention ever since.
Why not? No different to the unix lib prefix
It's a NeXT legacy, and it's a mighty fine and nice sounding one, so why not?