What is the difference between the "label" and "hint" property if I'm trying to make a control accessible? Moreover, what do the "traits" do? Are all of these properties spoken by VoiceOver if I fill them in?
This is all described in Apple's Accessibility Programming Guide.
But here's my random take on your question:
I would try to think of the accessibility properties in terms of how a sighted person would use your app.
They would look at the display and see stuff.
A button might have a short title, such as "Stop". A slider might have a nearby label saying "Volume". That's the type of stuff that a sight impaired person might like to find in the control's label property.
A sighted person would recognize a standard button or slider by it's shape and decoration. But a vision impaired person might have no clue about that shape. So that's the type of information that should go in the traits property for someone who can't see whether something looks like a button. "button".
If you had a short help document for your app, it might show a picture of your app, with arrows pointing at the elements, and a small bubble caption on each of those arrows saying stuff like "Stops playing annoying fart sounds" and "Changes fart loudness from silent to ear shatteringly gross". These would be your helpful "hints".
Traits and hints are optional, just as some apps in the App store have no help documentation, and weird unrecognizably shaped buttons. But every visible or control element should have a label.
'zat help?