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
Ecco, una grossa mancanza è quella di Python, altrimenti qualcosa avrei provato a svilupparla…
Mi scuso con Alessio ed i lettori, ma a causa di un disguido il post non è completo: vedrò a breve di mandare il resto ;)
@cesare: si in effetti, per quanto in questi 2 anni lo abbia apprezzato molto, objective-c mi sta un pò stretto … sarebbe una manna se (nel mio caso :)) si potesse sviluppare su iphone con MacRuby , o cmq con un linguaggio più espressivo
Mi pare comunque una dignitosissima prima puntata :-)
L’argomento affrontato è stato introdotto e spiegato nelle sue parti essenziali, rimanendo ovviamente aperto ad ulteriori estensioni.
Toh, non m’ero accorto che eri proprio tu, “Giullo”, ad aver realizzato l’articolo. :D
Sì, condivido: la produttività è importante, e linguaggi come Python o Ruby possono fare la differenza. Ovviamente io, come al solito, sono di parte, e parlo da pyvangelista. :)
Su Objective-C… sai come la penso. Per me è un linguaggio che non doveva nemmeno nascere. :D :D :D
Obj-C è C integrato con Cocoa però.
@Cesare: perche’ dici che obj-c non doveva nemmeno nascere?
E’ soltanto una questione di gusti. Objective-C già solo a guardarlo mi provoca il mal di stomaco. :(
@Zererico: mi sembra anche normale che lo sia. E’ il linguaggio principe usato nelle piattaforme Apple.
Non so quanto possa essere integrato Python con Cocoa, ma non credo che ci siano difficoltà per integrarlo con tutte le API.
@cesare: in realtà objective-c è una sorta di frankestein, c’è chi lo considera uno small talk fatto male e chi il “vero” c ad oggetti … probabilmente la verità sta nel mezzo, ma cmq tra qualche giorno cercherò di approfondire la questione :) da un punto di vista tecnico cocoa potrebbe girare con ruby o python, i meccanismi fondanti su cui poggia (delegazione, dispatch dinamico a runtime, fowarding dei messaggi ad esempio) possono essere gestiti da un qualunque linguaggio dinamico, quello che sarebbe più complicato gestire è la parte c che sta sotto a cocoa e di cui è parzialmente un’astrazione … ma anche qui la cosa potrebbe essere risolta (ad esempio) wrappando il codice c in una classe nativa
Per quello non c’è problema, perché Python non ha difficoltà a interfacciarsi con codice C (o che espone un’interfaccia di questo tipo): http://docs.python.org/library/ctypes.html ;)
Più che di linguaggi mancati si dovrebbe parlare di quelli ammessi, ovevro obj-c!
P.s: Non capisco da cosa derivi quel “in parte” supportati da OS X per quanto riguarda Ruby e Python