Librerie open-source per sviluppatori iPhone

Il nostro utente Marco Bellinaso ha pubblicato un interessantissimo articolo sul suo blog dedicato agli sviluppatori e dal titolo “Librerie e Framework open-source per sviluppatori iPhone”. Ecco il testo completo.

apple-iphone-sdk

L’SDK dell’iPhone è veramente vasto e molto completo, e spesso rende molto semplici operazioni come dialogare con il GPS o la fotocamera on-board, scaricare dati da web, manipolare i contatti o gli appuntamenti presenti nel telefono, gestire animazioni ed effetti di transizione tra schermate ecc. ecc. Cose che su altre piattaforme possono a volte essere piuttosto complesse e problematiche (per i limiti intrinseci dell’hardwar, per i limiti dell’SDK, o per la non-uniformità dei vari modelli su cui gira un certo sistema operativo)

Nonostante queste belle parole, anche l’SDK dell’iPhone ha i suoi punti deboli. Se è vero che gestire alcune cose complesse è molto semplice, è quasi paradossale che gestire come in teoria “semplici” come riempire schermate di elenco con immagini o con testo su più righe, costruire menu di navigazione a più livelli, gestire una cache locale su disco per i dati scaricati da web, lavorare con JSON, XML, regular expression…siano cose non dico complesse, ma quantomeno macchinose e dispendiose da programmare. Perlomeno se si usano solo gli strumenti di default offerti da Apple.

Ecco allora un elenco di librerie di codice (tutte open-source e sotto licenza BSD o simili) che sto usando al momento e che permettono di ridurre molto i tempi di sviluppo per alcune funzionalità, rendendo il proprio codice anche più conciso, leggibile e manutenibile:

1) Three20: sviluppata da Joe Hewitt, autore dell’ottima applicazione Facebook Connect per iPhone, questo framework nasce appunto dal codice che Joe ha scritto per Facebook. La libreria è veramente ricca di classi; in pratica molti dei componenti di UI di base sono stati riscritti o estesi con nuove funzionalità. Ad esempio invece che usare UIButton, UILabel o UITableViewController si potranno usare le classi TTButton, TTLabel o TTTableViewController; queste versioni offrono nuove proprietà per renderizzare i componenti con stili grafici aggiuntivi, o magari per implementare una data source (nel caso di view che renderizzano elenchi, ad esempio) in poche righe e in modo centralizzato invece che dover ogni volta implementare delegate e protocolli che richiedono di scrivere un tot di metodi ogni volta. Altri componenti molto interessanti sono TTPhotoViewController e TTThumbsViewController che gestiscono schermate per visualizzare librerie di foto a tuto schermo o in versione miniatura, oppure TTURLCache per gestire una cache locale di immagini e altri contenuti scaricati via web. E altro ancora…date un’occhiata alla pagina linkata per saperne di più. Oltre a fornire una grande quantità di codice pronto all’uso questa libreria è anche un ottimo esempio di “codice ben scritto”, da usare come modello per imparare i pattern e le best-practice più comuni della programmazione con Cocoa e Objective-C.

2) OpenFlow: vi piace l’interfaccia tridimensionale CoverFlow che Apple ha usato dentro la sua app iPod quando l’iPhone è in orizzontale? Vi piacerebbe utilizzarla all’interno dei vostri programmi? In questo post Erica Sadun spiegava appunto come usare la classeUICoverFlowLayer per tale scopo; peccato la si possa usare solo in applicazioni che non saranno pubblicate sull’App Store ufficiale, perchè si tratta di una API privata e quindi Apple non gradisce che la si usi! OpenFlow invece è una totale reimplementazione custom, realizzata mediante CoreGraphics e QuarzCore per gli effetti di prospettiva e riflesso. L’effetto finale è pressochè perfetto! E’ possibile caricare le immagini tutte in un colpo solo o in maniera asincrona via via che queste devono essere visualizzate (strada da seguire nel caso le immagini siano da scaricarsi da online magari) ed è possibile cambiare le dimensioni degli elementi visualizzati. Anche qui ci sono cose interessanti da imparare studiandosi i sorgenti

3) JSON-Framework: ormai quando si interroga un servizio online è molto probabile che questo restituisca dati in JSON piuttosto che XML, data la sua maggiore compattezza e quindi maggiore velocità di download e minore consumo di banda. Questa libreria offre dei metodi “stand-alone” + una estensione alla classe NSString, per cui semplicemente chiamando la nuova proprietà JSONValue di una stringa contenente dei dati in formato JSON questi vengano “parserizzati” e inseriti in un array o dizionario, eventualmente gerarchico. Più semplice di così…

4) RegexKitLite: le regular expression sono una delle più belle invenzioni per i programmatori…e quelli che ancora non le conoscono non sanno quanto tempo stanno sprecando e cosa si stanno perdendo. Cercare, estrarre, sostituire sottostringhe all’interno di un’altra stringa con le regex diventa un compito veloce e “pulito”. Senza? Preparatevi a scrivere blocchi e blocchi di codice nidificato e indici di inizio-fine stringa che non potranno far altro che confondervi le idee. u Mac OSX esiste ICU, una libreria C/C++ statica che tra le altre cose implementa anche le regex. RegexKitLite invece è una libreria che wrappa queste funzioni C all’interno di classi Objective-C di semplice utilizzo. Come per JSON-Framework, anche in questo caso la classe NSString base viene estesacon nuovi metodi per cercare e sostituire sottostringhe complesse.

5) KissXML: certo, ormai molti servizi restituiscono JSON, ma XML ovviamente è tuttora usatissimo…e bisogna lavorarci. In Cocoa “full” (quello usato per app che girano su OSX) c’è NSXML, ovvero un set di classi (NSXMLDocument, NSXMLElement, NSXMLNode ecc.) in grado di effettuare il parsing di testo XML in un singolo passo e di rappresentarlo poi con una struttura gerarchica  in memoria, per una semplice navigazione ed estrazione dei dati. Probabilmente per motivi di performance e di consumo di memoria queste classi non sono state rese disponibili nel framework Cocoa Touch dell’iPhone e ci si dovrebbe invece accontentare della classe NSXMLParser: è un parser SAX, che quindi analizza l’XML in modalità asincrona e solleva vari eventi via via che legge e trova nodi ed elementi. E’ inoltre a sola lettura, quindi non va bene per creare o modificare documenti XML. Soluzione più comoda? KissXML, che basandosi sulla libreria C libxml2 implementa un qualcosa in stile NSXMLDocument. Se vi trovate a dover lavorare con XML non enormi e magari già presenti in locale, è decisamente un’ottima alternativa in quanto a comodità.

Ricordiamo che Marco Bellinaso attualmente sta lavorando ad una serie di progetti per la AnguriaLab e la GetConnected.

HotAcquista iPhone 15 su Amazon!
Dev