di  -  giovedì 22 aprile 2010

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

10 Commenti »

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.

  • # 1
    Cesare Di Mauro
     scrive: 

    Ecco, una grossa mancanza è quella di Python, altrimenti qualcosa avrei provato a svilupparla…

  • # 2
    Giullo
     scrive: 

    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

  • # 3
    Alessio Di Domizio (Autore del post)
     scrive: 

    Mi pare comunque una dignitosissima prima puntata :-)
    L’argomento affrontato è stato introdotto e spiegato nelle sue parti essenziali, rimanendo ovviamente aperto ad ulteriori estensioni.

  • # 4
    Cesare Di Mauro
     scrive: 

    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

  • # 5
    Zererico
     scrive: 

    Obj-C è C integrato con Cocoa però.

  • # 6
    Marcello
     scrive: 

    @Cesare: perche’ dici che obj-c non doveva nemmeno nascere?

  • # 7
    Cesare Di Mauro
     scrive: 

    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.

  • # 8
    Giullo
     scrive: 

    @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

  • # 9
    Cesare Di Mauro
     scrive: 

    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 ;)

  • # 10
    khelidan
     scrive: 

    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

Scrivi un commento!

Aggiungi il commento, oppure trackback dal tuo sito.

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.