iPhone - La Tua Prima App

download iPhone - La Tua Prima App

of 26

description

IPhone_-_La_tua_prima_app.pdf

Transcript of iPhone - La Tua Prima App

  • Approfondimenti tematici

    Come creare facilmente unapp

    per iPhone e pubblicarla

    su iTunes

    iPhonela tua prima app

  • Apple ha aperto una nuova frontiera per la program-mazione mobile. Lavvento di iPhone e di Apple Store ha dato modo agli sviluppatori, anche ai pi piccoli, di fare breccia nel mercato mondiale delle applicazioni per disposi-tivi mobile. Questo approfondimento tematico pensato per mettere lo sviluppatore in condizione di creare facil-mente App per iPhone e pubblicarle su iTunes.La prima parte del testo una guida passo passo alla creazione di una web application completa per iPhone utilizzando il framework iWebKit. La seconda parte, invece, dedicata alla pubblica-zione delle App su App Store, con una marcata atten-zione al rispetto delle regole per non incorrere nello stop Jobs e per favorire le prospettive di business dello sviluppatore mobile.Il testo si chiude con un esempio di progetto pratico che guida il lettore alla creazione di unapplicazione pronta per iTunes.

    iPhone la tua prima app

  • IPHONE: WEBAPP ALLAPORTATA DI TUTTI . . . . . . . . . . . . . . . .4 Creiamo una web application completa per iPhone in pochi minuti con il framework iWebkit. scopriremo il modo pi semplice per entrarenel mondo della programmazione dello smart-phone pi ambito...

    LA NOSTRA APP SULLAPPLE STORE! (1) . . . . . . . . .11Dopo tanti mesi dedicati alla realizzazione delle app per iphone, tempo di scoprire come pub-blicale su apple store, rispettando le regole di Apple e seguendo tutte le procedure necessarie per non incorrere nello stop jobs!

    LA NOSTRA APP SULLAPPLE STORE (2) . . . . . . . . . .15pubblicare unapplicazione su apple store ado-perando i portali iphone provisioning portal e itunes connect: scopriamo come farlo al meglio,seguendo tutto il percorso che arriva fino alla pubblicazione

    UNA SVEGLIADIGITALE PER IPHONE . . . . . . . . . . . .20In questo articolo mostriamo come realizzare una sveglia digitale che ci avviser di impegni e scadenze imminenti. sar loccasione di appro-fondire i concetti legati alla gestione dellinter-faccia e del timer

  • iPhone - La tua pr ima app 4

    iPhone - La tua prima app Web Application per iPhone con iWebKit

    IPHONE: WEBAPP ALLAPORTATA DI TUTTICREIAMO UNA WEB APPLICATION COMPLETA PER IPHONE IN POCHI MINUTI CON IL FRAMEWORK IWEBKIT. SCOPRIREMO IL MODO PI SEMPLICE PER ENTRARENEL MONDO DELLA PROGRAMMAZIONE DELLO SMARTPHONE PI AMBITO...

    Volete entrare nel mondo delle programma-zione iPhone, ma non avete un Mac a dispo-sizione? Niente paura! Da oggi potrete crearei vostri programmi per iPhone anche da Windows!Come? Semplice: potete facilmente creare unaWebApp sfruttando uno tra i pi semplici fra-mework free disponibili in rete: iWebKit. Non dovre-te imparare alcun nuovo linguaggio, comelObjective-C, anzi, potrete tranquillamente sfrutta-re le vostra attuali conoscenze di programmazione.Unico requisito: qualche nozione di HTML e CSS.Quella che creeremo oggi una WebApp che fungerda vetrina per la presentazione dei prodotti diunazienda. Il risultato, mostrato in Fig. 1, sar unprogramma simile alle classiche applicazioniNavigation-Based tipiche di iPhone, dove lutentefinale pu navigare, tra le diverse categorie fino adarrivare al prodotto desiderato.

    LE WEBAPPDi cosa stiamo parlando esattamente? Di WebApplication, ovvero applicazioni studiate pergirare all'interno di un browser, nel nostro

    caso quello dell'iPhone all'interno di SafariMobile. Non dovrete avere installato l'SDK(Software Development Kit) di Apple su MacOS, (anche se al suo interno disponibilelutilissimo tool Dashcode), o imparare unnuovo linguaggio o paradigma di programma-zione. Quello che invece vi serve semplice-mente un editor di testo, va bene anche ilsemplice notepad e, come detto, qualchenozione di HTML e CSS.Alla base di ogni WebApp, infatti, vi da strut-turare un buon layout grafico, poi, con un po'di Javascript ed eventuali altri linguaggi discripting, potrete realizzare pi o meno tuttoquello che desiderate: solo la vostra fantasiapotr limitare le vostre creazioni! Ebbene, nellarealizzazione di questo primo aspetto di unaWebApp, (grafica e layout), avrete pi possibi-lit: rimanere con Apple e utilizzare il suoDashcode, o sfruttare uno dei tanti frameworkdisponibili in giro per il web, che vengono innostro aiuto per semplificarci la vita. iWebKit forse il pi semplice fra questi framework, e vifar entrare nel mondo iPhone in men che nonsi dica. A detta dell'autore, Christopher Plieger,

    COVER STORY Web Application per iPhone con iWebKit

    ht tp ://www. ioprogrammo. i t

    G 20 / Maggio 2010

    CD WEBiPhoneWebApp.zip

    cdrom.ioprogrammo.it

    Conoscenze richiesteHTML, CSS

    SoftwareiWebKit, Notepad,Browser Safari

    Impegno

    Tempo di realizzazione

    REQUISITI

    Fig. 1: Una visione di insieme di come si presenter il nostro progetto finito

    020-026:088-093-corsi-xsl 2-04-2010 16:35 Pagina 20

  • 5 iPhone - La tua pr ima app

    iPhone - La tua prima appWeb Application per iPhone con iWebKit

    ht tp ://www. ioprogrammo. i t Maggio 2010 / 21 G

    Web Application per iPhone con iWebKit COVER STORY

    non occorrono neanche le poche conoscenzerichieste (HTML e CSS) in quanto possibile,creare la versione ottimizzata del proprio sito odella propria WebApp per iPhone sfruttando ilCopia e Incolla.

    CONTENUTO DEL FRAMEWORKPrima di addentrarci nel lato pratico dellartico-lo, analizziamo il contenuto del framework. Unavolta scaricato il file iWebKit5.03.zip dal sito uffi-ciale http://iwebkit.net/downloads (in versione 5.03al momento della stampa), ecco cosa troviamoall'interno del file iWebKit 5.03.zip:

    changelog.pdf con all'interno le modificheeffettuate al framework nelle varie versioni,dalla prima a quella attuale

    Userguide.pdf una guida passo passo (in ingle-se) con le istruzioni sull'uso del framework

    license.pdf la licenza d'uso del framework,(ricordiamo che stiamo parlando di uno stru-mento free)

    Una cartella iWebKit demo, una cartella conte-nente una demo pronta all'uso contenente lamaggior parte dei componenti del framework(troverete un demo online da provare sulvostro iPhone anche sul sito ufficiale menzio-

    nato sopra) Una cartella Framework, contenente il veromotore che sfrutteremo in questo articolo.

    Dentro questultima cartella troviamo ulterioriquattro cartelle e un file HTML, index.html, potressere usato come punto di partenza per qualsia-si WebApp. Tra le quattro cartelle troviamo quel-la contenente il CSS che definisce laspetto dellanostra WebApp, una cartella che contiene le fun-zioni in javascript, (al momento solo due, unaper settare la vista in modalit fullscreen e l'altraper nascondere la URLbar, ovvero la barra del-l'indirizzo di Safari Mobile). Infine troviamoancora due cartelle, images e thumbs, contenentigli elementi grafici da usare nelle nostre webapplication: pulsanti, switch e quant'altro possatornarci utile. Facendo doppio clic sul fileindex.html si aprir il browser che mostrer unapagina contenente un semplice sfondo rigato euna top bar vuota (la classica NavigationBar delleapplicazioni scritte in Objective-C).Questo file, come detto, sar il punto di partenzadi ogni nostra WebApp sviluppata con questo fra-mework. Ovviamente potrete ignorare il file epartire da zero, anche se non fareste altro cheallungare inutilmente il vostro lavoro in quanto,il file index.html, non nientaltro che un model-lo gi preparato e collegato al css di iWebKit.

    CREIAMO LA WEBAPPPassiamo ora allaspetto pratico e iniziamo acreare la nostra WebApp. Apriamo con un editordi testo il file index.html e analizziamolo. Comepotete vedere si tratta di una semplice paginaHTML con la seguente struttura:

    Abbiamo volutamento omesso dal listato tuttoquello che non serve ai fini di questa analisi, in

    NOTA

    DISPLAYUna delle caratteristiche datenere sempre a mentedurante lo sviluppo per undispositivo mobile ladimensione del display.Non avrete infatti moltospazio disponibile su cuimontare i vari elementidella vostra applicazione,dovrete infattiaccontentarvi, nel casodelliPhone, di unarisoluzione, a schermopieno, di 320x460 pixel.Laspetto positivo checonosciamo la dimensioneesatta, certo che nondovrete mai sottovalutareuno studio accuratodellinterfaccia utentefinale per la vostraWebApp.

    Fig. 2: La WebApp vuota e pronta alla personalizzazio-ne che costituir la nostra WepApp

    020-026:088-093-corsi-xsl 2-04-2010 16:35 Pagina 21

  • iPhone - La tua pr ima app 6

    iPhone - La tua prima app Web Application per iPhone con iWebKitCOVER STORY Web Application per iPhone con iWebKit

    ht tp ://www. ioprogrammo. i tG 22 / Maggio 2010

    modo da visualizzare chiaramente la tipica strut-tura HTML del file.Allinterno dei tag head potete vedere i riferimen-ti al file style.css e al file contenente le funzioni injavascript function.js.Dentro il body, invece, troviamo il contenutovero e proprio della WebApp di Fig.2, nello speci-fico possiamo vedere le tre aree che andremosuccessivamente a personalizzare: topbar, con-tent e footer.

    LA TOPBARIniziamo quindi col il primo elemento: la topbar,ovvero lequivalente della navigation bar delleapplicazioni classiche per iPhone. Dobbiamoinnanzitutto scegliere un colore tra quelli dispo-nibili (azzurra, nera o trasparente), specificareun titolo e aggiungere due pulsanti, uno a formadi freccia con raffigurata licona di una casa pertornare alla Home e che posizioneremo sullasinistra e laltro, un semplice tasto posizionatosulla destra e colorato in blu, che utilizzeremoper mostrare la pagina Info. Arriveremo a otte-nere quanto mostrato in Fig. 3:

    Per ottenere questo risultato dobbiamo modifi-care la porzione di codice dedicata alla topbar:

    Possiamo personalizzarne il colore aggiungendoil parametro class a cui daremo il valore black"per ottenere la topbar nera, e "transparent" per laversione trasparente. Per aggiungere il titolo ioProgrammo dovremo, invece, inserire allinternodella topbar il div title in questo modo:

    ioProgrammo

    Per inserire i pulsanti, il procedimento simile:dovremo quindi inserire il codice sempre allin-terno del div topbar. Useremo leftnav per il pul-sante a freccia e bluerightbutton per quello blu didestra:

    ioProgrammo

    INFO

    Come vedete, si tratta di semplice HTML e, perlinserimento dellicona nel pulsante di sinistra,ce la siamo cavata con il classico tag img. Poteteintuire con quanta semplicit potrete andare apersonalizzare ogni aspetto delle vostre WebApp,il tutto senza dover studiare e capire chilometridi codice che spesso contraddistinguono fra-mework proprietari.Eccovi, per comodit, un elenco dei tipi di pul-santi disponibili nel framework, che potrete inse-rire a piacimento nelle topbar delle vostreWebApp:

    leftnav (pulsante a freccia sinistro) rightnav (pulsante a freccia destro) leftbutton (pulsante classico grigio sinistro) rightbutton (pulsante classico grigio destro) blueleftbutton (pulsante classico blu sinistro) bluerightbutton (pulsante classico blu destro)

    Eventualmente potrete anche nidificare pi left-nav (o rightnav), facendo per attenzione ai limi-ti imposti dalle dimensioni del displaydelliPhone (320pixel di larghezza). Per farlo,dovrete semplicemente aggiungere altri tag acome segue:

    Pag.1Pag.2

    Per quanto riguarda la nostra topbar il lavoro terminato, sappiate per che esistono altri ele-menti che possono essere inseriti al suo interno,o subito sotto. Stiamo parlando dei duo/trio but-tons, che potete vedere in Fig. 4:

    DUO/TRIO BUTTONSSe aveste necessit di utilizzare questi elementisulla vostra topbar (facendo attenzione a nonmettere il title, che verrebbe nascosto) dovrete

    NOTA

    ORIENTAMENTOPer chi non lo sapesse,

    liPhone dotato diaccelerometro integrato.

    Questo utilissimo elementohardware offre allutente la

    possibilit di variarelorientamento del display asuo piacimento. Chiunquepotr di fatto scegliere se

    visualizzare le vostrecreazioni in modalitportrait (schermata inverticale) o landscape

    (schermata in orizzontale).Dovrete sfruttare al meglio

    questa caratteristica, datener ben presente durante

    la progettazione delleinterfacce utente, se non

    volete ottenere effettiindesiderati.

    Fig. 3: La topbar della nostra applicazione

    Fig. 4: In figura altri elementi che si possono inserirenella zona topbar

    020-026:088-093-corsi-xsl 2-04-2010 16:35 Pagina 22

  • 7 iPhone - La tua pr ima app

    iPhone - La tua prima appWeb Application per iPhone con iWebKit

    ht tp ://www. ioprogrammo. i t Maggio 2010 / 23 G

    Web Application per iPhone con iWebKit COVER STORY

    utilizzare duoselectionbuttons o triselectionbuttons,ovviamente inserendo il codice allinterno deldiv topbar, se, invece, li volete subito sotto labarra di navigazione, vi baster usare i divduobutton e tributton, questa volta subito dopo lachiusura della topbar, cosi come in questo esem-pio:

    Sel 1Sel

    2

    Btn

    1Btn 2Btn 3

    Potete infine usare id="pressed" nel tag a pervisualizzare il tasto premuto dove occorre.Prima di passare alla personalizzazione del divcontent vediamo un altro elemento che possibi-le inserire dopo la chiusura della topbar e primadell'apertura del content, si tratta di doublead,ovvero due box contenenti altrettanti file grafici,in stile App Store per intenderci (vedi Fig.5 subi-to sotto la topbar). Eccovi il codice:

    PERSONALIZZIAMO IL CONTENTPassiamo ora ad occuparci del content dellanostra WebApp. Qui, gli elementi che possiamointrodurre, sono davvero molti e tutti, ovviamen-te, nel classico stile iPhone. Quello che andremoa costruire un elenco contenente le categoriedelle pubblicazioni Edizioni Master, comemostrato in Fig.5, successivamente, al clic (omeglio al tap) su di una voce da parte dell'u-tente iPhone, si aprir un elenco (che vedremopi avanti) contenente tutti i magazine EdizioniMaster di quella categoria.Gli elementi che andremo ad inserire da qui inavanti sono quelli che vedete sotto il doubleaddella Fig. 5, ovvero un titolo in grigio seguito dauna casella di testo e successivamente un elencograficamente molto simile alle classiche tabelle(UITable), con al loro interno pi o meno dettagli,

    tipiche dell'iPhone.La maggior parte di questi elementi vengonogestiti con i tag ul e li, usati in HTML per gestiregli elenchi. Sar poi grazie al parametro class deltag li che visualuzzeremo una voce della tabella(menu) piuttosto che una casella di testo(textbox). Inseriamo il seguente codice all'internodel div content:

    Edizioni Master

    Magazines

    Di seguito i Magazines Edizioni Master

    disponibili in tutte le edicole.

    Categorie

  • iPhone - La tua pr ima app 8

    iPhone - La tua prima app Web Application per iPhone con iWebKit

    Vai

    DIGITECH END

    USER

    Vai

    VIDEOGAMES &

    CARTOON

    Vai

    LIFESTYLE

    Vai

    Abbiamo definito due sezioni distinte, ognunaracchiusa tra tag ul e precedute da un titolo.Unica differenza che il parametro class deltag li avr valore textbox nel caso in cui stiamoinserendo la casella di testo e menu per gli ele-menti della tabella (lelenco). Per ogni rigadella tabella, inoltre, possiamo definire unnome (name), ovvero il testo visualizzato, uncommento (comment), che verr visualizzatoin grigio sulla destra ed eventualmente mostra-re una freccia (arrow) che indica all'utente chepu proseguire nella navigazione nellaWebApp cliccando semplicemente su di unacella. Ricordiamo che stiamo sempre parlando

    di HTML, quindi potrete personalizzare emodificare come meglio credete quantomostrato fino ad ora. Ad esempio, per omette-re un commento o la freccia, non dovrete faraltro che togliere quella riga di codice.

    INTERAGIRE CON LE APP NATIVEConcludiamo la personalizzazione del contentdella pagina index.html per la nostra WebApp,andando a inserire un'ulteriore elenco (semprein stile UITable) sotto l'elenco categorie.Creeremo questa volta una sezione dedicata aicontatti, che sfrutter qualche funzione in pirispetto a quanto visto fino ad ora. Saremoinfatti in grado di interfacciarci con le app nati-ve telefono, mail e mappe di iPhone, passandoad esse, al tap sulla rispettiva voce, alcuniparametri, come il numero di telefono da chia-mare, gli indirizzi e-mail a cui scrivere, even-tuale oggetto e corpo della mail o un link diGoogle Maps che ci permetter di aprirelapplicazione mappe posizionato nella luogodesiderato. Per far ci aggiungiamo il seguentecodice prima della chiusura del div content:

    Contatti

    Chiamaci

    Scrivici

    COVER STORY Web Application per iPhone con iWebKit

    ht tp ://www. ioprogrammo. i t

    G 24 / Maggio 2010

    NOTA

    VIDEO YOUTUBENellarticolo non lo

    abbiamo accennato, mapotete interagire anche con

    lapplicazione nativaYouTube, presente in ogni

    iPhone e iPod Touch. Il funzionamento davvero

    semplice, baster infatticopiare semplicemente

    lURL del video desideratoed inserirlo nella seguente

    riga di codice cheutilizzerete poi dove meglio

    credete allinterno dellavostra WebApp:

    Guarda

    Si tratta del semplice tag

    usato in HTML perlaperture dei link: a.

    Fig. 6: Screenshot dopo il click su Chiamaci, Scrivici e Vieni a trovarci

    020-026:088-093-corsi-xsl 2-04-2010 16:35 Pagina 24

  • 9 iPhone - La tua pr ima app

    iPhone - La tua prima appWeb Application per iPhone con iWebKit

    Vieni a trovarci

    Anche in questo caso il codice molto semplice.Grazie a questa riga di codice:

    Contatti

    verr aggiunto un titolo grigio alla nuova sezio-ne della pagina. Ai successivi elementi delle-lenco, invece, molto simili a quelli della primaparte del content, abbiamo semplicementeaggiunto un link (con allinterno i parametri dapassare alle app native) e unicona pressa dallacartella thumbs inclusa nel framework. Con ilcontent del file index.html abbiamo terminato,per quanto riguarda il footer, lo lasciamo coscom, anche se potremmo personalizzarlo apiacere seguendo le stesse regole mostrate finoad ora.

    ELENCO IN STILE ITUNESVediamo ora come creare un elenco simile aquello che trovate nelliTunes Store (Fig. 7),con tanto di stellette di valutazione per ogni

    elemento. Facciamo una copia del fileindex.html appena creato e rinominiamolo indigitechProfes sional.html. Apriamo il file conun editor di testo e cancelliamo tutto il codiceallinterno del div content. Il resto, per como-dit, lasciamolo inalterato. Se visualizziamounanteprima nel browser del file (ricordateche iWebKit studiato per lavorare con Safari),vedrete che abbiamo mantenuto la topbar contutti i suoi elementi incluso lelemento subitosotto la doublead.Nel framework iWebKit esistono diversi ele-menti per la visualizzazione degli elenchi enello specifico:

    elenco classico elenco in stile App Store elenco in stile iTunes Store elenco in stile libreria iPod

    Noi arriveremo al risultato mostrato in Fig. 7 tra-mite un elenco simile a quelli visti in precedenzaricavati grazie a class="pageitem" nel tag ul. Neltag li, invece, imposteremo il valore di class a store(anzich textbox o menu visti in precedenza)Inseriamo quindi, subito dopo lapertura del con-tent, un titolo:

    Digitech

    Professional

    e continuiamo inserendo il tag ul allinternodel quale inseriremo poi i vari elementi delle-lenco:

    Allinterno di ul inseriremo, quindi, tutti gli ele-menti che desideriamo in questa forma:

    La rivista di software

    development pi venduta in Italia

    ioProgrammo

    9,99 Vers.

    PLUS

    Anche qui la struttura molto semplice epotremo personalizzarla a nostro piacimento.

    Web Application per iPhone con iWebKit COVER STORY

    ht tp ://www. ioprogrammo. i t Maggio 2010 / 25 G

    Fig. 7: Elenco in stile App Store su iTunes

    NOTA

    INSTALLAZIONEPer installare e testare lavostra WebApp, lasoluzione pi semplice quella di fare luploaddellintero progetto nellospazio dedicato che avetenel vostro eventuale pianodi Hosting associato alvostro dominio, Potete poiraggiungere lapplicazionesemplicemente inserendolindirizzo web in SafariMobile, proprio comefareste per raggiungere unsito web. Se non possedeteun Hosting, potete sempreusufruire di uno degliinnumerevoli servizi gratuitidisponibili in Rete, comequello offerto da alterVISTA(http://it.altervista.org/)

    020-026:088-093-corsi-xsl 2-04-2010 16:35 Pagina 25

  • iPhone - La tua pr ima app 10

    iPhone - La tua prima app Web Application per iPhone con iWebKit

    Potremmo inserire unimmagine per ogni ele-mento, questa deve essere di dimensioni90x90pixel, nel caso fosse pi grande, verrridimensionata in automatico. Fate attenzioneche se le immagini utilizzate non sono in scala,verranno distorte. Dopo limmagine, trovia-mo un commento che verr posizionato inalto, subito sotto il nome e a seguire possiamoaggiungere le stelle di valutazione grazie alli-struzione

    Variando il numero di fianco stars, potremovisualizzare da 0 a 5 stelle. Possiamo inoltreaggiungere un commento subito dopo le stelle,che noi abbiamo utilizzato per indicare il prezzodella rivista. Infine, lultima riga, non fa altro cheinserire la freccia a destra per scendere ancora diun livello nella navigazione, in parole povere, pervisualizzare il dettaglio della rivista. Potrete inse-rire tutti gli elementi che volete mantenendosemplicemente questa struttura, volendo, potre-te inoltre personalizzare il tutto a piacere rimuo-vendo o aggiungendo i vari componenti.

    RIFINITURE Seguendo lo stesso metodo potrete crearetutte le pagine che volete e organizzarle come

    meglio credete, proprio come se fosse un sitoweb. Nel nostro progetto potete vedere altrepagine HTML create tutte con lo stesso mec-canismo: demo.html, ioProgrammo.html einfo.html. Queste contengono tutti gli elementi visti finoad ora. Potrete inoltre spulciare la guida allu-so inclusa nel kit del framework per introdur-re eventualmente altri elementi: il funziona-mento rimarr pressoch invariato. Prima diconcludere vorremmo proporvi ancora treaspetti utili per ogni WebApp, ovvero la visua-lizzazione in modalit Full Screen, laSplashscreen (la vista che viene mostratadurante il caricamento della WebApp) e lapersonalizzazione dellicona che comparirnella springboard del vostro iPhone. Perquanto riguarda la modalit di visualizzazio-ne Full Screen abbiamo poco da fare, essendoun accorgimento lato utente, che, premendoil tasto + in Safari Mobile, potr aggiungerela WebApp nellelenco delle proprie applica-zioni. Proprio per questo motivo sarebbe cari-no prevedere una Splashscreen e uniconastudiate appositamente per la vostra WebApp.Per inserire la Splashscreen ci baster inserirenel progetto, ad esempio nella cartella pics,unimmagine in formato .png grande 320x460pixel, che chiameremo startup.png. Dovremopoi inserire il seguente codice prima dellachiusura del tag head:

    Per licona il procedimento analogo, creiamola stessa in formato .png di dimensioni58x58pixel, che chiameremo, ad esempio,image.png, e la inseriamo sempre nella cartel-la pics. Anche in questo caso occorrer inseri-re, sempre prima della chiusura dellhead, ilseguente codice:

    Lavvio della splash, cos come il salvataggiodellicona desiderata, sar del tutto automati-ca. Potete vedere unesempio di Splashscreenin Fig. 8. In conclusione possiamo affermareche iWebKit la soluzione ideale per entrarenel modo delliPhone nel minor tempo possi-bile. Pochi i requisiti necessari per imparare amaneggiare la collezione di oggetti disponibi-li gratuitamente e alla portata di tutti al suointerno.

    Rino Picardi

    COVER STORY Web Application per iPhone con iWebKit

    ht tp ://www. ioprogrammo. i t

    G 26 / Maggio 2010

    Fig. 8: Un piccolo capolavoro disegnato nel nostrofidato paint

    LAUTORE

    Rino Picardi, SystemAdministrator di

    professione e appassionatodi informatica e tecnologieda sempre, il fondatore

    della community italiana diProgrammazione per

    iPhone devAPP(http://www.devapp.it).

    Con le sue pubblicazioni equelle dei suoi

    collaboratori, guida tutti gliappassionati della mela

    ad addentrarsinellaffascinante mondodella programmazione

    mobile, dai primi passi finoalla pubblicazione in App

    Store. Potete contattarlo alseguente indirizzo e-mail:

    [email protected]

    020-026:088-093-corsi-xsl 2-04-2010 16:35 Pagina 26

  • 11 iPhone - La tua pr ima app

    iPhone - La tua prima appGuadagnare con lo sviluppo per iPhoneMOBILE Guadagnare con lo sviluppo per iPhone

    http://www.ioprogrammo.it 62 / Agosto 2010

    Dopo i numerosi articoli che sono stati presentati su questa rivista e in cui abbiamo mostrato alcuni aspetti fon-damentali della programmazione su iPhone/iPod Touch, apriamo una parentesi dedicata alla pubblicazione su Apple Store. In queste pagine illustreremo tutte le procedure neces-sarie affinch la vostra applicazione venga approvata, cercando di minimizzare gli errori pi frequenti allo scopo di evitare possibili rifiuti da parte del team di valutazione di Apple che, come sapete, ha riservato per s un diritto di veto quasi inappellabile.

    IL DECALOGO DA SEGUIRE PRIMA DELLA PUBBLICAZIONEPrima di inviare unapplicazione su Apple Store necessario seguire i seguenti passi:

    1) Acquisto di una licenza annuale come svi-luppatore;

    2) Verifica che lapplicativo rispecchi pie-namente le regole dettate nel documen-to chiamato iPhone/iPad Human Interface Guidelines;

    3) Verifica che lapplicativo non utilizzi API non pubbliche e framework non ufficiali;

    4) Creazione di un sistema di chiavi neces-sarie per firmare il proprio applicativo sul Provisioning Portal;

    5) Creazione del profilo di pubblicazione in XCode;

    6) Creazione di un file di Entitlements;7) Modifica delle opzioni di compilazione del

    progetto;8) Compilazione e packaging;9) Pubblicazione su iTunes Connect;10) Invocazione della protezione degli dei,

    affinch la nostra app riscontri il successo che ci aspettiamo.

    Quasi tutti i passi devono essere ripetuti per ogni singola applicazione, a parte ovviamente lacqui-sto della licenza. Tratteremo in dettaglio ognuno degli step appena descritti, iniziando proprio con lacquisto della licenza di sviluppatore.

    LACQUISTO DELLA LICENZASe per testare le proprie applicazioni suffi-ciente adoperare lSDK fornito gratuitamente sul sito Apple (http://developer.apple.com/iphone), ci non pi sufficiente quando si decide di pubblicare su Apple Store, per tale motivo necessario acquistare una licenza annuale del costo di 79 euro, con una carta di credito (vanno bene anche quelle prepa-gate oltre a quelle normali). Apriamo una parentesi sui tipi di licenza disponibili: ne esi-stono numerosi, ma i due pi utilizzati sono lo Standard Program e lEnterprise Program, a parte la differenza di prezzo (circa 200$ in pi per questultimo) il secondo, indirizzato a societ con pi di 500 dipendenti, inibisce la possibilit di pubblicare su Apple Store, con-sentendo invece di distribuire internamente ai propri dipendenti (in-house distribution) senza alcun vincolo i propri software per il disposi-tivo Apple; lo Standard Program utilizzabile sia da singoli sviluppatori che da societ che desiderano pubblicare su Apple Store. A parte la necessit di adoperarli per la pubblicazio-ne, esistono altri vantaggi forniti da questi programmi, primo fra tutti la possibilit di testare i propri software su dispositivi fisici, iPhone, iPod o iPad, consentendo di realizzare un test pi accurato sia sulle prestazioni che su come il sistema operativo reale interpreta e mostra i vostri contenuti. Un ulteriore pre-gio quello di consentire la cosiddetta Ad Hoc Distribution, procedura che consente di inviare ad altri dispositivi il vostro software

    REQUISITI

    Conoscenze richiesteObjective-C

    SoftwareMac OS 10.5.x o superiore (10.6.x per lSDK 3.x)

    Impegno

    Tempo di realizzazione

    CD WEBiPhone_RSS.rar

    cdrom.ioprogrammo.it

    LA NOSTRA APP SULLAPPLE STORE!DOPO TANTI MESI DEDICATI ALLA REALIZZAZIONE DELLE APP PER IPHONE, TEMPO DI SCOPRIRE COME PUBBLICALE SU APPLE STORE, RISPETTANDO LE REGOLE DI APPLE E SEGUENDO TUTTE LE PROCEDURE NECESSARIE PER NON INCORRERE NELLO STOP JOBS!

  • iPhone - La tua pr ima app 12

    iPhone - La tua prima app Guadagnare con lo sviluppo per iPhone MOBILEGuadagnare con lo sviluppo per iPhone

    Agosto 2010 / 63 http://www.ioprogrammo.it

    per scopi di test o pubblicitari, ma attenzione: questo tipo di distribuzione perde la sua vali-dit (scade) dopo alcuni mesi, obbligandovi automaticamente ad inviare nuovamente il software. Non quindi un sistema di distri-buzione definitivo, ma temporaneo, nato per consentire linvio a utenti test che non fanno parte del team di sviluppatori. Con entrambi i programmi si acquisisce anche la possibilit di poter scaricare versioni pre-release, accedere al forum degli sviluppatori Apple, servizio utile per richiedere aiuto e ottenere suggerimenti da altri sviluppatori, e si ottiene una garanzia tecnica Apple per due anni. Per registrarsi come sviluppatore basta accedere allindirizzo http://developer.apple.com/programs/ipho-ne e cliccare sul bottone Enroll Now, a questo punto si d inizio ad una serie di passi obbli-gatori che forniscono sufficienti informazioni ad Apple per registrarvi, ovviamente si dovr scegliere Standard Program e, nel caso in cui non possediate un account Apple, necessa-rio crearne uno sempre allinterno di questa procedura. Purtroppo non possiamo mostrarvi tutte le immagini delle fasi di registrazione per le limitazioni imposte dalliPhone Agreement, documento che si deve accettare obbligatoria-mente, dopo la fase di inserimento dei propri dati personali. Al termine di tutti i vari passi, possibile che Apple provi a contattarvi telefo-nicamente, quasi sempre da parte di operatori in lingua inglese, per verificare che abbiate inserito i dati correttamente, per le societ questo passo richiesto da Apple che, inol-tre, pretende di ricevere un documento legale tramite un numero di fax che attesti leffettiva esistenza della stessa dal punto di vista legale (iscrizione alla Camera di Commercio). Dopo alcuni giorni riceverete una serie di e-mail di conferma che vi consentiranno di finalizzare la registrazione. Al termine, avrete accesso ai vari portali necessari per pubblicare i vostri software: iPhone Provisioning Portal e iTunes Connect in primis. Il Provisioning Portal svolge la funzione di portale, necessario accedervi per creare i certificati che vengono adoperati per testare su dispositivi fisici, e inviare le proprie applicazioni sullApple Store; iTunes Connect il servizio che accetta i programmi realizzati per iPhone/iPod/iPad e rappresenta lultimo passo necessario per la pubblicazione.

    LA VERIFICA DELLAPP CON LA HUMAN INTERFACE GUIDELINESPrima di ipotizzare un qualunque invio ad

    Fig. 1: Selezionando Enroll Now si inizia la fase di registra-zione

    Fig. 2: Possiamo scegliere se adoperare un account preesi-stente o crearne uno nuovo

    Fig. 3: In questa schermata si decide se registrarsi come societ o come singolo sviluppatore

    Fig. 4: Alcune delle informazioni che lutente deve inserire per acquistare la licenza

    LINK

    TRE LINK DA NON DIMENTICAREhttp://developer.apple.com/programs/iphone presso questo indirizzo possibile acquistare la licenza per divenire uno sviluppatore iPhone.

    Con iTunes Connect gli sviluppatori possono pub-blicare le loro applicazioni Connect: https://itunesconnect.apple.com

    Con liPhone Provisioning Portal abbiamo accesso a tutti i certificati necessari alla pubblicazione dellapp:http://developer.apple.com/iphone/manage/overview/index.action

  • 13 iPhone - La tua pr ima app

    iPhone - La tua prima appGuadagnare con lo sviluppo per iPhoneMOBILE Guadagnare con lo sviluppo per iPhone

    http://www.ioprogrammo.it 64 / Agosto 2010

    Apple, necessario effettuare preventivamente delle verifiche sul proprio software in modo da sincerarsi che rispecchi tutte le regole elencate nel documento chiamato: Human Interface Guidelines (HIG in alcuni documenti), disponi-bile sia nella versione iPhone che iPad. Il docu-mento in questione, disponibile sia online in formato HTML che PDF, e nella documentazio-ne allegata ad XCode, rappresenta il testo che detta le regole su cosa i valutatori Apple riten-gono ammissibile in unapplicazione iPhone e cosa invece li obbligher a rifiutarla. Negli articoli fin qui proposti abbiamo fatto atten-zione a non adoperare nessun componente in modo non consentito, e abbiamo seguito il pi possibile le informazioni contenute in tale testo. Non leggere almeno una volta questo documento disponibile al momento solo in lingua inglese, porter generalmente ad una sequenza di rifiuti da parte di Apple, questo dovuto al fatto che le informazioni contenute al suo interno rappresentano quei binari che ogni sviluppatore deve seguire per mantenere la propria applicazione coerente con tutte le altre gi presenti su Apple Store. I problemi maggiori si riscontrano in genere quando:

    Il software presenta uno o pi crash; Si personalizzano alcuni componenti visuali predefiniti rendendo il loro comportamento poco intuitivo graficamente oppure differen-te semanticamente da ci che un utente si aspetterebbe;

    Si utilizzano icone il cui significato fuor-viante, oppure adoperando quelle fornite nellSDK in contesti non consentiti;

    Se non si mostrano avvertimenti adoperando ad esempio gli UIAlertView di cui abbiamo trattato in precedenti articoli quando si presentano situazioni impreviste, quali man-canza o cadute di connessione ad Internet, o altri tipi di errori di cui lutente deve essere informato;

    Non si verifica preventivamente che un dispositivo ha o no accesso ad un determina-to componente hardware (come GPS, micro-fono, giroscopio, bussola) perch questo non abilitato oppure non presente fisicamente, e non si notifica tale carenza allutente;

    Si utilizzano icone diverse tra lApple Store e quella interna al software;

    Si supporta la rotazione dellinterfaccia senza riorganizzarne il layout.

    La serie di errori possibili talmente vasta che ne abbiamo presentato solo un ristretto sottoinsieme, comunque allinterno di questa guida per ogni singolo componente si trova

    una descrizione che ne identifica dettagliata-mente lo scopo, le funzionalit, come dovreb-be e come non dovrebbe essere adoperato e customizzato. Trovano posto anche paragrafi dedicati a cosa lutilizzatore di un certo servi-zio/componente grafico si aspetta. Anche se questo documento sembra rappresentare solo una lista di limitazioni alla propria creativit deve essere considerato una fonte di infor-mazioni fondamentali. comunque sempre possibile realizzare software interamente per-sonalizzati senza adoperare alcun componente grafico predefinito, in tal caso si bypassano molti dei check effettuati dal team di approva-zione Apple. Bisogna dire che le due Human Interface Guidelines non sono a volte lunica motivazione che porta al rifiuto del proprio software ma in genere rappresentano il moti-vo principale per la quasi totalit dei reject. Questa guida cambia con una certa frequenza, viene corretta, e ampliata dai tecnici Apple anche in base alle novit introdotte nelle nuove versioni degli SDK rilasciati e conviene verifi-care con una certa frequenza , in genere mensi-le, se ha subito aggiornamenti. Il controllo ado-perando questa guida avviene quindi con un approccio a a scatola nera non conoscendo il codice ma semplicemente interagendo con il vostro software e verificando come si presenta visivamente e come si comporta.

    METODI O FUNZIONI NON PUBBLICHE Unaltra motivazione, meno frequente della precedente ma abbastanza comune per chi alle prime mani con lo sviluppo di un software, quella dovuta al fatto che il proprio appli-cativo non rispetta quel dogma di Apple che impone di non adoperare funzioni, metodi, e classi non disponibili ufficialmente nellSDK. Questa operazione di controllo viene effettuata da Apple per evitare alcuni problemi: si pensi al caso in cui queste funzionalit nascoste subiscano cambi, come avviene comunemen-te in una versione successiva dellSDK, ci porterebbe ad un comportamento diverso del proprio applicativo che in genere lo porta ad un crash. Bisogna capire che se queste funzio-nalit sono nascoste ci sono diversi motivi alla base, certo alcuni sono pienamente plausibili, altri meno, e spesso obbligano a trovare solu-zioni meno efficaci: si pensi al piacevole effetto grafico adoperato dagli sviluppatori Apple per sfogliare gli iBook, questo non disponibile pubblicamente, al momento presente solo quello verticale, (curlUP, curlDown e parziale)

    NOTA

    GESTIONE DELLACCOUNT

    Questo il link per la creazione dellaccount,

    per scaricare lSDK e consultare la

    documentazione previa registrazione gratuita:

    http://developer.apple.com/iphone/

  • iPhone - La tua pr ima app 14

    iPhone - La tua prima app Guadagnare con lo sviluppo per iPhone MOBILEGuadagnare con lo sviluppo per iPhone

    Agosto 2010 / 65 http://www.ioprogrammo.it

    e le soluzioni alternative disponibili in rete non sono perfettamente speculari. Lo sviluppatore meno pratico in genere incappa in questo pro-blema quando cerca una soluzione software per il proprio applicativo ed effettua il tipi-co copia ed incolla incondizionato da risorse disponibili online, in genere forum o blog. Laccesso a queste risorse nascoste possibile perch il linguaggio Objective-C non consen-te di nascondere completamente funzioni e campi, cos alcuni sviluppatori, adoperando interrogazioni tramite codici opportunamente realizzati, hanno avuto accesso ad una lista completa di tutte le informazioni pubbliche e non di ogni classe e struttura dati. Il compila-tore invocato da XCode (GCC o LLVM) prov-vede ad avvisare sempre tramite un warning se si effettuano operazioni non consentire, il messaggio di avviso in genere contiene il mes-saggio could not , potrebbe essere ad esempio respond to selector, ad indicare che si invoca un metodo non esposto pubblicamente. Le regola di non adoperare API private inoltre presente nelliPhone Developer Program License Agreement, un documento che deve essere accettato quando si diviene sviluppatori iPhone e si acquista la licenza per pubblicare:

    3.3.1 Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.

    Questo estratto non lascia quindi spazio ad altre interpretazioni. Per qualunque dubbio basta controllare se nella documentazione uffi-ciale il campo, la propriet, la funzione o il metodo adoperato sono presenti.

    TECNOLOGIE NON UFFICIALI Prima dellannuncio ufficiale delliOS4, si erano aperti diversi spiragli per quegli sviluppatori che preferivano adoperare altri linguaggi inve-ce dellObjective-C, per motivi economici (non richiedono spesso lacquisto di un computer Mac), o semplicemente perch preferivano uti-lizzare le conoscenze gi possedute. I due atto-ri pi importanti sono stati ActionScript (utiliz-zando il nuovo Adobe Flash CS5 Professional) e .NET con MonoTouch, strumento basato su Mono. Apple ha deciso di impedire lutilizzo di queste tecnologie sempre allinterno della sezione 3.3.1 delliPhone Developer Program License Agreement: Applications must be originally written in

    Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compa-tibility layer or tool are prohibited).

    Anche qui non ci sono tante vie da percorrere, C, C++, Objective-C o JavaScript sono i lin-guaggi che Apple richiede vengano utilizzati. importante precisare che questa limitazione non impedisce di adoperare alcuna libreria disponibile in rete realizzate nei linguaggi sud-detti, a patto ovviamente che non acceda a API non documentate. Il rischio, adoperando una tecnologia diversa da quella richiesta da Apple, potrebbe comportare la non approva-zione dellapplicazione, rendendo vano tutto il lavoro svolto. Il consiglio quello di evitare vie alternati-ve e impegnarsi nello studio dellObjective-C, approfondendo in modo dettagliato ogni aspetto inerente questo potente linguaggio di programmazione.

    VALIDATE BUILD PROJECT: UNA SICUREZZA IN PIPer ridurre al minimo le possibilit di un rifiuto in fase di invio stato introdotta allinterno di XCode 3.2 una nuova funzionalit chiamata Validate Build Product, attivabile tramite un ckeckbox disponibile allinterno della confi-gurazione di Build del progetto; selezionando tale campo si richiede che vengano effettuati molti dei check che i valutatori Apple effet-tuano quando ricevono unapplicazione, non un controllo che garantisce che il proprio software sia esente da problemi, ma riduce al minimo tali eventualit. Un esempio di avver-timento che tale tool fornisce quello dovu-to ad un errore nelle dimensioni delle icone inserite nel progetto, che porterebbero ad un rifiuto automatico del software, ancora prima di una qualunque valutazione da parte dei tecnici Apple. Abilitare tale campo quin-di conveniente in qualunque progetto, anche se incrementa di qualche secondo il tempo necessario per la compilazione. Nel prossimo articolo mostreremo come creare i certificati, li adopereremo per firmare il nostro applica-tivo, pubblicheremo la nostra applicazione su Apple Store e adopereremo iTunes Connect per visualizzare i guadagni e i download ottenuti.

    Andrea Leganza

    LAUTORE

    Andrea Leganza, laureato in Ingegneria Informatica, certificato Adobe ACE - Adobe Flex 3 and AIR Certified Expert, EUCIP Core, Sun Certified Programmer for JAVA 6, istruttore di nuoto FIN di 2 Livello, attualmente impegnato in numerosi progetti multimediali, anche con iPhone e iPad, con alcune societ nazio-nali ed internazionali, contattabile su [email protected] o su www.leganza.it.

  • 15 iPhone - La tua pr ima app

    iPhone - La tua prima appGuadagnare con lo sviluppo per iPhoneMOBILE Guadagnare con lo sviluppo per iPhone

    http://www.ioprogrammo.it 48 / Settembre 2010

    Nellarticolo precedente abbiamo spiegato le fasi iniziali necessarie per avviarsi verso il rilascio della propria applicazione su Apple Store, abbiamo infatti acquistato la licenza come singolo sviluppatore, per poi passare ad un controllo sul codice adoperando il documento chiamato HIG, Human Interface Guideline, che permette con le sue linee guida di ridurre al minimo i possibili ri uti da parte del team di valutazione interno di Apple. In questa seconda ed ultima parte e ettueremo gli ultimi passi che ci consentiranno di pubblicare su Apple Store.

    LE OPERAZIONI DA SEGUIREI passi che sono stati descritti nellarticolo precedente sono i seguenti:1. acquisto di una licenza annuale come sviluppatore2. veri ca che lapplicativo rispecchi le regole detta-te nel documento chiamato iPhone/iPad Human Interface Guidelines

    3. veri ca che lapplicativo non utilizzi API non pub-bliche e framework non u ciali

    Quelli che ancora dobbiamo completare sono:1. creazione di un sistema di chiavi necessarie per r-mare il proprio applicativo sul Provisioning Portal;

    2. Creazione di un le di Entitlements in XCode;3. Creazione della con gurazione di pubblicazione (che chiameremo Production) in XCode;

    4. Modi ca delle opzioni di compilazione del target del progetto;

    5. Compilazione e packaging;6. Pubblicazione su iTunes Connect

    Purtroppo non ci possibile mostrare le immagi-ni delle fasi necessarie per la pubblicazione per le limitazioni imposte da Apple, prevalentemente per quanto riguarda il portale online, cercheremo quindi di descrivere i singoli passi con il massimo in detta-glio.

    LA RICHIESTADELLE CHIAVIFirmare digitalmente il proprio applicativo prima dellin-vio ad Apple una condizione necessariaperch questo venga approvato; la procedura struttura-ta nella sequenza di tre semplici passi:1. Creazione del Certi cato di Distribuzione2. Creazione di un App ID di tipo generico (*) o spe-ci co (ad esempio: com.website.appname)

    3. Creazione di un Provisioning Profile di Distribuzione per App Store.

    Prima di tutto una buona abitudine chiudere completa-mente la suite di XCode per evitare problemi di mancata sincronizzazione con i certi cati che andremo ad instal-lare: questo uno degli errori pi frequenti che spesso bloccano proprio nelle fasi nali uno sviluppatore alle prime armi. Il primo passo, quello di creazione del cer-ti cato, richiede che si invii ad Apple un le identi cato nella documentazione come Certi cate Signing Request. Per creare tale documento su ciente e ettuare alcuni passi allinterno dellapplicazione chiamata Keychain Access (Accesso Portachiavi nella versione italiana

    REQUISITI

    Conoscenze richiesteObjective-C

    SoftwareMac OS 10.5.x o superiore (10.6.x per lSDK 3.x)

    Impegno

    Tempo di realizzazione

    LA NOSTRA APP SULLAPPLE STORE PUBBLICARE UNAPPLICAZIONE SU APPLE STORE ADOPERANDO I PORTALI IPHONE PROVISIONING PORTAL E ITUNES CONNECT: SCOPRIAMO COME FARLO AL MEGLIO, SEGUENDO TUTTO IL PERCORSO CHE ARRIVA FINO ALLA PUBBLICAZIONE

    Fig. 1: Le diverse fasi necessarie a seconda del testingo della pubblicazione/ad-hoc distribution

    SECONDA PARTE

  • iPhone - La tua pr ima app 16

    iPhone - La tua prima app Guadagnare con lo sviluppo per iPhone MOBILEGuadagnare con lo sviluppo per iPhone

    Settembre 2010 / 49 http://www.ioprogrammo.it

    di Mac OS X) installato nella sottocartella Utility delle Applicazioni. Dopo lavvio dellapplicativo e ettuiamo la richiesta di un certi cato verso una CA (Certi cation Authority).

    Nel campo di testo dedicato allemail necessario inseri-re quella utilizzata durante la fase di registrazione come sviluppatore iPhone, anche nel caso di quello dedicato al nome del richiedente deve combaciare con le creden-ziali inserite durante la creazione del pro lo. Il campo CA Email Address deve essere lasciato vuoto. Si dovr poi selezionare il radio button Save to disk e il checkbox Let me specify key pair information per farlo sul proprio computer allo scopo di inviarlo successivamente attra-verso il Provisioning Portal. La dimensione della chiave deve essere di 2048 bits e lalgoritmo RSA.

    PROVISIONING PORTALAbbiamo ora il le che ci consentir di richiede la rma necessaria per i nostri applicativi; accediamo alliPho-ne Dev Center visitando il seguente indirizzo , http://developer.apple.com/iphone/ per poi seguire il link presente sul lato destro chiamato iPhone Provisioning Portal (link diretto http://developer.apple.com/ipho-ne/manage/overview/index.action). La guida chia-mata iPhone Developer Program User Guide la fonte migliore per chiarire qualunque dubbio abbiate, ed scaricabile dal link presente nel lato destro della home-page del Provisioning Portal. Entriamo nella sezione chiamata Certi cates, selezioniamo il tab posizionato in alto nella pagina chiamato Distribution e clicchiamo

    sul pulsante Add Certi cate. Inviamo in ne il le che abbiamo creato adoperando il form. Dopo un periodo di tempo che pu variare da alcuni secondi a diversi minuti a seconda del carico dei server Apple (durante il quale lo stato del certi cato pending), troveremo allinterno della pagina il certi cato con lo stato di issued (baster aggiornare la pagina per veri care lapprovazione) e associato ad una data di scadenza. Clicchiamo sul tasto download. A seconda del browser adoperato, il certi cato verr installato automaticamente allinterno di Keychain Access, oppure si dovr fare doppio click sul le. impor-tante salvare una copia di backup di questo certi cato perch, in caso di formattazioni o crash del computer, lo si potrebbe perdere. Ora dobbiamo creare un App ID di tipo generale, identi cato con il simbolo di asterisco: per fare ci rechiamoci nella sezione App IDs e selezioniamo il bottone presente in alto nella pagina chiamato New App ID. Ci troviamo ora allinterno di una pagina con-tenente tre campi: nel primo inseriremo la descrizione del certi cato, questa ci consentir di identi care veloce-mente allinterno del Portal tale identi cativo; impostia-mo il campo Bundle Seed ID al valore Generate New, nel caso non lo fosse gi; lultimo campo, Bundle Identi er, deve contenere il carattere *. Apriamo una parentesi su questultima con gurazione: adoperando lasterisco, si crea un app id generico che pu essere utilizzato, in siner-gia con il certi cato e il provisioning pro le, per rmare qualunque applicazione ma inibisce dalla possibilit di adoperare le Apple Push Noti cation, lIn App Purchase, o il Game Center, per tale motivo se una o pi di queste funzionalit fosse richiesta sar obbligatorio creare un App ID speci co per la singola applicazione, adoperando uno o pi termini che identi chino univocamente lapp. Apple consiglia in questi casi di adoperare il reverse domain name-style: una stringa contenente una serie di valor i seguiti da punto. Esempi di reverse domain potrebbero essere cognome.nome.nomeapplicazione, oppure it.sitoweb.nomeapplicazione. Torniamo alla cre-azione dellApp ID generico, al termine della creazione troveremo nellelenco il nostro App ID identi cato da una sequenza di dieci caratteri seguiti da un punto e un asterisco (xxxxxxxxxx.*); la stringa casuale viene generata automaticamente.Entriamo nella sezione chiamata Provisioning, selezio-niamo il tab in alto chiamato Distribution e clicchiamo sul tasto New Pro le. Selezioniamo quindi App Store quale distribution method, associamo un nome a tale pro lo, e selezioniamo come App ID quello creato ado-perando lasterisco. Confermiamo, e ricarichiamo la pagina nch non risulter nello stato di Active. Ogni riga della pagina contente i pro li presenta il nome e lAPP ID associato, che questo caso sar uguale al nostro xxxxxxxxxx.*. Scarichiamo in ne il pro lo appena creato e e ettuiamo doppio clic per installarlo nel computer. Sia il certi cato che il pro lo di distribuzione hanno un ter-mine di scadenza, dopo il quale necessario e ettuarne il rinnovo, operazione che consiste semplicemente nel pre-mere il tasto chiamato renew posizionato alla destra delle

    Fig. 2: Le due schermate della richiesta del certificato

    Fig. 4: In questa schermata si inseriscono tutte le informa-zioni relative allutente che intende acquistare la licenza

    NOTA

    INDIRIZZI DA RICORDARE Per lacquisto della licenza uesto necessario collegarsi allindirizzo: http://developer.apple.com/programs/iphone un passo obbligato per diventare sviluppatore iPhone.Questo lindirizzo di iTunes Connect: https://itunesconnect.apple.comQui trovate liPhone Provisioning Portal: http://developer.apple.com/iphone/manage/overview/index.action

  • 17 iPhone - La tua pr ima app

    iPhone - La tua prima appGuadagnare con lo sviluppo per iPhoneMOBILE Guadagnare con lo sviluppo per iPhone

    http://www.ioprogrammo.it 50 / Settembre 2010

    rispettive voci. Dopo tale rinnovo su ciente installare nuovamente i certi cati nel proprio computer per conti-nuare a lavorare normalmente.

    I CERTIFICATI NECESSARI PER IL TESTINGPrima di concludere questa fase, che si rivela general-mente la pi problematica per molti sviluppatori, trat-tiamo anche di come utilizzare il Provisiong Portal per creare dei certi cati utilizzabili per testare sul proprio dispositivo sico il software/gioco che avete realizza-to. Per installare la versione di sviluppo del proprio software su qualunque iPhone/iPad/iPod Touch necessario:1. Creare un certi cato per lo sviluppo (tab Development, invece di Distribution) seguendo gli stessi passi e ettuati per creare quello di distri-buzione adoperando la stessa Certi cate Signing Request creata per la distribuzione).

    2. Registrare uno o pi dispositivi, inserendo il codi-ce chiamato UDID;

    3. Creare un provisioning pro le per lo sviluppo (tab Development, invece di Distribution) seguendo gli stessi passi e ettuati per creare quello di distri-buzione avendo cura di selezionare il certi cato, lApp ID e i dispositivi che verranno adoperati.

    Quando si creano i certi cati di provisioning conviene sempre inserire nel nome un codice per indicare se di sviluppo o di distribuzione, in questultimo caso conviene inserire anche una stringa se per Apple Store o per la AdHocDistribution. In tal modo non si avranno dubbi su quale selezionare allinterno di XCode. Un serie di Provisioning pro le potrebbe esse-re la seguente: LeganzaDevelopment (per il testing) LeganzaAdhocDistribrution (per la distribuzione adhoc)

    LeganzaAppStoreDistribution (per la pubblica-zione su Apple Store)

    Ribadiamo la buona regola di salvare tutti questi le in una o pi cartelle, possibilmente su diverse peri-feriche per avere una maggiore sicurezza in caso di danni hardware. Dopo avere creato e installato un nuovo certi cato per lo sviluppo, necessario inseri-re almeno un identi cativo univoco chiamato UDID (Unique Device ID) associato al dispositivo che si utilizzer allinterno della sezione chiamata Devices: per ottenere questa stringa alfanumerica su cien-te adoperare il tool chiamato Organizer, fornito con XCode (Window->Organizer), selezionare il dispositi-vo collegato nellelenco presente nella colonna sinistra e copiare ( un testo selezionabile) la stringa associata alla voce Identi er. Tramite iTunes (sia Mac OS che Windows) basta selezionare il dispositivo collegato

    e, dopo aver cliccato sul campo Identi er presente sotto la stringa Software Version premere la sequenza mela+ C (CTRL+C), Questa seconda modalit utile nel caso si desideri e ettuare testing su un dispositivo di un altro utente perch consente di ottenere lUDID del destinatario senza richiedere che installi la suite XCode. Nel caso comparisse invece di Identi er la voce Serial Number baster cliccare una o pi volte su tale riga per visualizzare lidenti er. Una terza solu-zione per ottenere un UDID consiste nellinstallare una tra le numerose applicazioni gratuite disponibili su Apple Store che consentono di inviare tale codice ad un indirizzo di posta elettronica.Inseriamo un nuovo dispositivo cliccando su Add Devices compilando il primo campo con un nome a nostra scelta che identi chi lhardware adoperato (Nomeutente iPhone, Nomeutente iPad etc), e il secon-do con lUDID appena copiato.Dopo aver inserito uno o pi dispositivi neces-sario creare un nuovo provisioning pro le di tipo Development e selezionare i dispositivi associati: possibile aggiungere o rimuovere successivamen-te quelli autorizzati, ovviamente provvedendo poi a sostituire il vecchio provisioning pro le installato nel proprio computer con la nuova versione aggiornata. Solo allinterno del Provisiong Portal possibile cono-scere in dettaglio quali dispositivi sono abilitati perch allinterno del tool Organizer verr visualizzato solo un valore numerico pari a quanti sono con gurati nel pro lo. Nel caso lo desideriate, possibile e ettuare la Ad-Hoc distribution, la quale consente di distribuire ad altri utenti il vostro applicativo la versione nale, senza passare per Apple Store. In pratica si rma unapplicazione con le stesse procedure necessarie per inviarlo allo Store, utilizzando per un pro lo di provisiong diverso. Si invier il software insieme a tale pro lo allutente che potr cos testarlo. I passi sono i seguenti: 1. Creare un Provisiong Pro le di tipo Distribution, selezionando la voce Ad Hoc, utilizzando come certi cato quello di Distribuzione (lo stesso per pubblicare su Apple Store), e abilitando i disposi-tivi su cui verr installato;

    2. Firmare la vostra applicazione adoperando que-sto certi cato;

    NOTA

    PUNTODI PARTENZA

    Un porto sicuro per iniziare lesplorazione dello svilup-po iPhone: http://develo-

    per.apple.com/iphone/ Qui potete creare il vostro account, scaricare lSDK e consultare la documenta-zione previa registrazione

    gratuita.

    Fig. 3: La posizione dellUDID in iTunes (sopra) e Organizer (sotto)

  • iPhone - La tua pr ima app 18

    iPhone - La tua prima app Guadagnare con lo sviluppo per iPhone MOBILEGuadagnare con lo sviluppo per iPhone

    Settembre 2010 / 51 http://www.ioprogrammo.it

    3. Inviare Provisioning Pro le e lapplicazione allutente via e-mail/link web;

    4. Installare entrambi i le allinterno di iTunes tra-scinandoli nellarea delle applicazioni scaricate;

    5. Sincronizzare il dispositivo.

    Il limite della Ad Hoc Distribution consiste nel fatto che ha una durata limitata, non quindi unalternativa ma serve per testing o per fare pubblicit distribuendo ad alcuni partner una versione a tempo del software, in genere prima del rilascio. Al momento la durata sei mesi, dopo i quali necessario aggiornare il pro lo (renew) e inviarlo di nuovo allutente per farlo instal-lare nel telefono. Siamo nalmente giunti allultimo passo da e ettuare allinterno del provisoning portal, ora dobbiamo tornare ad XCode per confezionare il nostro applicativo per poi accedere alla sezione Itunes Connect per inviarlo ad Apple.

    LUTILITY ORGANIZERDopo la creazione e linstallazione dei vari certi cati (che siano di testing o di distribuzione) possibile avvia-re di nuovo XCode. Organizer una utility accessibile dal menu Window di XCode, e rappresenta uno degli strumenti pi utile per e ettuare le pi comuni opera-zioni richieste da uno sviluppatore, infatti possibile: Visualizzare i dispositivi collegati Ottenere lUDID dei dispositivi Ripristinare il sistema operativo a una versione precedente

    Installare (anche con il trascinamento) o cancel-lare i pro li di sviluppo o distribution Ad-Hoc

    Installare (anche con il trascinamento) o can-cellare manualmente i propri applicativi dopo la compilazione di XCode;

    Visualizzare i le temporanei creati dal proprio software

    Visualizzare la console dei messaggi del termina-le selezionato (il log del sistema operativo)

    Scaricare i crash delle applicazioni E ettuare screenshot del dispositvo

    Appena collegato un dispositivo, e avendo accettando la richiesta di abilitazione allo sviluppo potremo trasci-nare nel campo Provisioning i vari pro li (di sviluppo o ad-hoc) e subito dopo trascinare lapplicazione, ovvia-mente associata a tali pro li in fase di compilazione allinterno di XCode.

    LA CONFIGURAZIONE PER LA PUBBLICAZIONECreiamo un nuovo le dal menu File-> New File, sele-zioniamo la voce Code Signing e sulla destra la voce Entitlements, il nome del le sar Entitlments.plist,

    nelle versioni precedenti di XCode, cera solo un valo-re (get-task-allow da impostare manualmente a false), ora un le pi complesso, richiesto in fase di invio ad Apple. Se non stato fatto in precedenza, necessario creare un le di tipo PNG che verr utilizzato come icona dellapplizazione, a seconda del target (iPhone e iPod Touch

  • 19 iPhone - La tua pr ima app

    iPhone - La tua prima appGuadagnare con lo sviluppo per iPhoneMOBILE Guadagnare con lo sviluppo per iPhone

    http://www.ioprogrammo.it 52 / Settembre 2010

    creer un le con estensione .zip. In caso di errori in fase di compilazione (segnalati dallicona rossa pre-sente nellangolo in basso della nestra delleditor) nella maggior parte dei casi saranno dovuti a una discrepanza tra il pro lo inserito nel Target del pro-getto e la con gurazione del progetto. Per il testing e lAd-Hoc Distribution basta semplicemente cambiare provisionig pro le prima della compilazione.

    ITUNES CONNECTPrima di accedere ad iTunes connect consigliabile creare delle immagini perch richieste da Apple: uno o pi screenshot dellapplicativo (adoperando ad esempio Organizer durante la fase di testing sul dispositivo, oppure un programma di cattura dello schermo se si preferisce il simulatore) facendo attenzione a rispettare le dimensioni richieste. Per iPad la massima 1024*768 oppure 768/1024, per iPhone

  • iPhone - La tua pr ima app 20

    iPhone - La tua prima app Timer e suoni: realizziamo un progetto completo

    UNA SVEGLIA DIGITALE PER IPHONEIN QUESTO ARTICOLO MOSTRIAMO COME REALIZZARE UNA SVEGLIA DIGITALE CHE CI AVVISER DI IMPEGNI E SCADENZE IMMINENTI. SAR LOCCASIONE DI APPROFONDIRE I CONCETTI LEGATI ALLA GESTIONE DELLINTERFACCIA E DEL TIMER

    In questo articolo mostreremo come realizza-re una sveglia digitale. Grazie a questo pro-getto avremo modo di introdurre alcune clas-si di estrema utilit: NSTimer, fornita dal fra-mework Foundation, che insieme a UIKit rappre-senta le fondamenta di tutte le applicazioni periPhone, e AVAudioPlayer, presente nel frameworkAVFoundation, il cui scopo consentirelesecuzione di brani audio di qualunquedimensione. Poich, come risaputo, non per-

    messo nelliPhone mantenere unapplicazionein background, si potr utilizzare questa funzio-nalit di sveglia solo quando la nostra applica-zione effettivamente in esecuzione.

    IL TIPO DI PROGETTOPer realizzare questo software utilizzeremo unnuovo tipo di progetto fornito da XCode chiama-to Utility Application: gli applicativi che vengonoidentificati con questo termine sono costituiti dadue UIViewController contenenti una singolaUIView ciascuno, che si alternano in base allapressione di un preciso tasto. Il viewcontrollerprincipale viene chiamato automaticamenteMainViewController. Il passaggio dalluna a laltra schermata avvienecon la pressione del pulsante i nel MainView, econ lutilizzo di quello con label done, posiziona-to in alto a sinistra nella barra di navigazione diFlipsideViewController. Il sistema utilizzato pereffettuare lo switch relativamente complesso enon ne parleremo in questo articolo. Essendo laterza serie di articoli prenderemo per scontatetutte le pratiche necessarie per effettuare la crea-zione degli IBOutlet e per prelevare le informazio-ni da tali oggetti. Lintera business logic verrimplementata allinterno del MainViewController, nel quale abbiamo accesso anche aicontenuti del FlipsideViewController.

    IL COMPONENTEUIDATEPICKERInserendo un componente del tipo UIDatePickerallinterno della nostra interfaccia grafica, nelFlipsideViewController, forniremo allutente lapossibilit di selezionare una data, con una pre-cisione a nostra discrezione; in questo casoimpostiamo, tramite Interface Builder, il formatocompleto (giorno, mese, anno, ore, minuti) set-tando mode al valore Date and Time, la lingua

    MOBILE Timer e suoni: realizziamo un progetto completo

    ht tp ://www. ioprogrammo. i t

    G 40 /Febbraio 2010

    CD WEBsveglia.zip

    cdrom.ioprogrammo.it

    Conoscenze richiesteOOP

    SoftwareMacOS X 10.5.4 osuperiore, XCode

    Impegno

    Tempo di realizzazione

    REQUISITI

    Fig. 1: Al termine del progetto avremo realizzato unasveglia digitale

    040-045:088-093-corsi-xsl 29-12-2009 16:53 Pagina 40

  • 21 iPhone - La tua pr ima app

    iPhone - La tua prima appTimer e suoni: realizziamo un progetto completo

    ht tp ://www. ioprogrammo. i t Febbraio 2010/ 41 G

    Timer e suoni: realizziamo un progetto completo MOBILE

    italiana utilizzando il campo locale, e la precisio-ne, con il campo interval, ad 1 minuto.UIDatePicker fornisce un metodo per ottenere ladata selezionata, questa unistanza della classeNSDate e, quando torneremo al MainView prov-vederemo a memorizzarla in una cartelladelliPhone, ed utilizzarla per verificare selallarme dovr essere eseguito.

    CONTROLLO NSTIMERUn timer un sistema che permette di cadenza-re lesecuzione di un metodo con precisi inter-valli; ogni timer viene eseguito in un threaddistinto. Attenzione, un NSTimer non garantisceche lesecuzione del metodo associato avvengasempre in un preciso istante, ma che avverr inun istante pari o successivo a quello desiderato,questa limitazione dovuta al fatto che, trovan-doci in un ambiente multithread e multiprocess,dovremo condividere le risorse hardware conaltri processi in esecuzione. In genere ci avvieneutilizzando uno dei cosiddetti algoritmi di sche-duling, i quali provvedono a fornire in manieraciclica sufficiente tempo di calcolo sulla CPU atutti i processi che ne facciano richiesta; potreb-be capitare quindi che, quando il nostro timer siain procinto di scadere, avvenga un evento fuoridal nostro controllo che interrompa o rallentilesecuzione del nostro software per alcuni milli-secondi, impedendogli di effettuare in tempolesecuzione del metodo. La precisione dichiara-ta di circa 50/100 millisecondi, ma comunquenon garantita per le motivazioni appena citate.

    NSTimer *timer = [NSTimer

    scheduledTimerWithTimeInterval: 1

    target: self

    selector: @selector(handleTimer:)

    userInfo: nil

    repeats: YES];

    - (void) handleTimer: (NSTimer *)

    timer{ metodo invocato da NSTimer}

    Con questo codice abbiamo realizzato un timerche viene avviato ogni secondo (o nei millesimisuccessivi), che allo scadere dellintervallo ese-gue il metodo handleTimer e che si ripete allinfi-nito. Il metodo viene immediatamente avviatodopo la sua esecuzione e subisce un retain auto-matico. Quando, (e se), non avremo pi bisognodi questa istanza baster invocare su di essa ilmetodo invalidate, che provveder ad effettuaresu di essa un release automatico. Per il nostroscopo questo metodo dovr verificare se giuntoil momento per eseguire laudio dellallarme,operazione effettuabile semplicemente confron-

    tando la data attuale, ottenuta richiedendo ilvalore del campo date dalla classe NSDate, conquella prelevata dallUIDatePicker:

    - (void) handleTimer: (NSTimer *) timer {

    if ([alarmDate timeIntervalSinceNow]

  • iPhone - La tua pr ima app 22

    iPhone - La tua prima app Timer e suoni: realizziamo un progetto completoMOBILE Timer e suoni: realizziamo un progetto completo

    ht tp ://www. ioprogrammo. i tG 42 /Febbraio 2010

    re nel telefono. Per creare un path completocomprensivo del nome del file baster comporreuna stringa utilizzando la seguente procedura:

    NSString *archivePath = [[self

    applicationDocumentsDirectory]

    stringByAppendingPathComponent:@"sveglia.cfg"];

    Con questa riga abbiamo realizzato con estremasemplicit un path per un file chiamato sveg-lia.cfg che verr salvato e caricato quando richie-sto. Per verificare se il file sveglia.cfg esiste giallinterno della cartella Documents, bastersemplicemente utilizzare il seguente metodo,fileExistsAtPath, fornito dalla classe NSFile -Manager, il quale restituir true in caso affermati-vo, false in caso negativo:

    if ([[NSFileManager defaultManager] fileExistsAtPath:

    archivePath])

    {

    //il file esiste

    }

    else

    {

    //il file non esiste

    }

    Queste informazioni verranno utilizzate permemorizzare la data in cui la sveglia dovr esse-re avviata in modo da recuperare e utilizzare taleinformazione ad ogni avvio.

    AVAUDIOPLAYERAVFramework, (Audio Video FoundationFramework), un framework che consente di ese-guire e anche registrare brani audioAVAudioPlayer una delle classi fornite da talelibreria che consente lesecuzione di un singolofile audio (uno per istanza); AVAudioPlayer con-sente di mettere in pausa e interrompere unaudio, avere informazioni sulla sua durata e sullaposizione in cui al momento lesecuzione, con-sente infine di monitorare i vari livelli di volumeassunti dallaudio. Questa classe accetta tutti iformati supportati dalliPhone:

    AAC HE-AAC AMR (Adaptive Multi-Rate, a format for spee-ch)

    ALAC (Apple Lossless) iLBC (internet Low Bitrate Codec, another for-mat for speech)

    IMA4 (IMA/ADPCM) linear PCM (uncompressed)

    -law and a-law MP3 (MPEG-1 audio layer 3

    Il formato suggerito dalla documentazione 16-bit, little-endian, linear PCM di tipo CAF. possi-bile convertire i proprio file audio in questo for-mato utilizzando il tool chiamato afconvertaccessibile tramite la finestra di terminale di MacOS:

    /usr/bin/afconvert -f caff -d LEI16 {INPUT}{OUTPUT}

    Nel caso di esecuzione multipla viene consigliatolutilizzo del formato IMA/ADPCM (IMA4), mentreper lascolto di file singolarmente suggerisceMP3, ALAC (Apple Lossless), AAC, IMA4. Il primofile che viene eseguito accede direttamente allerisorse hardware, mentre i successivi sarannoeseguiti via software. Apple raccomanda nelladocumentazione di utilizzare questa classe pereseguire qualunque tipo di effetto audio, a menodi avere necessit di gestire in modo distinto icanali stereo, di avere una sincronizzazione pre-cisa, o quando si utilizzano file provenienti daflussi esterni, come avviene ad esempio per leweb radio. Apple fornisce numerosi frameworkoltre ad AVFramework:

    Media Player framework: per eseguire branimusicali, audio book, podcasts;

    Audio Toolbox framework: per eseguireaudio con precise necessit di sincronizzazio-ne, o analisi o conversione, incluso maggiorecontrollo sulle fasi di registrazione;

    Audio Unit framework: per utilizzare pluginaudio;

    OpenAL framework: viene consigliato comela migliore soluzione per eseguire e gestiremusiche per i videogiochi, e utilizza OpenAL1.1.

    Tornando ora a AVAudioPlayer, nel nostro proget-to utilizzeremo un loop audio, il tipico scandiredel tempo di un orologio a tempo, e un suonoche avviser dellallarme. Prima di effettuarequalunque operazione necessario aggiungereAVFoundation.framework tra i framework che uti-lizzer il progetto e importarlo allinterno diMainViewController (#import ). Il codice per eseguire un fileaudio relativamente breve: prima provvediamoa identificare il path completo della risorsa che ciinteressa, (un file mp3 in questo caso), poi cree-remo unistanza di AVAudioPlayer, imposteremo ilvolume, il numero di esecuzioni e lo avvieremo:

    NSString *path = [[NSBundle mainBundle]

    pathForResource:@"clock" ofType:@"mp3"];

    NOTA

    ULTERIORIAPPROFONDIMENTI

    Consultare ladocumentazione onlinedenominata Exception

    Programming Topics forCocoa per la gestione delle

    eccezioni e per lelencodelle eccezioni di default.

    040-045:088-093-corsi-xsl 29-12-2009 16:53 Pagina 42

  • 23 iPhone - La tua pr ima app

    iPhone - La tua prima appTimer e suoni: realizziamo un progetto completo

    ht tp ://www. ioprogrammo. i t Febbraio 2010/ 43 G

    Timer e suoni: realizziamo un progetto completo MOBILE

    AVAudioPlayer player = [[AVAudioPlayer alloc]

    initWithContentsOfURL:[NSURL fileURLWithPath:path]

    error:nil];

    player.volume = 0.4f;

    [player prepareToPlay];

    [player setNumberOfLoops:-1];

    [player play];

    AVAudioPlayer ha un costruttore che accetta unURL, (che in questo caso sar la posizione assun-ta nel nostro software dalla risorsa chiamataclock.mp3), e una variabile per memorizzare pos-sibili errori (in questo progetto la abbiamo igno-rata, impostandola a nil). Il campo volume unfloat il cui intervallo [0,1], dove con 0 si intendeil silenzio, mentre con 1 il massimo valore con-sentito; il metoto prepareToPlay memorizzalaudio in un buffer prima di avviare lesecuzionein modo da evitare interruzioni dovute al cachingdel file durante il play; setNumberOfLoops: puassumere un qualunque valore negativo per indi-care un loop infinito, 0 per una singola esecuzio-ne, i per (i+1) ripetizioni, inserendo 1 si avrannoquindi due avvii successivi del suono. Se volessi-mo monitorare quando un suono terminatobaster aggiungere il metodo audioPlayerDidFinishPlaying: allinterno della nostra classe,appartenente al protocollo AVAudioPlayerDelegate:

    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer

    *)player successfully:(BOOL)flag {

    //il suono terminato

    }

    GESTITE SITUAZIONIECCEZIONALIChi utilizza linguaggi di alto livello, come JAVA o.NET, ha utilizzato generalmente in maniera

    esaustiva quei costrutti che consentono di cattu-rare uno o pi errori generati da una non corret-ta esecuzione del proprio applicativo. Uneccezione il risultato di un comportamentoanomalo, software o hardware, che il program-matore dovrebbe gestire per evitare che il pro-prio applicativo vada in crash e venga terminato.Per sapere se un metodo o una classe generanouna o pi eccezioni necessario consultare ladocumentazione in linea. La sintassi necessariaper catturare queste eccezioni estremamentesemplice, basta inserire il codice che si vuolemonitorare allinterno di un blocco di parentesigraffe a cui si antepone @try; con @catch si deli-mita quella parte di codice che dovr gestire inmodo opportuno larrivo delleccezione, adesempio deallocando una risorsa, o cercando dirisolvere il problema; @finally invece un bloccoche viene sempre eseguito e che generalmenteviene adoperato per effettuare comuni operazio-ni di release e pulizia delle risorse utilizzate nelblocco @try. Poich il codice racchiuso da @final-ly viene sempre eseguito risulta estremamenteutile perch fornisce un unico punto in cui effet-tuare le tipiche operazioni di gestione delle risor-se, invece di doverle ripetere al termine di @try edi @catch. Esistono numerosi tipi di eccezioni,tutte istanze di NSException, che si distinguonoper il nome (il valore del campo name, di tipoNSString) che queste assumono. Oltre a quellepredefinite, ne esistono anche altre presenti inalcuni precisi contesti, e che sono comunquedescritte approfonditamente nella documenta-zione; incapperete allinizio molto spesso inNSRangeException, quando accederete a indiciinesistenti di strutture dati (problema che non sipresenta analizzandole utilizzando Enumeratorse Fast Enumerators in ambienti Thread Safe), eNSInvalidArgumentException, quando passereteparametri non validi ad un metodo.

    @try {

    //codice da monitorare

    }

    @catch (tipoeccezione *eccezione) {

    //nel caso avvenga uneccezione di tipo

    tipoeccezione viene gestita

    }

    @finally {

    //questo blocco di codice viene sempre eseguito

    }

    Nel caso di pi eccezioni si potranno inserirediversi blocchi @catch, in questo caso vieneprima analizzato se leccezione lanciata dentro@try una versione realizzata ad hoc dal pro-grammatore, di nome CustomException e in casonegativo viene confrontata con NSException:

    RIFERIMENTI WEBCreazione dell'account, perscaricare l'SDK econsultare ladocumentazione:http://developer.apple.com/iphone/

    NOTA

    Fig. 1: La procedura necessaria per importare il fra-mework

    040-045:088-093-corsi-xsl 29-12-2009 16:53 Pagina 43

  • iPhone - La tua pr ima app 24

    iPhone - La tua prima app Timer e suoni: realizziamo un progetto completoMOBILE Timer e suoni: realizziamo un progetto completo

    ht tp ://www. ioprogrammo. i t

    G 44 /Febbraio 2010

    @try {

    }

    @catch (CustomException *ce) {

    }

    @catch (NSException *ne) {

    }

    @finally {

    }

    Se si volesse gestire in un unico blocco @catchtutte le possibili eccezioni sufficiente cattu-rare quelle appartenenti alla classeNSException che, essendo la pi generica dacui derivano tutte le altre, viene sempre riscon-trata. Questa pratica molto comune, maspesso pi opportuno differenziare i tipi dieccezioni per avere un controllo pi specificodi queste situazioni. Realizziamo un sempliceblocco di codice in cui teniamo sotto controlloun metodo fornito dalla nostra classe cheaccetta come parametro un NSMutableArrayche non ha alcun elemento ( infatti stato ini-zializzato con capacit nulla);

    NSMutableArray *anArray = nil;

    array = [[NSMutableArray alloc]

    initWithCapacity:0];

    @try {

    [self metodo:anArray];

    }

    @catch (NSException *exception) {

    }

    @finally {

    [anArray release];

    }

    Nel caso in cui il metodo che abbiamo invoca-to lanci un qualunque tipo di eccezione siamoin grado di catturarlo e gestirlo come pi rite-niamo opportuno. Poich quando si presentauneccezione i vari blocchi @catch vengonoanalizzati in sequenza, si procede generalmen-te inserendo prima quelle eccezioni apparte-nenti a classi pi specifiche, per poi arrivarealle pi generiche, dove NSException rappre-senta la pi generica ( anche possibile utiliz-zare id come tipo di eccezione pi generale manon avrete probabilmente mai questa neces-sit): quando verr rilevata uneccezione nelblocco @try sar cura dellambiente di esecu-zione verificare se il primo @catch adatto,oppure se dovr procedere con il prossimo. Incaso non ne venga trovato almeno uno, taleeccezione verr inviata allistanza che contienequella dove avvenuto tale evento e, in casoneppure questa sia in grado di gestirlo, conti-nuer il suo tragitto fino ad un certo punto,

    identificabile con il contenitore principaleUIApplicationMain utilizzato allinterno dimain.m, dopo di che si verificher un crash delsoftware. Quando viene segnalato nella docu-mentazione in maniera esplicita chelinvocazione di un metodo pu lanciareuneccezione, sempre consigliato provvederea gestire tale evenienza. Nel caso non si deside-ri gestire uneccezione possibile rilanciarla,girarla alloggetto che contiene listanza in cuici troviamo, utilizzando @throw:

    @try {

    //codice che lancia uneccezione

    }

    @catch(NSException *e) {

    @throw; // rilancia leccezione

    }

    Anche in questo caso verr utilizzata la procedu-ra di ricerca progressiva di @catch in grado digestirla. Lutilizzo delle eccezioni dovrebbe essere ristret-to solo a questo preciso scopo: gestire comporta-menti anomali che richiedono un preciso inter-vento da parte dello sviluppatore, ma anchepossibile utilizzarle per rappresentare situazioninon anomale, come la pressione di alcunesequenze di tasti, che darebbero quindi inizio aduna precisa sequenza di eventi: tale comporta-mento, sebbene possibile, viene sconsigliato daApple. NSException corredato di un campo chiamatouserInfo, un NSDictionary nel quale possibileinserire qualunque tipo di informazione alloscopo di passare alcuni dati al @catch che prov-veder ad analizzarlo; tale utilizzo verr spiegatoin un altro articolo dove mostreremo come rea-lizzare eccezioni customizzate. Per concludere,pu risultare utile mostrare a schermo (in genereviene utilizzato un UIAlertView), o in un log, comenel prossimo esempio mostrato, la causa deller-rore e il tipo di eccezione, NSException, e conse-guentemente tutte le classi derivate, fornisce duecampi stringa proprio per questo scopo, reason ename:

    @catch(NSException *e) {

    //gestione eccezione

    NSLog (@EXCEPTION:%@

    (%@),e.reason,e.name);

    }

    LA CLASSE NSARCHIVERLa classe NSArchiver fornita da Cocoa ingrado di convertire in byte e da byte (in nume-

    NOTA

    ECCEZIONECon il termine eccezione

    si intende uncomportamento anomalo

    del proprio applicativo,generato da cause

    software o hardware; sempre consigliato gestirele eccezioni per evitare un

    crash.

    040-045:088-093-corsi-xsl 29-12-2009 16:53 Pagina 44

  • 25 iPhone - La tua pr ima app

    iPhone - La tua prima appTimer e suoni: realizziamo un progetto completo

    ht tp ://www. ioprogrammo. i t

    rosi linguaggi viene adoperato il termine seri-alizzare e deserializzare), istanze di oggetti,scalari, strutture, stringhe e array, ma non con-sente di effettuare questa operazione perunion, void *, puntatori a funzione e sequenzedi puntatori. Per quanto riguarda gli NSArray egli NSDictionary questi devono contenere solole strutture dati supportate per essere serializ-zate/deserializzare. La documentazione suf-ficientemente esplicita a riguardo:Only instances of NSArray, NSDictionary,NSString, NSDate, NSNumber, and NSData(and some of their subclasses) can be serialized.The contents of array and dictionary objectsmust also contain only objects of these fewclasses.Per chi non fosse pratico con tali concetti, que-ste operazioni permettono di memorizzare lostato di unistanza su un determinato file.Adoperando poi la deserializzazione possibi-le recuperare questo stato e riutilizzarlo perripristinare listanza nella stessa configurazio-ne precedente. Utilizziamo questa classe permemorizzare allinterno della memoria deltelefono la data impostata dallutente per lasveglia; perch questa procedura funzioni cor-rettamente necessario che la classe da cuideriva listanza su cui utilizziamo NSArchiversia conforme al protocollo chiamato NSCodingil quale richiede che vengano implementati iseguenti metodi:

    (void)encodeWithCoder:(NSCoder *)encoder (for-male)

    (id)initWithCoder:(NSCoder *)decoder

    Solo encodeWithCoder viene esplicitamenterichiesto, mentre initWithCoder, che provvedealla deserializzazione, opzionale. Nonmostreremo come realizzare il corpo di questimetodi perch la classe che dovremo memo-rizzare nel telefono, NSDate, gi conforme aquesto protocollo. Per capire se una classe sup-porta out of the box questa tecnica baster con-sultare la documentazione per verificare seNSCoding appare tra i protocolli supportati.Questa procedura pu essere utilizzata permemorizzare informazioni arbitrarie in manie-ra estremamente semplice, in un videogioco oin un applicativo, esentando dallobbligo dicreare delle proprie strutture dati, come filexml o di testo, per organizzare tali dati. Permemorizzare la data che lutente selezioneradoperando lUIDatePicker baster utilizzare ilmetodo della classe NSKEyedArchiver archiveRootObject: toFile: che consente di effettuare laserializzazione immediatamente. Questometodo restituisce true in caso di salvataggio

    completato, false altrimenti.

    NSString *archivePath = [[self

    applicationDocumentsDirectory]

    stringByAppendingPathComponent:@"sveglia.cfg"];

    NSString storeResult;

    if ([NSKeyedArchiver archiveRootObject:alarmDate

    toFile:archivePath])

    {

    storeResult = @"Configurazione salvata con

    successo.";

    }

    else

    {

    storeResult = @"Impossibile salvare il file!";

    }

    Come si pu vedere, salvare lo stato diunistanza allinterno di un file locale unoperazione estremamente semplice; riotte-nere invece la data allavvio dellapplicativocomporta lutilizzo di @try/@catch poich,come viene esplicitato dalla documentazione:This method raises an NSInvalidArgumentException if the file at path does not contain avalid archive. possibile evitare di utilizzarequesta pratica verificando prima lesistenzadel file utilizzando il metodo fileExistsAtPathfornito dalla classe NSFile Manager, mostratoin un precedente paragrafo.

    @try

    {

    if ((alarmDate = [NSKeyedUnarchiver

    unarchiveObjectWithFile:archivePath])){

    [alarmDate retain];

    ....

    }

    @catch (NSException * e)

    {

    //Ignoriamo l'eccezione di tipo

    NSInvalidArgumentException che viene lanciata nel

    caso sveglia.cfg non venga trovato

    }

    CONCLUSIONIIn questo articolo abbiamo introdotto nume-rosi argomenti interessanti che consentono direalizzare soluzioni anche molto complesse,giochi compresi. Il progetto annesso alla rivista completo e mostra come si integrano tuttiquesti concetti. Nei prossimi articoli continue-remo questo viaggio nelluniverso iPhone eObjective-C. Buona programmazione.

    Andrea Leganza

    Febbraio 2010/ 45 G

    Timer e suoni: realizziamo un progetto completo MOBILE

    LAUTORE

    Andrea LeganzaLaureato in IngegneriaInformatica, da oltre undecennio realizza soluzionimultimediali, e non, supiattaforme e con linguaggidiversi. Certificato AdobeACE - Adobe Flex 3 and AIRCertified Expert, e EUCIPCore, appassionato difotografia, linguagiapponese e istruttore dinuoto FIN, attualmenteimpegnato in numerosiprogetti multimediali,anche con iPhone, conalcune societ nazionali edinternazionali; contattabile [email protected] odirettamente sul sitowww.leganza.it.

    040-045:088-093-corsi-xsl 29-12-2009 16:53 Pagina 45

  • www.punto-informatico.it

    Apple ha aperto una nuova frontiera per la programmazione mobile. Lavvento di iPhone e di Apple Store ha dato modo agli sviluppatori, anche ai pi piccoli, di fare breccia nel mercato mondiale delle applicazioni per dispositivi mobile. Questo approfondimento tematico pensato per mettere lo sviluppatore in condizione di creare facilmente App per iPhone e pubblicarle su iTunes. La prima parte del testo una guida passo passo alla creazione di una web application completa per iPhone utilizzando il framework iWebKit. La seconda parte, invece, dedicata alla pubblicazione delle App su App Store, con una marcata attenzione al rispetto delle regole per non incorrere nello stop Jobs e per favorire le prospettive di business dello sviluppatore mobile. Il testo si chiude con un esempio di progetto pratico che guida il lettore alla creazione di unapplicazione pronta per iTunes.

    www.punto-informatico.it