{"id":3376,"date":"2010-06-01T09:30:56","date_gmt":"2010-06-01T07:30:56","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3376"},"modified":"2010-06-01T09:06:56","modified_gmt":"2010-06-01T07:06:56","slug":"ipad002-setup-di-una-universal-app-view-based","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/ipad002-setup-di-una-universal-app-view-based\/","title":{"rendered":"IPAD#002 &#8211; Setup di una &#8220;Universal App&#8221; view-based"},"content":{"rendered":"<p>Con questo tutorial vedremo come creare delle <strong>App universali<\/strong> (compatibili quindi sia con iPhone che con iPad) facendo uso di Interface Builder. Non nego che \u00e8 possibile fare il tutto anche via codice, ma per adesso eviteremo di utilizzare questo metodo per un semplice motivo: le funzioni che permettono di capire se stiamo lavorando su iPad o iPhone, per il momento, sono utilizzabili solo su iPad (sono state introdotte nel 3.2). Quindi rimanderemo questa trattazione a dopo l&#8217;uscita dell&#8217;OS 4 quando tutti potranno testare il tutorial senza avere un account da developer pagante.<!--more--><\/p>\n<h4>Creiamo il progetto e modifichiamone le propriet\u00e0<\/h4>\n<p>Come prima cosa creiamo un progetto direttamente dai uno dei template forniti da XCode. Io, per questo tutorial, ho utilizzato una &#8220;view-based application&#8221; per iPhone. Aprendo le risorse possiamo notare che ci sono stati creati tutti i file necessari per avere un&#8217;applicazione gi\u00e0 funzionante che, come gi\u00e0 saprete non fa altro che visualizzare una view vuota.<\/p>\n<p>In questo momento la nostra applicazione \u00e8 \u00a0progettata solo per iPhone, se vogliamo renderla universale dobbiamo specificarlo nelle Info del progetto. Facciamo quindi doppio click sull&#8217;icona nel progetto in <em>Groups &#038; Files<\/em> (l&#8217;icona che cerchiamo \u00e8 la prima).<\/p>\n<p>Ora nella tab <em>Build<\/em> cerchiamo una propriet\u00e0 chiamata <em>Targeted Device Family<\/em> e cambiamone il valore in <em>IPhone\/iPad<\/em>. Ricordiamoci di effettuare la modifica per tutte le configurazioni.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UA_IB_1.png\" alt=\"Settaggio della propriet\u00e0 per rendere l'applicazione universale\" width=\"576\" height=\"193\" \/><br \/>\n<\/center><\/p>\n<h4>Creiamo i file Nib necessari<\/h4>\n<p>Per ora nelle risorse sono presenti solamente due file Nib che rappresentano la window e la view che dobbiamo visualizzare sui dispositivi iPhone. Prima di andare a creare i due file relativi alla window e alla view da visualizzare su iPad modifichiamo i nomi in modo da poterle successivamente distinguere. Io per esempio aggiungo il suffissi <em>~iPhone<\/em> e <em>~iPad<\/em> alla fine del nome del file.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UI_IB_2.png\" alt=\"Modifichiamo i nomi dei file\" width=\"291\" height=\"130\" \/><br \/>\n<\/center><\/p>\n<p>Apriamo ora il file <em>MainWindow~iPhone.xib <\/em>e creiamone la versione per iPad.<br \/>\nPer prima cosa modifichiamo il nome del file <em>.nib<\/em> caricato dal view controller andando ad aggiungere il suffisso <em>~iPhone<\/em> alla propriet\u00e0 <em>NIB Name <\/em>del view controller.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UI_IB_3.png\" alt=\"Modifichiamo il file nb caricato\" width=\"486\" height=\"366\" \/><br \/>\n<\/center><\/p>\n<p>Selezioniamo ora <em>File -> Create iPad Version<\/em> per creare la versione iPad della nostra window.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UI_IB_4.png\" alt=\"Creazione della iPad version\" width=\"450\" height=\"390\" \/><br \/>\n<\/center><\/p>\n<p>Ci apparir\u00e0 ora la window versione iPad. Non dobbiamo far altro che modificare anche qui il file Nib caricato dal controller (aggiungendo questa volta il suffisso <em>~iPad<\/em>). Salviamo il file come <em>MainWindow~iPad.xib<\/em> e importiamolo nel progetto.<br \/>\nApriamo ora il file relativo alla view da visualizzare sull&#8217;iPhone e modifichiamo il colore di background rendendo la view, per esempio, arancione. Salviamo e con lo stesso procedimento spiegato prima creiamo la versione per iPad di questa view e diamo un colore di background differente, per esempio verde, e salviamo il file importandolo all&#8217;interno del nostro progetto.<br \/>\nA questo punto ci ritroviamo nel progetto sia i due file Nib versione iPhone che quelli della versione iPad.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UI_IB_5.png\" alt=\"Situzione finale\" width=\"290\" height=\"169\" \/><br \/>\n<\/center><\/p>\n<p>Abbiamo quasi finito. Prima di vedere il tutto funzionare nel simulatore, ci manca per\u00f2 un ultimo passaggio.<\/p>\n<h4>Modifica del file <em>Info.plist<\/em><\/h4>\n<p>Nulla di complicato. Dobbiamo solamente aprire il file <em>plist<\/em>, modificare una propriet\u00e0 e aggiungerne un&#8217;altra.<br \/>\nLa propriet\u00e0 che dobbiamo modificare \u00e8 quella relativa al file Nib caricato all&#8217;avvio dell&#8217;applicazione come potete notare voi stessi dobbiamo anche in questo caso limitarci ad aggiungere il suffisso <em>~iPhone<\/em>. La voce &#8220;<em>Main nib file base name&#8221;<\/em>, anche se non \u00e8 specificato, si riferisce a quando l&#8217;applicativo viene lanciato su iPhone.<br \/>\nCome avrete probabilmente intuito la propriet\u00e0 da aggiungere \u00e8 quella che indica il file Nib da utilizzare quando l&#8217;applicazione viene lanciata su iPad. Aggiungiamo una nuova voce al file plist mettendo come chiave &#8220;<em>Main nib file base name (iPad)&#8221; <\/em>mentre come valore <em>&#8220;MainWindow~iPad&#8221;<\/em>.<br \/>\nSe avete fatto tutto correttamente il file plist dovrebbe apparire esattamente come segue:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UI_IB_6.png\" alt=\"plist\" width=\"466\" height=\"231\" \/><br \/>\n<\/center><\/p>\n<p>Ora, lanciando l&#8217;applicazione su iPhone noterete che lo schermo \u00e8 arancione, mentre se la lanciate su iPad \u00e8 verde.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UI_IB_7.png\" alt=\"iPhone\" width=\"321\" height=\"618\" \/><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/UI_IB_8.png\" alt=\"iPad\" width=\"388\" height=\"513\" \/><br \/>\n<\/center><\/p>\n<p>A questo punto potete sbizzarrirvi come volete e creare le vostre applicazioni universali. Buon divertimento \ud83d\ude42<\/p>\n<p>Se avete bisogno di tutti i file del progetto li potete scaricare come sempre da <a href=\"http:\/\/code.google.com\/p\/devapptutorials\/downloads\/list\" target=\"_blank\">Google Code<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con questo tutorial vedremo come creare delle App universali (compatibili quindi sia con iPhone che con iPad)&#8230;<\/p>\n","protected":false},"author":181,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[98],"tags":[24,98,247,246,4,245,244],"class_list":["post-3376","post","type-post","status-publish","format-standard","hentry","category-ipad","tag-interface-builder","tag-ipad","tag-luca-di-franco","tag-programmare-ipad","tag-programmazione","tag-programmazione-ipad","tag-universal-app"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3376","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\/181"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3376"}],"version-history":[{"count":20,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3376\/revisions"}],"predecessor-version":[{"id":3577,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3376\/revisions\/3577"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3376"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}