Les services que l'ont voit sous le menu de l'application ont une longue histoire qui démarre avec NeXTStEP.
Les applications telles qu'elles sont conçues aujourd'hui, sont truffées de fonctions en tout genre. C'est ainsi par exemple que dans un traitement de texte comme Word on retrouve, un correcteur orthographique, un gestionnaire de polices, etc...
C'est ainsi que l'on retrouve souvent les mêmes fonctions dans des applis différentes. D'autre part, l'introduction de l'interface graphique a contribué à rendre les choses simples et surtout familières. Aussi il serait interessant pour un utilisateur habitué à utiliser une fonction dans une application, de la réutiliser dans une autre application pour faire la même chose. C'est bien ce que nous faisons dans la vie courante.
C'est de cette constatation qu'est né l'idée des services. En réalité l'idée en soi n'est pas nouvelle car c'est la même idée qui a amené à utiliser les sous-programmes ou les apis en informatique. Permettre à tous les programmes d'utiliser le même sous programme pour réaliser la même fonction. Celle ci étant très bien optimisée.
Quand on développe sous Cocoa, lors du packaging de son appli, on peut préciser que certaines fonctions implémentées sont proposée sous forme de services. On décrit également le type de données traité par le service. On le décrit dans la plist de l'appli (sa carte de visite en quelque sorte). Le système se charge de gérer le service en l'intégrant dans la liste des services d'une appli dès lors qu'on a mis dans un presse-papier de données dont le type est compatible au service.
C'est une sorte de plugin géré par le système.
Ne pas oublier que les services web dont on parle beaucoup sont basés sur le même principe. Sauf que pour les utiliser, on utilise des protocoles d'accès plus elaborés.