{"id":2031,"date":"2010-02-02T18:38:44","date_gmt":"2010-02-02T17:38:44","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=2031"},"modified":"2010-02-23T14:54:37","modified_gmt":"2010-02-23T13:54:37","slug":"l010-introduzione-alle-applicazioni-universali-per-iphone-os-ipad","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/l010-introduzione-alle-applicazioni-universali-per-iphone-os-ipad\/","title":{"rendered":"L#010 &#8211; Introduzione alle Applicazioni Universali per iPhone OS &#8211; [iPad]"},"content":{"rendered":"<p>Con l&#8217;introduzione dell&#8217;iPad, l&#8217;iPhone SDK 3.2 supporta ora lo sviluppo di tre tipi di applicazioni: iPhone Apps, iPad Apps e Universal Apps.<\/p>\n<p><strong>iPhone Applications:<\/strong> Le iPhone app sono applicazioni ottimizzate per girare su iPhone e iPod Touch. Queste applicazioni possono essere avviate anche su iPad nella loro risoluzione originale o eventualmente possono essere impostate durante l&#8217;esecuzione in visualizzazione &#8220;raddoppiata&#8221; adatta al display pi\u00f9 grande del nuovo dispositivo Apple.<\/p>\n<p><strong>iPad Applications:<\/strong> iPhone SDK 3.2 supporta lo sviluppo di applicazioni per iPad ottimizzate per sfruttare i vantaggi offerti dalle nuove funzionalit\u00e0 del tablet Apple, queste applicazioni saranno per\u00f2 ovviamente compatibili solo con iPad.<\/p>\n<p><strong>Universal Applications:<\/strong> iPhone SDK 3.2 supporta infine lo sviluppo di applicazioni universali, compatibili con tutti i dispositivi su cui \u00e8 montato iPhone OS.<\/p>\n<p>Questo documento illustra le linee guida che dovremmo seguire per progettare applicazioni universali.<!--more--><\/p>\n<p>Un&#8217;universal app pu\u00f2 riconoscere su quale dispositivo sta girando l&#8217;applicazione stessa e predisporre automaticamente la miglior esperienza d&#8217;uso per quel dispositivo. Universal App correttamente progettate devono tener conto delle caratteristiche e delle funzionalit\u00e0 hardware di un&#8217;unico ipotetico dispositivo, ovvero bisogna utilizzare le sole caratteristiche presenti su tutti i dispositivi iPhone OS.<\/p>\n<p>Apple raccomanda a tutti gli sviluppatori iPhone OS di progettare le interfacce utente, di scrivere il codice e costruire le loro applicazioni come Universal Applications. Creare applicazioni universali rende la vita pi\u00f9 semplice a tutti.<\/p>\n<p>Agli sviluppatori in quanto avranno una sola applicazione da gestire nell&#8217;App Store, anzich\u00e8 pi\u00f9 versioni dello stesso programma e agli utenti in quanto le Universal App acquistate gireranno su tutti i loro dispositivi.<\/p>\n<p>Il supporto SDK per la creazione di Universal apps sar\u00e0 presto disponibile tra la documentazione ufficiale Apple, per iniziare, possiamo per\u00f2 comunque fare molto fin da subito!<\/p>\n<h4>Progettare Universal Apps<\/h4>\n<p>Se state pensando di ottimizzare una vostra applicazione iPhone esistente o di creare una nuova applicazione che sfrutti i vantaggi del nuovo iPad, dovrete considerare di progettare la vostra app come un&#8217;Universal app.<\/p>\n<p>Un giusto approccio alla progettazione di un&#8217;applicazione universale per iPhone OS \u00e8 quello di iniziare a pensare come l&#8217;interazione dell&#8217;utente possa essere separata dalla stesura del codice del programma.<br \/>\nLe classi dell&#8217;iPhone SDK e la logica del paradigma di programmazione model-view-controller (MVC) incoraggiano una netta separazione tra i dati del vostro programma e le viste utilizzate per rappresentarli.<\/p>\n<p>Il primo step nella creazione di Universal App \u00e8 quello di progettare l&#8217;interfaccia utente per ogni dispositivo, un design quindi per iPad e un&#8217;altro per iPhone\/iPod. La maggior parte del vostro lavoro di progettazione deve essere influenzato dalle funzionalit\u00e0 che volete mostrare in ognuno dei differenti form-factors.<\/p>\n<p>I seguenti sono alcuni esempi di caratteristiche su cui ragionare durante la progettazione di interfacce per iPad e iPhone\/iPod:<\/p>\n<table>\n<tr>\n<td>Orientamento<\/td>\n<td> Usate l&#8217;accelerometro. E&#8217; possibile farlo in qualunque applicazione per determinare l&#8217;orientamento di un dispositivo iPhone OS. Con questa funzionalit\u00e0 un&#8217;applicazione pu\u00f2 migliorare l&#8217;esperienza d&#8217;uso dell&#8217;utente alternando differenti layout, (in landscape o portrait) ottimizzati secondo l&#8217;orientamento corrente del device. Questa funzionalit\u00e0 \u00e8 supportata ad esempio da numerose applicazioni iPhone, come Mail, iPod e Foto. Inoltre, mentre non \u00e8 sempre desiderabile il supporto all&#8217;orientamento su di un&#8217;applicazione per iPhone, \u00e8 molto imporante che tutte le applicazioni che gireranno su iPad abbiano questo supporto.<\/td>\n<\/tr>\n<tr>\n<td>Layout<\/td>\n<td>Sfruttate il grande display dell&#8217;iPad per offrire agli utenti l&#8217;accesso a pi\u00f9 informazioni possibili in un unico luogo, per focalizzare l&#8217;attenzione sui contenuti che desidera l&#8217;utente e per offrire pi\u00f9 realismo e una grafica mozzafiato alle interfacce delle vostre applicazioni.<\/td>\n<\/tr>\n<tr>\n<td>Gesti<\/td>\n<td>Le dimensioni maggiori del display dell&#8217;iPad offrono una pi\u00f9 ampia variet\u00e0 di possibili comandi gestuali usabili nelle nostre applicazioni. Per esempio, \u00e8 pi\u00f9 facile che un utente possa effettuare un comando usando quattro dita su iPad che su iPhone o iPod touch. Un&#8217;applicazione universale ben progettata, per\u00f2, dovrebbe prevedere differenti comandi gestuali, in base al dispositivo su cui verr\u00e0 avviata l&#8217;applicazione stessa.<\/td>\n<\/tr>\n<tr>\n<td>Viste divise<\/td>\n<td>Una vista divisa (split view) \u00e8 una caratteristica offerta dal solo iPad che offre un nuovo modo ad un&#8217;applicazione di rappresentare le informazioni a video. E&#8217; importante condiserare attentamente come sfruttare i vantaggi offerti dalle split view, allo stesso modo occorre provvedere che gli utenti riescano ad accedere alle stesse informazioni quando avviano l&#8217;applicazione da iPhone o iPod Touch.<\/td>\n<\/tr>\n<tr>\n<td>Popovers<\/td>\n<td>Come per le Split View, i popovers rappresentano un nuovo modo per presentare le opzioni agli utenti. Un&#8217;universal app ben progettata offrir\u00e0 le stesse opzioni anche su iPhone e iPod Touch usando per questi, per\u00f2, le tecniche gi\u00e0 conosciute di progettazione di interfacce utente.<\/td>\n<\/tr>\n<tr>\n<td>Caratteristiche Hardware<\/td>\n<td>iPad, iPhone e iPod touch condividono molte delle stesse funzionalit\u00e0 hardware. Se per\u00f2 sfruttate una caratteristica hardware non disponibile in un&#8217;altro dispositivo, dovreste comunque garantire e trattare questa mancanza nel migliore dei modi possibile. Per esempio, un&#8217;applicazione che gira su iPad o iPod touch non dovrebbe presentare l&#8217;opzione di &#8220;scattare una foto&#8221; con la fotocamera, ma dobrebbe presentare la possibilit\u00e0 di scegliere un&#8217;immagine dalla propria libreria di foto.<\/td>\n<\/tr>\n<\/table>\n<h4>Stesura di codice in forma condizionale<\/h4>\n<p>Al fine di raggiungere i vostri obiettivi per una giusta progettazione di applicazioni universali, dovrete organizzare il vostro codice in modalit\u00e0 condizionale, per determinare, ad esempio, la disponibilit\u00e0 o meno di funzioni (dipendendi dal device usato) durante l&#8217;esecuzione del programma.<\/p>\n<p>La stesura di codice condizionale vi permetter\u00e0 di essere sicuri di caricare le giuste risorse disponibili e di usare le sole funzionalit\u00e0 supportate dal dispositivo per sfruttare adeguatamente l&#8217;hardware disponibile.<\/p>\n<p>Strutturate il vostro codice condizionale nel modo pi\u00f9 granulare possibile. Provate ad evitare di chiedervi quale sia il tipo di dispositivo o la versione del Sistema Operativo installato. Se avete la necessita di lavorare con un metodo, ad esempio, verificate l&#8217;esistenza di questo, piuttosto che chiedervi se siete in esecuzione su iPhone piuttosto che su iPad. Ragionare ad un livello pi\u00f9 basso permetter\u00e0 alle vostre app di ottenere automaticamente nuove funzionalit\u00e0 quando un metodo o una classe viene introdotta con un aggiornamento del sistema operativo. La vostra applicazione avr\u00e0 la nuova funzionalit\u00e0 senza aver dovuto necessariamente creare un aggiornamento.<\/p>\n<p>Questi sono alcuni elementi per cui potrebbe essere necessario strutturare il codice in forma condizionale:<\/p>\n<table>\n<tr>\n<td>Resources<\/td>\n<td><strong>File di Interface Builder (.NIB)<\/strong>. Nel vostro codice, dovrete prevedere il recupero delle informazioni che indicano su quale piattaforma si sta eseguendo l&#8217;applicazione e di conseguenza caricare le giuste risorse. Per esempio, per essere sicuri di presentare la giusta interfaccia utente nella vostra applicazione, potreste aver bisogno di due file .NIB per un&#8217;unica vista, una che contiene i controlli per la versione iPhone e l&#8217;altra per l&#8217;interfaccia utente che verr\u00e0 caricata su iPad. Il vostro codice deve verificare su quale dispositivo sta girando l&#8217;applicazione e quindi scegliere e caricare il giusto file NIB.<br \/>\n<strong>Grafica<\/strong>. Ovviamente anche qui vorrete molto probabilmente caricare risorse differenti in base al dispositivo utilizzato. Per esempio la grafica su iPad dovrebbe essere pi\u00f9 grande rispetto a quella per iPhone.<\/td>\n<\/tr>\n<tr>\n<td>Classi<\/td>\n<td>Alcune classi Cocoa Touch sono disponibili solo in alcuni dispositivi. Prima di utilizzare una classe, dovrete verificare se la classe stessa \u00e8 disponibile. Per esempio, iPhone OS 3.2 permette alle vostra app di condividere documenti con altre applicazioni. Questa caratteristica \u00e8 presente per\u00f2 solo su iPad. Il vostro codice deve verificare l&#8217;esistenza della classe UIDocumentInteractionController class usando NSClassFromString() che restituir\u00e0 un oggetto di classe valido. Se la classe esiste, il vostro codice potr\u00e0 usare questa classe e condividere il documento. Se non esiste, dovreste trovare un metodo per &#8220;girarci attorno&#8221; in modo che l&#8217;applicazione lavori correttamente anche sul dispositivo che non supporta la condivisione di documenti.<\/td>\n<\/tr>\n<tr>\n<td>Metodi e funzioni<\/td>\n<td>Alcuni dispositivi supportano diversi metodi e funzioni. Se state usando funzioni su un device che non esistono sugli altri, dovrete effettuare le opportune verifiche prima di chiamare questi metodi. La classe principale per la maggior parte degli oggetti Cocoa, NSObject, supporta la verifica in runtime della disponibilit\u00e0 dei metodi. I metodi <em>instancesRespondToSelector<\/em> e <em>respondsToSelector<\/em> vi permettono di determinare se un oggetto, o una sua superclasse, possiede il metodo che volete utilizzare nel dispositivo su cui state eseguendo l&#8217;applicazione.<\/td>\n<\/tr>\n<tr>\n<td>Nuove API nei Framework esistenti<\/td>\n<td>Nuove API aggiunte a framework esistenti lavorano allo stesso modo. Per esempio, UIgraphics su iPad aggiunge il supporto ai file PDF. In questo caso UIGraphics esiste in tutte le versione di iPhone OS, non dovrete quindi verificare il framework, ma le specifiche funzioni (in questo caso PDF) che vorrete usare.<\/td>\n<\/tr>\n<tr>\n<td>Funzionalit\u00e0 Hardware<\/td>\n<td>A volte \u00e8 necessario rilevare se un componente hardware \u00e8 disponibile. Dovrete usare la stessa metodologia usata per vedere se un metodo software o una funzione \u00e8 disponibile, per esempio, se state cercando di determinare se il dispositivo in cui si sta eseguendo l&#8217;applicazione ha una fotocamera, dovreste interrogare l&#8217;UIImagePickerController e la fonte UIImagePickerControllerSourceTypeCamera, e prendere poi la strada appropriata, a livello di programmazione, in base alla risposta che otterrete.<\/td>\n<\/tr>\n<\/table>\n<p>Creare un&#8217;Universal App dar\u00e0 ai vostri utenti la miglior esperienza possibile di utilizzo, non importa in che dispositivo girer\u00e0 la vostra applicazione. Render\u00e0 inoltre la gestione delle vostre applicazioni in App Store pi\u00f9 semplice possibile.<\/p>\n<p>Progettate bene, scrivete un buon codice in forma condizionale e creerete ottime Applicazioni!<\/p>\n<p>(Tradotto da documento ufficiale Apple &#8220;<em>Introducing Universal Applications for iPhone OS<\/em>&#8220;)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con l&#8217;introduzione dell&#8217;iPad, l&#8217;iPhone SDK 3.2 supporta ora lo sviluppo di tre tipi di applicazioni: iPhone Apps,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[9,98],"tags":[42,98,17],"class_list":["post-2031","post","type-post","status-publish","format-standard","hentry","category-guide-teoriche","category-ipad","tag-framework","tag-ipad","tag-teoria"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=2031"}],"version-history":[{"count":20,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2031\/revisions"}],"predecessor-version":[{"id":2194,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2031\/revisions\/2194"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=2031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=2031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=2031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}