Något "skall" tycker jag inte att det finns. Det finns ganska många att välja på. Däremot kan vissa vara bättre lämpade beroende på vad du vill åstadkomma med dem.
Nej, det finns inga 'skall', men det är helt enkelt så att för nya program så är oftast Obj-C + Cocoa bäst lämpat. Dels för att Cocoa är det APIet som Apple pushar mest för, och därför får flest nya features (och för den delen redan har en myriad av väldigt bra grejer), och dels för att Obj-C är det språket som Apple utgår ifrån att du använder när du utvecklar för Cocoa. Bryggorna som finns till Cocoa brukar inte vara något att bli väldigt upphetsad över heller, men kan eventuellt vara ett alternativ.
Det vanligaste undantagen är ju om man har en existerande kodbas i något annat språk eller om man vill ha multi-plattformsstöd. I båda dessa fall kan man använda Obj-C+Cocoa för view-lagret, men ibland är det helt enkelt lämpligare att köra Carbon där.
Dock är det ju så att Carbon inte har fått lika mycket kärlek av Apple som Cocoa har fått, och jag iaf tvivlar på att det kommer bli mycket mer kärlek hädanefter. Det känns som om Apple pushar för att Carbon-utvecklare ska gå över till Cocoa (och har väl iofs gjort det sedan Rhapsody).
Visst finns det andra APIer också, men de är rätt så mediokra till OS X.
Jag vet inte riktigt i vilka andra fall som Objective-C och Cocoa inte skulle vara bra lämpade. Objective-C är relativt snabbt (och går att göra väldigt snabbt genom IMP-cachning på väl valda platser, platser som man väljer genom att profilera koden), och är ju ett strikt superset av C samt har Objective-C++, så det finns ju stora möjligheter att använda andra libraries ifall det skulle vara så att det inte finns något i Obj-C för det man vill göra.