Pubblichiamo un guest post di Giuliano Galea
Ci sono diversi luoghi comuni da sfatare riguardo lo sviluppo di applicazioni per iPhone OS, in particolare sul sistema operativo e sul linguaggio utilizzato. Questo post cercherà di fare un po’ di chiarezza su un punto iniziale: è corretto sostenere che iPhone OS sia una versione castrata di OS X?
Sistema Operativo
iPhone OS è un sistema operativo Unix based pensato per girare su dispositivi mobili dotati di schermo multitouch (al momento iPhone, iPod Touch e iPad). Da un punto di vista tecnico si basa su un kernel che è parente stretto del kernel Mach presente in OS X. Su di esso poggiano una serie di servizi ed api organizzati per livelli di astrazione.
Al livello più basso troviamo lo stack di derivazione BSD, quindi funzioni per IO, threading, gestione processi, sqlite etc. Dal livello Core Services in poi troviamo tecnologie sviluppate da Apple, in particolare Core Foundation che , come indica il nome, è la base su cui sono sviluppate molte delle api di livello più alto.
Media contiene principalmente api c (Core Audio, Quartz, OpenGL ES etc etc) con la notevole eccezione di Core Animation, un motore avanzato per la gestione di animazioni sviluppato in objective-c. Al livello più alto troviamo infine Cocoa Touch, api completamente objective-c composta a sua volta da Foundation e UIKit.
Foundation contiene la definizione di NSObject, la root class da cui ereditano tutte le classi presenti in Cocoa (a parte una a dire il vero :)), le classi legate alla gestione/manipolazione/storage dei dati, wrapper OO per alcuni dei livelli più bassi ed in genere tutto quello che non riguarda l’interazione con l’utente o la visualizzazione.
Questi due aspetti sono di competenza di UIKit, la prima fra le api descritte ad essere specifica di iPhone OS: qui troviamo infatti le classi legate alla gestione del multitouch ed alla renderizzazione su schermo, oltre ad una serie di widget grafici legati all’UI. Possiamo quindi sfatare un luogo comune: iPhone OS NON è il parente povero di OS X, piuttosto una versione ottimizzata che condivide:
- i linguaggi di programmazione “ufficiali” (c/c++ e objective-c, però mancano python e ruby, entrambi in parte supportati in OS X) ⁃ molte api (i primi 3 layer della figura hanno dei corrispettivi analoghi in OS X, ed in Foundation ci saranno una decina di classi che mancano
- nella versione iPhone, molto del codice che usa Foundation compila indifferentemente sui due OS) il tool di sviluppo ufficiale (Xcode) ⁃ paradigmi e metodologie di sviluppo