User login


Què és Cocoa?


Cocoa és un dels entorns dels sistema operatiu Mac OS X, juntament amb els entorns Carbon i Java. Consisteix d'un conjunt de llibreries i un intèrpret de programari orientat a objectes, i comparteix un entorn de desenvolupament integrat amb altres entorns d'aplicacions.

Aquest tòpic de programació expandeix aquesta definició, descrivint el propòsit, les capacitats, i la forma física de Cocoa. Llegint aquesta descripció funcional de Cocoa, és un primer pas essencial per entendre Cocoa com un desenvolupador.

L'Entorn Cocoa

Les aplicacions Cocoa estan entrant gradualment en la normalitat de Mac OS X. iPhoto és una aplicació Cocoa, com ho són les aplicacions Safari i Mail. Aquestes aplicacions han rebut una aclamació de bones crítiques per seus dissenys nets i rics en característiques, i per les interfícies d'usuari atractives. Però el que no és aparent a l'usuari mitjà és com de ràpid (comparat amb els temps de desenvolupament típics) aquestes aplicacions han passat de l'estat de disseny a l'estat de desplegament. Què hi ha a Cocoa que fa que sigui una alternativa completament viable a Carbon com una aplicació d'entorn de desenvolupament? Aquesta secció dona una resposta a aquesta qüestió.

Introduint-nos a Cocoa

Com en tots els entorns d'aplicació, Cocoa té dues cares; té una part d'execució i una part de desenvolupament. En l'aspecte d'execució, les aplicacions Cocoa presenten la interfície d'usuari Aqua i estan perfectament integrants amb les altres parts visibles del sistema operatiu: el Finder, el Dock, i altres aplicacions de tots els entorns. Per aconseguir, arribar a ser un part sense fissures de l'experiència de l'usuari, Cocoa en l'aspecte d'execució exhibeix l'excel·lència.

Però és en l'aspecte del desenvolupament que és més interessant pels programadors. Cocoa és un conjunt integrat de components de programari orientat a objectes -- classes -- que et permeten crear ràpidament aplicacions per Mac OS X robustes i amb tots els requeriments. Aquestes classes són blocs de programari re-utilitzables i adaptables; els desenvolupadors poden usar-los o poden estendre-les per als seus requeriments específics. Les classes Cocoa existeixen només sobre cada necessitat concebible en el desenvolupament, des d'objectes d'interfície d'usuari per fer xarxa Bonjours, i on una necessitats no s'ha pensat anteriorment, pots crear fàcilment una sub-classe d'una classe existent que respongui a les teves necessitats.

Cocoa té un dels majors pedigrí entre els entorns de desenvolupament orientats a objectes. Des de la seva introducció com NeXTSTEP el 1989 per avui en dia, s'ha re-definit i comprovat contínuament. El seu disseny elegant i potent és un conjunt ideal per al desenvolupament ràpid de programari de tot tipus, no només aplicacions sinó també eines de línia de comandes, plug-ins, i altres tipus de paquets. Cocoa dona a la teva aplicació la majoria de les seves característiques i aparença "per estalviar", estalviar-te temps de treball per dedicar-lo a les característiques que són distintives.

Pots utilitzar varis llenguatges de programació per desenvolupar programari Cocoa. El llenguatge principal és l'Objective-C, que té el seu propi sistema d'execució per Cocoa. L'Objective-C és un súper-conjunt de ANSI C que s'ha estès amb certes característiques sintàctiques i semàntiques (derivades de l'Smalltalk) per donar suport a la programació orientada a objectes. Les poques convencions afegides són fàcils d'aprendre i utilitzar. Ja que Objective-C es basa en la fundació ANSI C, pots lliurement barrejar codi C estricte amb codi Objective-C. Més encara, fins i tot pots barrejar codi C++ amb el teu codi Cocoa i enllaçar-lo dins el mateix executable- Finalment, Cocoa suporta el llenguatge Java a través d'un conjunt paral·lel de classes Java i un mecanisme de ponts entre les interfícies Java amb la seva correspondència en Objective-C. El gust Java de Cocoa et permet barrejar (sense límits) objectes natius de Java amb objectes Cocoa.

Les biblioteques base de classes Cocoa venen empaquetades en dues frameworks, la Foundation i la Application Kit. Com en totes les frameworks, aquestes contenen no solament una llibreria compartida dinàmicament (o de vegades varies versions de compatibilitat de llibreries), sinó també fitxers de capçalera, documentació API, i recursos relacionats. Aquest duo, reflexa la divisió entre les interfícies de programació gràfiques de Cocoa que tenen unes i les altres no. Aquestes dues frameworks són essencials per qualsevol projecte Cocoa en que el producte final és una aplicació. Mac OS X també envia varies frameworks més petites que les interfícies de Cocoa principals, com són les frameworks de Salva Pantalles i l'Agenda, i altres que seran afegits al sistema operatiu en un temps.

Com Encaixa Cocoa dins el Mac OS X

Si has navegat la web Apple Developer Connection (http://developer.apple.com/), probablement t'has creuat amb el diagrama de l'arquitectura del sistema mostrat en la següent figura.

Figura 1: Arquitectura Mac OS X -- perspectiva simplificada

Aquest diagrama és sempre per un motiu: per representar sense confusions als que no estan familiaritzats amb Mac OS X les dependències entre components. Però en aquesta simplicitat s'omet detalls importants i n'emmascara altres. Aquests detalls s'omplen en una part important en la imatge que mostra com Cocoa s'ajunta amb la resta del Mac OS X.

La següent figura situa Cocoa amb més precisió en l'arquitectura. Aquest diagrama mostra el Mac OS X com un serie de capes de programari que van des de la fundació de Darwin als variats entorns d'aplicació; les capes intervenen representen els contenidors de programari del sistema sota el paraigües dels dos frameworks majors, Core Services i Application Services. El diagrama suggereix que un component en una capa generalment té dependències en la capa de sota.

Figura 2: Cocoa en l'arquitectura de Mac OS X

D'alguna forma, aquest diagrama és similar a l'anterior. Per exemple, el component dels sistema que és en gran part responsable de re-dibuixar la interfície d'usuari Aqua, Quartz (implementat en la framework Core Graphics) és part de la capa Application Services. I a la base de la pila de l'arquitectura hi ha Darwin; tot dins Mac OS X, inclòs Cocoa, finalment depèn de les funcions Darwin.

Apple ha dissenyat curosament Cocoa per que algunes de les seves interfícies donin accés a les capacitats de les capacitats de les tecnologies internes que les aplicacions necessiten normalment. Però si necessites algunes capacitats que no es mostren a través de les interfícies programades de Cocoa, o si necessites un control més acurat de que succeeix en la teva aplicació, pots utilitzar directament les frameworks internes. (Un exemple típic és Core Graphics; que criden les seves funcions a les d'OpenGL, el teu codi pot dibuixar imatges més complexes que les possibilitats que et permeten els mètodes de dibuix de Cocoa) Afortunadament, utilitzar aquestes frameworks de baix nivell no és un problema perquè les interfícies de la majoria de frameworks depenents estan escrites en ANSI C estàndard, del qual el llenguatge Objective-C n'és un súper-conjunt.

Les principals frameworks internes que Cocoa depèn o de les que utilitza a través de les seves classes i mètodes són la Core Foundation, Carbon, Core Graphics (Quartz), Launch Services, i Print Core (el sub-sistema d'impressió):

  • Core Foundation. Moltes classes de la framework Foundation estan basades en un tipus ocult del Core Foundation. Aquesta relació és la que fa que la conversió sigui compatible entre els tipus de Core Foundation i Foundation. Algunes de les implementacions de Core Foundation, a la vegada, està basat en una part de BSD de la capa de Darwin.
  • Carbon. Cocoa entra lleugerament dins de Carbon per alguns dels serveis que proporciona. És així perquè varies frameworks estan situades com serveix del sistema en la capa Core Services i Application Services. La base de Carbon és una part important d'aquestes frameworks; per exemple, aquest té el File Manager, que Cocoa utilitza per conversions entre varies representacions dels sistemes de fitxers.
  • Core Graphics. El dibuix i les classes d'imatges a Cocoa es basen en la framework Core Graphics, que implementa Quartz i el servei de finestres.
  • Launch Services. La classe NSWorkspace mostra les capacitats internes de Launch Services. Cocoa també utilitza la característica de registre de Launch Services per obtindre les icones associades amb aplicacions i documents.
  • Print Core. Les classes d'impressió Cocoa presenten una interfície orientada a objectes cap al sub-sistema d'impressió.

A més, Cocoa utilitza el servei de conversió de text de l'entorn de Carbon per algunes conversions de codificacions de cadenes. Varis mètodes Cocoa també utilitzen parts de la framework I/O Kit per la gestió de l'energia, la framework QuickDraw (QD) per el dibuixat QuickDraw, la framework Apple esdeveniment (AE) per el processat dels Esdeveniments d'Apple, i la framework ATS per el suport de fonts.

Característiques de les Aplicacions Cocoa

És possible crear una aplicació Cocoa sense afegir cap línia de codi. Fer un nou projecte d'aplicació Cocoa utilitzant XCode i llavors construir el projecte. És així. Per descomptat, aquesta aplicació no farà gran cosa, o com a mínim res que sigui interessant. Però aquest aplicació extremadament simple permet executar-se quan es fa doble clic, mostrar el seu icona al Dock, mostrar el seu menú i finestra principal (titulada, "Window"), oculta les seves comandes, es comporta de forma semblant a altres aplicacions que corren, i surt quan se li indica. Pots moure, canviar la mida, minimitzar, i tancar la finestra. Pots fins i tot imprimir el contingut (buit) de la finestra.

Imagina que podries aconseguir amb una mica de codi.

En termes d'esforç de programació, Cocoa et dona, al desenvolupador, moltes coses lliures i moltes que tenen un cost baix. Per descomptat, arribar a ser un desenvolupador productiu de Cocoa significar arribar a familiaritzar-te amb conceptes nous, patrons de disseny, interfícies de programació, i eines de desenvolupament, i aquest esforç no és negligible. Però a més familiaritat millor productivitat. La programació acaba essent en gran part un exercici de muntar els components programats que proporciona Cocoa a els objectes propis i el codi que defineix la lògica del teu programa en particular i tot això enganxar-ho junt.

A continuació es mostra una llista de quin valor afegit té Cocoa en un aplicació amb només amb una mica d'esforç per part teva:

  • Framework d'aplicació bàsica-- Cocoa proporciona la infraestructura del comportament de l'aplicació, la finestra, i l'espai de treball. En la majoria de casos, no tens que gestionar esdeveniments directament o enviar comandes de dibuixat a la llibreria de representació.
  • Objectes d'interfície d'Usuari-- Cocoa ofereix un conjunt important d'objectes per fer la teva interfície d'usuari de l'aplicació. La majoria d'aquests objectes estan disponibles en paletes de l'Interfaced Builder, una aplicació de desenvolupament per crear interfícies d'usuari; simplement desplaça un objecte des d'una paleta sobre la superfície de la teva interfície, configura els seus atributs, i connecta'l a altres objectes. (I, per descomptat, sempre pots instanciar, configurar, i connectar aquests objectes mitjançant la programació).

    A més, les característiques tecnològiques de Cocoa que permeten interfícies d'usuari, incloent-hi aquestes que faciliten l'accessibilitat, la validació del rendiment, i la facilitat de connexió entre objectes de la interfície d'usuari i els objectes personalitzats.
  • Dibuix i Imatges-- Cocoa permet dibuixar eficientment les vistes personalitzades amb una framework per bloquejar el sistema gràfic i crear cistes (o porcions de vistes). Inclou eines programades per dibuixar línies Bezier, realitzar transformacions suaus, imatges compostes i creant varies representacions d'imatges.
  • Interacció amb el Sistema-- Cocoa dona a la teva aplicació vies per interactuar amb (i utilitzar els serveis de) el sistema d'arxius, l'espai de treball, i altres aplicacions.
  • Intercanvi de Informació-- Cocoa simplifica l'intercanvi d'informació dins una aplicació i entre aplicacions utilitzant els modes de copiar-enganxar i desplaçar-deixar a través del menú Services.
  • Rendiment-- Per realçar el rendiment de la teva aplicació, Cocoa proporcionar suport programat per multi-fils, processament idle-time, càrrega suau de recursos, gestió de memòria, i manipulació de bucle d'execució.
  • Aplicacions basades en Document-- Cocoa especifica una arquitectura per aplicacions composades per un potencial nombre il·limitat de documents, amb cadascun en la seva pròpia finestra (un processador de textos, per exemple). De fet, si esculls el tipus de projecte "Document-based application", molts dels components d'aquests tipus d'aplicació són creats per tu.
  • Escripting-- A través de les llistes de propietats i un conjunt de classes que suporten Cocoa, pots fer les teves aplicacions escriptables; que vol dir, que pot respondre a comandes fets per escripts AppleScripts. Les aplicacions poden també executar scripts o utilitzar esdeveniments individuals d'Apple per enviar comandes i rebre'n des d'altres aplicacions. Com a resultats, cada aplicació escriptable pot proporcionar serveis a varis usuaris i altres aplicacions.
  • Internacionalització-- Cocoa utilitza un apropament a la internacionalització i localització que ha estat refinada durant molts anys. Aquest apropament, basant en llistes d'usuaris de llenguatge preferits, posen recursos localitzats en els paquets de l'aplicació. També proporcionen eines i interfícies programades per generar i accedir a cadenes localitzades. Conseqüentment, la manipulació de text a Cocoa està basada en Unicode per defecte, i això és un actiu per la internacionalització.
  • Gestió de Desfer-- Pots guardar les accions que realitza l'usuari amb la gestió de desfer, i aquest es farà càrrec de desfer-les (i refer-les) quan els usuaris escullin l'opció apropiada en els ítems del menú. La gestió de desfer i refer operacions estan en piles separades.
  • Text-- Cocoa proporciona un sistema sofisticat sistema de text que et permet fer coses amb text d'una manera senzilla (per exemple, mostrar vistes de text amb text editable) a altres més complexes, com el control de les lligadures, el comprovació d'ortografia, i incorporació d'imatges.
  • Impressió-- D'una forma semblant al sistema de text, l'arquitectura d'impressió et permet imprimir documents i altres continguts d'aplicacions a través d'un rang de control i sofisticació. A un nivell més simple, pots imprimir els continguts de qualsevol vista per defecte. En un nivell més complicat, pots definir el contingut i format a imprimir, controlar com un treball d'impressió es realitza, i afegir una vista accessòria al panell d'impressió.
  • Preferències-- El sistema dels defectes d'usuari és basat en una base de dades en la qual pots guardar preferències globals i específiques de l'aplicació.
  • Fer Xarxa-- Cocoa inclou una arquitectura d'Objectes Distribuïts que permeten que un procés Cocoa es comuniqui amb altres processos en el mateix ordinador or en un de diferent. També ofereix interfícies programades per incorporar capacitats Bonjour en la teva aplicació.
  • Multimèdia-- Cocoa proporcionar suport per vídeo QuickTime i capacitats d'àudio.

L'entorn de Desenvolupament

Les següents seccions parlen de l'XCode, l'Interface Builder, i les altres aplicacions, eines i recursos que formen part de l'entorn de desenvolupant integrat al Mac OS X--amb un especial èmfasi a Cocoa.

Introducció

Per dir que Cocoa té el seu propi entorn de desenvolupament no seria un definició exacta. Per un motiu, els programadors poden utilitzar les aplicacions de desenvolupament d'Apple, Xcode i Interface Builder o altres entorns de desenvolupament per desenvolupar Programari, com Carbon. Altrament, és possible desenvolupar aplicacions Cocoa sense utilitzar XCode i Interface Builder. Per exemple, pots utilitzar CodeWarrior de Metrowerks per gestionar, compilar i depurar els projectes Cocoa. I, si vols treballar realment en la base forta, pots escriure codi utilitzant un editor de text com Emacs, construir aplicacions des de la línia de comandes utilitzant fitxers make, i depurar l'aplicació des de la línia de comanda utilitzant el depurador gdb.

Però l'XCode i l'Interface Builder són les aplicacions preferides a utilitzar per desenvolupar programari Cocoa. Els seus orígens coincideixen amb els orígens de Cocoa, i conseqüentment hi ha un alt grau de compatibilitat entre les eines i frameworks. A la vegada, Xcode i Interface Builder el fan extraordinàriament fàcil per dissenyar, gestionar, construir i depurar projectes de programari Cocoa. També hi ha l'AppleScript Studio, que expandeix algunes capacitats per permetre't crear tant aplicacions Cocoa escriptables com aplicacions que utilitzen AppleScript per controlar altres aplicacions.

XCode

Xcode es un motor que acciona l'entorn de desenvolupament integrat (IDE) d'Apple per a Mac OS X. Aquesta és una aplicació que té en compte la majoria de detalls del projecte des de la concepció fins al desplegament. Aquest et permet

  • crear i gestionar projectes, incloent-hi requeriments específics, dependències, i la construcció d'estils
  • escriure el codi font en editors amb característiques com l'acoloriment de la sintaxi i la tabulació automàtica
  • navegar i buscar a través dels components d'un projecte, incloent-hi els fitxers de capçalera i la documentació
  • muntar el projecte
  • depurar el projecte en un depurador gràfic

XCode construeix projectes a partir de codi escrit en C, C++, Objective-C, Objective-C++, i Java. Genera executables per tots els tipus suportats en Mac OS X, incloent-hi eines de línia de comanda, frameworks, plug-ins, extensions del kernel, paquets i aplicacions. XCode permet personalitzacions il·limitades de les eines de muntatge i depuració, els paquets executables (incloent-hi la informació de les llistes de propietats i paquets de localització), processos de muntatge (incloent-hi el copiat de fitxers, fitxers escript, i altres fases de la construcció), i la interfície d'usuari (incloent-hi editors separats i multi-finestra). Si el teu codi està en un dipòsit, aquest facilita el control del codi font, permetent-te afegir arxius al dipòsit, enviar els canvis, obtindre versions modificades, i comparar-ne versions.

La Figura 1 mostra un exemple d'un projecte en XCode

Figura 1: L'exemple del projecte TextEdit amb XCode.

XCode està especialment realitzat pel desenvolupament Cocoa. Quan crees un projecte, Xcode instal·la el seu entorn de desenvolupament inicial utilitzant plantilles de projectes corresponents a tipus de projectes Cocoa: aplicació (Objective-C o Java), aplicació basada en documents (Objective-C o Java), eines, paquets, i frameworks. Per compilar programari Cocoa, XCode utilitza el compilador (gcc) de GNU C, i per depurar aquest programari, utilitza el depurador (gdb) de codi GNU. Tant gcc com gdb s'han utilitzat en el desenvolupament amb Cocoa des de que Cocoa estava a NeXSTEP i durant aquests anys s'ha millorat, estès, i adaptat per permetre la compilació i depuració de binaris Cocoa. XCode també té una característica de navegació per classes que et permet veure les classes de totes les frameworks importats del Cocoa més qualsevol classe personalitzada amb les seves relacions d'herència; des del navegador de classes pots demanar documentació de qualsevol classe.

XCode d'integra amb altres aplicacions de desenvolupament importants com Interface Builder. A l'Interface Builder pots definit una classe (súper-classe, endolls i accions) i generar un esquelet de fitxers de codi i de capçalera per cada classe del teu projecte. A XCode, tu pots afegir endolls i accions el les teves classes personalitzades, i fan que l'Interface Builder importi aquestes entitats dins els fitxers nib.

Interface Builder

La segona aplicació més important en els projectes Cocoa és l'Interface Builder (Constructor de la Interfície). Com diu el seu nom, l'Interface Builder és una eina gràfica per crear interfícies d'usuari. L'Interface Buider ha existit almenys des de la concepció de Cocoa com NeXSTEP. Des de llavors, ha rebut un gran reconeixement convertint-se en un de les millors aplicacions d'aquest tipus. No es sorprenent que la seva integració amb Cocoa sigui hermètica. A més, també pots utilitzar-lo per crear interfícies d'usuari per aplicacions Carbon.

L'Interface Builder es centra al voltant de tres elements principals del disseny:

  • Fitxers Nib. Un fitxer nib és actualment un fitxer llavor (un directori opac) que conté els objectes que apareixen en la interfície d'usuari en forma d'arxiu. Essencialment, aquest arxiu és un objecte gràfic que conté informació sobre cada objecte, incloent-hi les seves mides i el lloc on estan en la pantalla (si és una finestra) o dins d'una finestra. Els fitxers nib en les aplicacions Cocoa també inclouen referències per les classes personalitzades i informació sobre les connexions entre els objectes. Quan crees i guardes una interfícies d'usuari amb l'Interface Builder, tota la informació necessària per re-crear la interfícies està guardada en el fitxer nib. Un fitxer nib pot incloure fitxers d'imatge i de so utilitzats en la interfície.

    L'Interface Builder guarda un fitxer nib en un directori de localització dins del projecte Cocoa, quan aquest projecte es construeix, el fitxer nib es copiat al directori de localització corresponent en el paquet creat. (Aquests fitxers nib ofereix una forma fàcil per localitzar interfícies d'usuari). A les aplicacions Cocoa per defecte -- creat per l'XCode-- té un fitxer nib principal, el qual automàticament es carrega i es mostra quan aquesta aplicació es executada. El fitxer nib principal conté el menú principal de l'aplicació i potser una o més finestres. Les teves aplicacions poden carregar, sota demanda, altres fitxers nib (tal com finestres de preferències).

    L'Interface Builder presenta el contingut d'un fitxer nib en una finestra de fitxer nib. La finestra de fitxer nib també et permet definir classes personalitzades i examinar les connexions entre objectes.
  • Paletes. La finestra de paletes de l'Interface Builder conté múltiples panells, or "paletes", en cadascuna de les quals conté una col·lecció d'objectes relacionats amb la interfície d'usuari. Tu crees una interfície d'usuari desplaçant objectes des de les paletes cap a les superfícies apropiades, on aquestes superfícies estaran en una pantalla, una finestra, una vista de cert tipus, o el menú principal. (Els objectes paleta no tenen que ser visibles entre ells, però han d'afectar a la interfície d'alguna forma). Quan un objecte es desplaçat des d'una paleta, l'Interface Builder instància una instància per defecte d'aquest objecte; és un objecte reals de Cocoa. Si vols, pots posar el teus propis objectes personalitzats en les paletes de l'Interface Builder.
  • Inspector. L'Interface Builder té un inspector (situat en la finestra Info) d'objectes en la interfície d'usuari. La finestra d'Info consisteix d'una sèrie de panells seleccionables per activar els seus atributs inicials i la mida dels objectes (a través de la mida i alguns atributs poden fer-se per manipulació directa). Un dels panells et permet establir les connexions entre els objectes, i una altra substituir una classe personalitzada per una súper-classe de l'Application Kit. Altres panells, més especialitzats, et permetes associar etiquetes d'ajuda, esdeveniments d'AppleScript, i canals Sherlock amb els objectes de la interfície. d'usuari.

La Figura 2 mostra un fitxer nib obert en l'Interface Builder, amb finestres de suport.

Figura 2: Finestra de Preferències de TextEdit en l'Interface Builder.

La seqüència general per crear una interfície d'usuari a l'Interface Builder és directa:

  1. Arrossega un objecte de finestra o de panell dins la finestra (un panell és el mateix que una finestra secundària o un diàleg).
  2. Fixa la situació, la mida, i els atributs de la finestra inicial (o permanent)
  3. Arrossega objectes com camps de text, botons, vistes de taula, i llistes d'opció dins de la finestres, o en les vistes prèviament situades.
  4. Fixa la situació, la mida i els atributs inicials d'aquests objectes.
  5. Defineix les teves classes personalitzades de l'aplicació.
    Pots fer-ho en el propi Interface Builder o carregant dins l'Interface Builder els fitxers de capçalera prèviament creats. Quan defineixis una classe personalitzada, l'Interface Builder et permetrà especificar els seus connectors i les seves accions.
  6. Connecta els connectors a seus objectes referenciats i després connecta les accions als mètodes apropiats en els objectes de destí.
  7. Guarda i comprova la interfície.
    L'Interface Builder té una característica que et permet comprovar una interfície (excloent-hi les característiques personalitzades) en cada etapa del disseny.
  8. Crea el fitxer de capçalera i el fitxer de codi per a cada classe personalitzada definida; aquests fitxers apareixen en el projecte XCode associat.

L'Interface Builder inclou una característica que mostra momentàniament amb línies blaves la distància de la posició de cada objecte, quan aquest és mou o es re-dimensiona, seguint les pautes d'interfície humana d'Aqua. Aquestes distàncies inclouen mides recomanades, alineament, i posicions relatives a altres objectes dins la interfície d'usuari i amb els extrems de la finestra.

AppleScript Studio

Una característica que ha definit Mac OS X durant anys ha esta la capacitat pels usuaris de controlar les aplicacions amb escripts escrits en llenguatge AppleScript. Molts usuaris troben aquesta característica indispensable, perquè els permet encadenar una sèrie d'operacions relacionades amb múltiples aplicacions. Les capacitats d'AppleScript s'han portat a terme dins Mac OS X. L'AppleScript Studio és una tecnologia de desenvolupament per crear aplicacions Cocoa que utilitzen escripts AppleScript per controlar interfícies d'usuari complexes.

L'AppleScript Studio combina elements, des de AppleScript, XCode, Interface Builder, i Cocoa per proporcionar un entorn sofisticat per crear solucions AppleScripts. Això et permet construir aplicacions que poden fer el següent:

  • executar escripts AppleScript
  • controlar la interfície d'usuari de l'aplicació
  • controlar aplicacions escriptables o parts escriptables del sistema operatiu

Pel fet que AppleScript Studio integra AppleScript amb l'XCode, l'Interface Builder, i Cocoa, els creadors d'escripts poder aprofitar-se de les seves capacitats. Poden arrossegar un ric conjunt d'objectes d'interfícies d'usuari fora de les paletes de l'Interface Builder i personalitzar-los com més els agradi. Poden construir conjuntament amb el suport de les pautes Aqua sobre les interfícies humanes. I permetes construir i mantenir projectes complexes amb múltiples destins i passos en la construcció.

Altres Eines de Desenvolupament

A part de l'XCode i l'Interface Builder com a eines més importants, hi ha dotzenes d'altres eines a la teva disposició. Però aquest apartat ja el traduiré quan es vagi avançant en el curs i les necessitem.

Les Frameworks Cocoa

Les següents seccions resumeixen les classes i els paradigmes més importants de les frameworks Cocoa, particularment les framework base Foundation i Application Kit.

Introducció

Què fa d'un programa un programa Cocoa? No és el llenguatge, perquè pots utilitzar varies llenguatges en el desenvolupament de Cocoa, No són les eines de desenvolupament, perquè pots crear aplicacions Cocoa des de la línia de comandes (encara que seria més complexe, i es trigaria més). No, el que tenen totes els programes Cocoa en comú --que els fa diferents-- és que estan compostos d'objectes que hereten totes de la classe arrel, NSObject, i que al final estan basades en un sistema d'execució Objective-C. Aquesta definició també és correcta per totes les frameworks cocoa.

Mac OS X inclou varies frameworks Cocoa, i els venedors a tercers de solucions Apple estan llençant frameworks en tot moment. Encara que aquesta multiplicitat de frameworks de cocoa, dues d'elles estan a part dels altres. Foundation i Application Kit són les frameworks base de Cocoa. No pots desenvolupar un aplicació Cocoa sense enllaçar (i utilitzar classes de) l'Application Kit. I no pots desenvolupar programari Cocoa de cap tipus sense també enllaçar -- i utilitzar classes -- de la framework Foundation. (L'enllaçat d'aquestes frameworks es realitza automàticament quan utilitzes les frameworks Cocoa). Les frameworks Foundation i Application Kit són essencials en el desenvolupament Cocoa, i totes les altres són secundàries.

Les següents seccions examinen les característiques i classes d'aquestes dues frameworks Cocoa i descriurem breument algunes frameworks secundaris. Per fer aquestes frameworks més accessibles, les introduccions d'aquestes frameworks analitzen dotzenes de classes de cada jerarquia agrupades funcionalment. Encara que aquestes agrupacions tenen una forta base lògica, un pot agrupar perfectament classes d'altres maneres.

Foundation

La framework Foundation defineix una capa base de classes que poden utilitzar-se en qualsevol tipus de programa Cocoa. El criteri de separació de classes dins a Foundation de les de Application Kit és la interfícies d'usuari. Si un objectes no apareix a cada interfície d'usuari no és usat exclusivament per donar suport a la interfície d'usuari, llavors aquesta classe pertany a Foundation. Pots crear programes Cocoa que utilitzen Foundation i cap altra framework; exemples d'aquest són les eines de línia de comandes i serveis d'internet.

La framework Foundation s'ha dissenyat amb certes metes en ment:

  • Defineix el comportament bàsic dels objectes i introdueix convencions consistents per coses com la gestió de la memòria, la mutació d'objectes i les notificacions.
  • Donar suport a la internacionalització i la localització amb (entre altres) la tecnologia de paquets i les cadenes Unicode.
  • Donar suport a la persistència dels objectes.
  • Donar suport a la distribució d'objectes.
  • Proporcionar en certa mesura independència del sistema operatiu per facilitar-ne la portabilitat.
  • Proporcionar motllures o equivalents d'objecte per primitives programades, com valors numèrics, cadenes de caràcters i col·leccions. També inclouen classes generals per l'accés a serveis i entitats del sistema base, com són ports, fils i sistemes de fitxers.

Les aplicacions Cocoa, que per definició també enllacen amb l'Application Kit, d'igual forma també han d'enllaçar-se amb la framework Foundation. La jerarquia de classes comparteixen la mateixa classe arrel, NSObject, i molts si no la majoria dels mètodes i funcions de l'Application Kit i tenen objectes de Foundation ja sigui com a paràmetres o com a valors de retorn. Algunes classes de Foundation poden semblar dissenyades per aplicacions --NSUndoManager i NSUserDefaults, per dir dos noms-- però estan dins a Foundation perquè poden utilitzar-se per coses que no involucren la interfície d'usuari./p

Paradigmes i polítiques de Foundation

Foundation afegeix varis paradigmes i polítiques a la programació de Cocoa per assegurar un comportament consistent i unes expectatives constants entre els objectes d'un programa en certes situacions. Aquestes inclouen:

  • La propietat i disposició de l'objecte. En comptes d'un mecanisme automàtic de recollida d'escombraries, Foundation institueix una política de la propietat de l'objecte que especifica que els objectes són els responsables d'alliberar els altres objectes que han creat, copiat o conservat explícitament. L'NSObjecte (la classe i el protocol) defineix mètodes per retenir i alliberar objectes. Autorelease pools (definit en la classe NSAutoreleasePool) implementa un mecanisme de llançament endarrerit i permet que els programes Cocoa tinguin una convenció consistent per retornar objecte que qui els ha cridat no n'és responsable.
  • Variants de la classe Mutable. Moltes classes de valors dins Foundation tenen una variant mutable d'una classe immutable, amb la classe mutable, sempre com a sub-classe d'un immutable. Si necessites canviar dinàmicament els valors encapsulats d'un objecte, pots crear una instància d'una classe mutable. Com que aquesta hereta d'una classe immutable, pots passar instàncies mutables en mètodes que agafen tipus immutables. (Nota del traductor: en principi a Cocoa les classes amb valors no es poden modificar, però existeixen una classe heretada d'aquesta immutable que si ho permet).
  • Cluster de classes. Un cluster de classes és una classe abstracta i un sistema de sub-classes privades per la qual la classe abstracta actua sota el paraigües de la interfície. Depenent del context (particularment el mètodes que utilitzes per crear un objecte), una instància d'una classe apropiadament optimitzada se't retorn. NSString i NSMutableString, per exemple, actuen com a intermediaris de les instàncies de varies sub-classes privades optimitzades per diferents tipus de necessitats d'emmagatzematge. A mida que han passat els anys els sistema classes concretes ha canviat varis cops sense trencar les aplicacions.
  • Notificacions. La notificació és un patró de disseny important dins Cocoa. Està basat en un mecanisme de difusió que permet als objectes (anomenats observadors) mantenir informats de que un altre objecte està fent o està trobant esdeveniments d'usuari o del sistema. Els objectes que originen les notificacions poden no ser conscients de l'existència o de la identitat dels observadors de la notificació. Hi ha varis tipus de notificacions: síncrons, asíncrones i distribuïdes. El mecanisme de notificació de Foundation està implementat per les classes NSNotification, NSNotificationCenter, NSNotificationQueue, i NSDistributedNotificationCenter.

Les Classe Foundation

La jerarquia de classes de Foundation està arrelada en la classe NSObject, que (juntament amb els protocols NSObject i NSCopying) defineix els atributs i comportament bàsics dels objectes.

La resta de la framework Foundation consisteix en varis grups relacionats de classes així com algunes classes individuals. Ho ha classe que representen tipus de dades bàsics com strings i matrius de caràcter, classe de col·leccions per l'emmagatzematge d'objectes, classes que representen informació del sistema com dates, i classes que representen entitats del sistema com ports, fils, i processos. La gràfica de la jerarquia de classes, de les següents tres figures representa els grups lògics d'aquestes així com les seves relacions d'herència.

Figura 1: La jerarquia de classes Foundation --Objective-C (part 1)

Figura 2: La jerarquia de classes Foundation --Objective-C (part 2)

Figura 2: La jerarquia de classes Foundation --Objective-C (part 3)

Els diagrames agrupen amb lògica de la framework Foundation en les categories següents (amb altres associacions no precisades):

  • Objecte de valor. Els objectes de valor encapsulen dades de varis tipus, donant accés a les dades i oferint varies manipulacions d'elles. Com que són objectes, ells (i els valors que contenen) poden arxivar-se i distribuir-se. NSData proporciona matrius de simple valors escalars. Les classes NSDate, NSCalendarDate, NSTimeZone, NSCalendar, NSDateComponents i NSLocale proporcionen objectes que representen hores, dates, calendaris i locales. Ofereixen mètodes per calcular diferències de data i hora, per mostrar dates i hores en molts formats, i per ajustar dates i hores basades en la localització en el mon.
  • Strings. NSString és un altre tipus d'objecte de valor que proporciona emmagatzemament orientat a objectes per matrius de bytes acabats amb null en una codificació particular. Inclou suport per convertir codificacions de cadenes entre UTF-16, UTF-8, MacRoma i altres tipus de codificacions. NSString també ofereix mètodes per cercar, combinar i comparar strings i per manipular rutes del sistema de fitxers. Pots utilitzar l'objecte NSScanner per analitzar números i paraules des d'un objecte NSString. NSCharacterSet (mostrada com una classe de col·lecció en el diagrama) representa un conjunt de caràcters que poden utilitzar-se en varis mètodes NSString i NSScaner.
  • Col·leccions. Les col·leccions són objectes que guarden altres objectes (normalment valors) en un esquema particular d'ordenació. NSArray utilitza l'indexat basat en el zero, NSDictionary utilitzar parells de claus, i NSSet proporcions emmagatzematge desordenat de'objectes. Amb un objecte NSEnumerator, pots accedir a tots els objectes, pots ser guardats o distribuïts.
  • Serveis del sistema operatiu. Moltes classes de Foundation faciliten accés a varis serveis de baix nivell del sistema operatiu, i a la vegada, t'aïllen de les idiosincràsies del sistema operatiu. Per exemple, NSProcessInfo et permet consultar l'entorn en que una aplicació s'executa i NSHost retorna els noms i adreces dels hostes d'una xarxa. Pots utilitzar l'objecte NSTimer per enviar un missatge a una altre objecte a intervals específics de temps, i NSRunLoop el permet gestionar les fons d'entrada d'una aplicació o un altre tipus de programa. NSUserDefaults proporciona una interfície programada a una base de dades del sistema amb els valors globals pre-establerts (pel propietari) i les preferències (per l'usuari).
    • Sistema de fitxers i URL. NSFileManager proporciona una interfície consistent per operacions amb fitxers com són crear, re-nombrar, esborrar i moure fitxers. NSFileHandle permet operacions de fitxer a nivell baix (per exemple, desplaçar-se dins un fitxer). NSBundle troba recursos guardats en paquets i pot carregar dinàmicament alguns d'ells (per exemple, fitxers nib i de codi). Pots utilitzar NSURL i NSURLHandle per representar, accedir i gestionar orígens de dades d'URL.
    • Comunicació entre processos. La majoria de classes en aquesta categoria representen varis tipus de ports de sistema, sockets, i serveis de nomes i estan normalment implementats en IPC de baix nivell. NSPipe representa una pipe BSD, un canal de comunicacions unidireccional entre processos.
    • Sub-processos i sub-tasques. NSThread et permet crear programes multi-fil, mentre varis classes de bloqueig ofereixen mecanismes per controlar l'accés a recursos de procés per fils competidors. Amb NSTask, el teu programa pot dividir-se en un procés fill per executar un programa i monitoritzar-ne el seu progrés.
  • Notificacions. Mireu el resum de classes de notificació de més amunt.
  • Arxivat i serialització. Les classes en aquesta categoria fan possible la distribució i persistència dels objectes. NSCoder i les seves sub-classes (en particular NSArchiver), juntament amb el protocol NSCoding, representen les dades que conté un objecte i una forma independent de l'arquitectura per aconseguir que la informació de la classe sigui guardada juntament amb les dades.
  • Expressions i predicats. Les classes predicats --NSPredicate, NSCompoundPredicate i NSComparisonPredicate-- encapsulen les condicions lògiques per restringir una cerca d'objectes o filtre. Els objectes NSExpression representen expressions en un predicat.
  • Consultes Spotlight. NSMetadataItem, NSMetadataQuery i classes de consultes relacionades encapsulen metadades del sistema de fitxers i fan possible consultar aquestes metadades.
  • Serveix del llenguatge Objective-C. NSException i NSAssertionHandler proporcionen un forma orientada a objectes per enviar i capturar excepcions en el codi. Un objecte NSInvocation és una representació estàtica d'un missatge en Objective-C que el teu programa pot guardar i més endavant utilitzar per invocar un missatge en un altre objecte; és utilitzar per la gestió de Desfer (NSUndoManager) i pel sistema d'Objectes Distribuïts. Un objecte NSMethodSignature recorda el tipus d'informació d'un mètode i és utilitzat en el missatge re-enviat. NSClassDescription és una classe abstracta per definir i consultar les relacions i propietats d'una classe.
  • Scripting. Les classes en aquestes categories ajuden a fer el teu programa receptiu a escripts AppleScript i comandes d'esdeveniments Apple.
  • Objectes Distribuïts. Pots utilitzar les classes d'Objectes Distribuïts per la comunicació entre processos en el mateix ordinador o en diferents ordinadors dins una xarxa. Dues d'aquestes classes, NSDistantObject i NSProtocolChecker, tenen una classe arrel (NSProsy) diferent de la classe arrel de la resta de Cocoa.
  • Fent Xarxa. Les classes NSNetService i NSNetServiceBrowser suporten l'arquitectura de fer xarxa sense configuració anomenada Bonjour. Bonjour és un sistema potent per publicar i navegar pels servers en una xarxa IP.

Application Kit

Applicaton Kit és una framework que conté tots els objectes que necessites per implementar la teva interfície d'usuari gràfica conduïda per esdeveniments: Finestres, diàlegs, botons, menús, desplaçadors, camps de text -- llistes d'aquests. Application Kit s'ocupa de tots els detalls per tu, així dibuixa eficientment en la pantalla, es comunica amb el dispositius de maquinari i els buffers de la pantalla, neteja àrees de la pantalla abans de dibuixar-hi i retalla vistes. El nombre de classes dins Application Kit poden fer por en un primer moment. Així, la majoria de classes d'Application Kit són classes de suport que utilitzes indirectament. També has d'escollir en quin nivell utilitzes l'Application Kit:

  • Utilitza l'Interface Builder per crear connexions des dels objectes d'interfície d'usuari als objectes controladors de la teva aplicació, que generalment són objectes personalitzats que gestionen la interfície d'usuari. En aquest case, tot el que necessitis per implementar les teves classes controladores -- i en particular implementar els mètodes d'acció i delegació d'aquestes classes. Per exemple, podries necessitar implementar un mètode que s'invoca quan l'usuari escull un ítem de menú (com a mínim té una implementació per defecte que és acceptable).
  • Controlar la interfície d'usuari amb programació, que requereix més familiaritat amb les classes i protocols de l'Application Kit. Per exemple, permetre a l'usuari desplaçar una icona des d'una finestra a una altra requereix una mica de programació i familiaritat amb el protocols NSDragginNSDragging.
  • Implementar el teus propis objectes heretant de NSView o altres classes. Quan s'hereta de NSView, tu escrius el teus propis mètodes de dibuixat utilitzant funcions gràfiques. heretar requereix un coneixement profund de com treballa l'Application kit.

Descripció de l'Application Kit

L'Application Kit consisteix en més de 124 classes i protocols. Totes les classes al capdavall hereten de la classe NSObject de la framework Foundation. Els dos diagrames següents mostren les relacions d'herència de les classes d'Application Kit.

Figura 4: La jerarquia de classes Application Kit --Objective-C (part 1)

Figura 5: La jerarquia de classes Application Kit --Objective-C (part 2)

Com pots veure, l'arbre de la jerarquia de l'Application Kit és extens però poc profund; les classes més profundes provenen de cinc súper-classes de la classe arrel i la majoria de classes són més tancada que aquesta. Algunes de les principals branques en aquest arbre de jerarquia són particularment interessants.

A l'arrel de la branca més llarga de l'Application kit és la classe NSResponder. Aquesta classe defineix una cadena de "contestadors", una llista ordenada d'objectes que responen a esdeveniments d'usuari. Quan un usuari fa clic amb el botó del ratolí o prem una tecla, un esdeveniment es genera i es passa a la cadena de "responedors" buscant un objecte que pugui respondre-hi. Qualsevol objecte que captura esdeveniment ha d'heretar a partir de la classe NSResponder. Les classes base Application Kit --NSApplication, NSWindow i NSView-- hereten de NSResponder.

La segona branca més llarga de classes en l'Application Kit descendeix de NSCell. El més significatiu sobre aquest grup de classes és que són un copia borrosa de les classes que hereten de NSControl, que hereta de NSView. Per a aquests objectes d'interfície d'usuari que responen a accions d'usuari, l'Application Kit utilitza una arquitectura que divideix la feina entre els objectes de control i els objectes cel·la. Les classes NSControl i NSCell, i les seves sub-classes, defineixen un conjunt comú d'objectes d'interfície d'usuari com botons, barres, i navegadors que l'usuari pot manipular gràficament per controlar algun aspecte de la seva aplicació. Un objecte de control està associat amb un o més objectes cell que implementen els detalls de dibuixat i la captura d'esdeveniments. Per exemple, un botó conté ambdós, un objecte NSButton i un objecte NSButtonCell.

La principal raó per aquesta separació de la funcionalitat és per permetre a les classes NSCell siguin refusades per classes NSControl. Per exemple, NSMatrix i NSTableView poden contenir múltiples objectes NSCell de diferents tipus. Una altra raó és una millor funcionalitat, perquè els objectes cell són molt més lleugers comparats amb els objectes control; un control amb quatre cel·les costen menys d'arrossegar que quatre controls fent exactament el mateix.

Els controls i cel·les implementen un dels patrons de disseny més importants de l'Application Kit: el paradigma acció-destí. Una Cel·la pot mantenir informació que identifica el missatge que ha d'enviar-se a un objecte particular quan l'usuari fa clic (o un altre actuació) a la cel·la. Quan un usuari manipula un control (per exemple, al fer clic a sobre seu amb el punter del ratolí), el control extreu la informació demanada des de la seva cel·la i envia un missatge d'acció a l'objecte destí. L'acció-destí et permet donar significat a accions d'usuari especificant quin hauria de ser mètode invocat i l'objecte destí. Normalment utilitza l'Interface Builder per activar aquests destins i accions arrossegant des de l'objecte control a la teva aplicació o a un altre objecte. També pots activar destins i accions amb programació.

Un altre patró de disseny important de l'Application Kit és la delegació. Molts objectes en una interfície d'usuari, com els camps de text i les vistes de taules, defineixen un delegat. Un delegat és un objecte que actua en compte d'ell o en coordinació amb, l'objecte delegat. Així poden separar-se la lògia de l'aplicació de la operació de la interfície d'usuari.

Les següents seccions descriuen breument algunes de les capacitats i aspectes de l'arquitectura de l'Application Kit i les seves classes i protocols. Agrupa les classes d'acord amb els diagrames de la jerarquia de classes mostrats anteriorment.

Classes Generals de la Interfície d'Usuari

Per la total de la funcionalitat de la interfície d'usuari, l'Application Kit proporciona les classes següents:

  • L'objecte global de l'aplicació. Cada aplicació utilitza una única instància de NSApplication per controlar el bucle principal d'esdeveniments, que vigila les finestres i menús de l'aplicació, distribueix esdeveniments als objectes apropiats (que són, ells mateixos o una de les seves finestres), activa el servei d'auto-alliberament (autorelease pool), i rep notificacions dels esdeveniments de nivell d'aplicació. Un objecte NSApplication té un delegat (un objecte que assignes) que es notificat quan l'aplicació arranca o finalitza, s'oculta o activa, obre un fitxer seleccionat per l'usuari, etc. Per activar l'objecte delegat d'NSApplication i implementar els mètodes delegats, personalitza les característiques de la teva aplicació sense tenir una sub-classe de NSApplication.
  • Finestres i vistes. Les classes de finestres i vistes, NSWindow i NSView, també hereten de NSResponder, i per tant estan dissenyats per respondre a les accions de l'usuari. Un objecte NSApplication manté una llista les objectes NSWindow --un per cada finestra dins de l'aplicació-- i cada objecte NSWindow manté un jerarquia d'objectes NSView. La jerarquia de vistes s'utilitza per dibuixar i capturar esdeveniments dins una finestra. Un objecte NSWindow captura esdeveniments de nivell de finestra, distribueix altres esdeveniments de les seves vistes i proporciona una àrea per les seves vistes. Un objecte NSWindow també et permet tenir un delegat en que pots personalitzar les seves característiques.

    NSView és una classe abstracta per tots els objectes mostrats en una finestra. Totes les sub-classes implementen un mètode de dibuixat utilitzant funcions gràfiques; drawrect: és el mètode principal per sobre-escriure quan es crea una nova classe NSView.
  • Classes Controladora per l'enllaçat de Cocoa. La classe abstracta NSController i les seves sub-classes concretes NSObjectController, NSArrayController i NSTreeController són part de la implementació d'enllaçat de Cocoa. Aquesta tecnologia automàticament sincronitza les dades de l'aplicació guardades en objectes i la presentació d'aquestes dades en la interfície d'usuari.
  • Panells (diàlegs) La classe NSPanel és una subclasse de NSWindow que utilitzes per mostrar informació temporal, global o fixa. Per exemple, pots utilitzar una instància de NSPanel, en comptes d'una instància NSWindow, per mostrar missatges d'error o per consultar a l'usuari per una resposta a una circumstància remarcable o inusual. L'Application Kit implementa alguns diàlegs comuns per tu, com els diàlegs de Guardar, Obrir i Imprimir, per guardar, obrir i imprimir documents. Utilitzant aquests diàlegs dona a l'usuari una vista consistent i un sensació comuna entre aplicacions.
  • Menús i cursors. Les classes NSMenu, NSMenuItem i NSCursor defineixen un estil i uns tipus de menús i cursors que les teves aplicacions mostren a l'usuari.
  • Vistes d'agrupament i desplaçament. Les classes NSBox, NSScrollView i NSSplitView proporcionen accessoris gràfics a altres objectes o col·leccions vista de vistes en finestres. Amb la classes NSBox, pots agrupar elements en finestres i dibuixar una bora al voltant del grup. La classe NSSplitView et permet ajuntar vistes verticalment o horitzontalment, repartint a cada vista una part de l'espai comú; una barra de control que llista deixa a l'usuari redistribuir l'espai entre les vistes. La classe NSScrollView i la seva classe d'ajuda, NSClipView, proporciona un mecanisme de desplaçament en sentit vertical de manera que els objectes gràfics que deixen a l'usuari inicialitzar i controlar el desplaçament. La classe NSRulerView et permet afegir una regla i marcadors per desplaçar la vista
  • Vistes de taules i bores. La classe NSTableView mostra dades en files i columnes. NSTableView és ideal per, sense voler limitar-ho, mostrar registres de bases de dades, on les files corresponen a cada registres i les columnes contenen els atributs guardats. L'usuari poden editar cel·les individuals i re-dimensionar les columnes. Controles les característiques i el contingut d'un objecte NSTableView activant la seva delegació i els objectes origen de dades. Al voltant de les vistes (les instàncies de NSOutlineView, una sub-classe de NSTableView) ofereix una altra aproximació per mostrar dades tabulars. Amb la classe NSBrowser pots crear un objecte amb que els usuaris poden mostar i navegar per les dades en jerarquia.

Text i Fonts

La classe NSTextFiels implementa un simple camp d'entrada de text editable, i la classe NSTextView proporciona més característiques d'edició per textos més extensos.

NSTextView, una sub-classe de la classe abstracta NSText, defineix la interfície al sistema de text estès. NSTextView suporta text enriquit, adjunta (gràfics, fitxers i altres), gestió d'entrades i enllaçat amb claus i atributs de marcatge de text. NSTextView treballa amb la finestra Fonts i el menú Fonts, els estils de paràgraf i les regles, l'ajuda a Serveix i el porta-papers (clipboard). NSTextView també permet personalitzar a través de la delegació i les notificacions --difícilment necessitaràs una sub-classe de NSTextView. Tampoc crearàs instàncies programades de NSTextView, ni objectes de les paletes de l'Interface Builder, tal com NSTextField, NSForm i NSScrollView, que també contenen objectes NSTextView.

També és possible una manipulació de text més creativa i més potent (com mostrant text en un cercle) utilitzant NSTextStorage, NSLayoutManager, NSTextContainer i classes semblants. Els sistema de text Cocoa també suporta llistes, taules i seleccions no contínues.

Les classes NSFont i NSFontManager encapsulen gestionen famílies, mides i variacions de fonts. La classes NSFont defineix un objecte únic per cada font diferent; per eficiència, aquests objectes, que poden representar molta informació, estan compartits per tots els objectes en la teva aplicació. La classe NSFontPanel defineix la finestra de Fonts que es presenta a l'usuari.

Gràfics i Colors

Les classes NSImage i NSImageRep encapsulen informació gràfica, permetent-te fàcilment i eficientment accés a imatges emmagatzemades en fitxers del disc i mostrades a la pantalla. Cada sub-classe NSImageRep coneix com dibuixar una imatge d'un tipus particular a partir d'unes dades. La classe NSImage proporciona múltiples representacions de la mateixa imatge, i també proporciona característiques com la memòria cau. Les capacitats d'imatge i dibuix de Cocoa estan integrades amb la framework Image Core.

El color està suportat per les classes NSColor, NSColorSpace, NSColorPanel, NSColorList, NSColorPicker i NSColorWell. NSColor i NSColorSpace suporten un ric conjunt de formats i representacions de colors, incloent-hi els personalitzats. Les altres classes són majoritàriament classes interfície. Defineixen i presenten panells i vistes que permeten a l'usuari seleccionar i aplicar colors. Per exemple, l'usuari pot arrossegar colors des de la finestra Color a qualsevol zona de color. El protocol NSColorPicking et deixa estendre la finestra estàndard Color.

Les classes NSGraphicsContext, NSBeziertPath i NSAffineTransform t'ajuden en el dibuixat de vectors i suport gràfic en transformacions com l'escalat, la rotació i el desplaçament.

Impressió i Faxos

Les classes NSPrinter, NSPrintPanel, NSPageLayout i NSPrintInfo treballen juntes per proporcionar solucions per imprimir i enviar faxos amb la informació que mostra la teva aplicació en les seves finestres i vistes. També pots crear una representació PDF d'uns NSView.

Suport del Sistema de Fitxers i Documents

Utilitza la classe NSFileWrapper per crear objectes que corresponguin als fitxers i directoris del disc. L'NSFileWrapper manté els continguts del fitxer a la memòria, per poder-se mostrar, canviar o transmetre a altres aplicacions. També proporcions una icona per arrossegar el fitxer i o representar-lo en una adjunció. O utilitza la classe NSFileManager en la framework Foundation per accedir i enumerar els continguts de fitxers i directoris. Les classes NSOpenPanel i NSSavePanel també proporcionen una interfície adient i familiar pel sistema de fitxers.

Internacionalització i Suport d'Entrada de Caràcters

Si una aplicació s'utilitza en més una part de mon, els seus recursos pot ser que calguin personalitzar-se, o localitzar, per diferents idiomes, països o regions culturals. Per exemple, una aplicació pot necessitar tenir diferents versions de cadenes de caràcters, icones, fitxers nib i ajuda contextual pel Japonès, Anglès, Francès i Alemany. Els fitxers de recursos específics per a un idioma en particular estan agrupats junts en un sub-directori del directori paquet (el directori amb l'extensió .lproj). Normalment pots activar la localització de fitxers de recursos utilitzant l'Interface Builder.

Les classes NSInputServer i NSInputManager, conjuntament amb el protocol NSTextInput, donen accés a les teves aplicacions al sistema de gestió d'entrada de text. Aquest sistema interpreta pressions de tecles generats per diferents teclats internacionals i reparteix els caràcters de text apropiats o els esdeveniments de control de tecla als objectes de vista de text. (Normalment les classe text pacten amb aquestes classes si tu no ho fas).

Serveis del Sistema Operatiu

Les següents classes de l'Application Kit proporcionen suport a la teva aplicació:

  • Compartir dades amb altres aplicacions. La classes NSPasteboard defineix un porta-papers, un dipòsit per informació que es copiada per la teva aplicació, deixant disponible aquestes dades per qualsevol aplicació que desitgi utilitzar-la. L'NSPasteboard implementa la tant familiar operació de copiar-tallar-enganxar. El protocol NSServicesRequest utilitza el porta-papers per comunicar informació que es passa entre aplicacions per un servei registrat. (El porta-papers està implementar com un Clipboard en la interfície d'usuari).
  • Arrossegar.Molts petits programes i objectes de vista poden ser arrossegats i deixats anar arreu. Els objectes formen part d'aquest mecanisme d'arrossegament d'acord amb els protocols NSDragging...; els objectes arrossegables s'ajusten al protocol NSDraggingSource, i els objectes de destí (receptors al deixar-los anar) s'ajusten al protocol NSDraggingDestination. L'Application Kit amaga tots els detalls de moviment del cursor i el mostrat de la imatge arrossegada.
  • Comprovar l'Ortografia. La classe NSSpellServer et permet definir un servei de comprovació d'ortografia i proporcionar un servei a altres aplicacions. Per connectar la teva aplicació a un servei de comprovació ortogràfica, utilitza la classe NSSpellChecker. Els protocols NSIgnoreMisspelledWords i NSChangeSpelling suporten el mecanisme de comprovació d'ortografia.

Suport de L'Interface Builder

La classe abstracta NSNibConnector i les seves dues sub-classes concretes, NSNibControlConnector i NSNibOutletConnector, representen connexions a l'Interface Builder. L'NSNibControlConnector gestiona una acció de connexió a l'Interface Builder i el NSNibOutletConnector gestiona un connexió outlet.

Altres Frameworks amb la API Cocoa

Com a part d'una instal·lació estàndard Mac OS X, Apple inclou (a més de la Foundation i l'Application kit) varies frameworks que subministren interfícies programades amb Cocoa. (Poden subministrar-les Carbon o d'altres tipus d'interfícies de programació). Pots utilitzar aquestes frameworks secundàries per donar a la teva aplicació capacitats que siguin desitjables, o fins i tot essencials. Algunes frameworks secundaries notables incloses:

  • Core Data -- La framework Core Data ajuda a un programa a gestionar gràfiques de models d'objectes a través dels seus cicles de vida, incloent-hi l'emmagatzematge persistent de les seves dades en bases de dades relacionals o fitxers plans. Aquest inclou característiques com la gestió de desfer i re-fer, la validació automàtica de valors, la propagació de canvis i la integració amb Cocoa.
  • Sync Services-- Utilitzant aquests serveis pots sincronitzar contactes existents, calendaris i esquemes de punts de llibre (bookmarks) com si fos les teves dades de l'aplicació. També pots estendre esquemes existents.
  • Address Book -- Aquesta framework implementa una base de dades centralitzada de contactes i altra informació personal. Els aplicacions que utilitzen la framework Address Book poden compartir aquesta informació de contacte amb altres aplicacions, incloent-hi el Mail d'Apple i l'iChat.
  • Preference Panes -- Amb aquesta framework pots crear plug-ins que la teva aplicació pot carregar dinàmicament per obtindre una interfície d'usuari per guardar preferències d'usuari, de l'aplicació o del sistema.
  • Screen Saver -- La framework Screen Saver t'ajuda a crear mòduls d'Efectes de Pantalla, els quals poden carregar-se i executar-se via el Sistema de Preferències.
  • Web Kit -- La framework Web Kit proporciona un conjunt de classes base per mostrar contingut web en finestres, i per defecte, implementa característiques que com seguir els enllaços premuts per l'usuari.