{"id":7046,"date":"2011-06-13T12:03:22","date_gmt":"2011-06-13T10:03:22","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=7046"},"modified":"2011-06-13T12:03:22","modified_gmt":"2011-06-13T10:03:22","slug":"t095-creare-url-schemes-personalizzati-per-le-nostre-applicazioni-iphone-e-ipad","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t095-creare-url-schemes-personalizzati-per-le-nostre-applicazioni-iphone-e-ipad\/","title":{"rendered":"T#095 &#8211; Creare URL Schemes personalizzati per le nostre applicazioni iPhone e iPad"},"content":{"rendered":"<p>Ciao a tutti e benvenuti in questo nuovo appuntamento della nostra rubrica &#8220;Tutorial Pratici di programmazione iPhone e iPad&#8221;. Oggi voglio parlarvi di un argomento molto interessante e di cui si sente parlare davvero poco in giro: gli <strong>URL Schemes<\/strong>!<\/p>\n<p>Vi siete mai chiesti come fanno alcune applicazioni ad avere la funzione &#8220;Apri in Safari&#8221; usata ad esempio per aprire una pagina web nel browser nativo dei nostri iDevices o come fanno i link video ad aprire direttamente l&#8217;app YouTube o ancora come si fa a passare un indirizzo all&#8217;applicazione Mappe? In questo tutorial vedremo proprio com&#8217;\u00e8 possibile che tutto ci\u00f2 accada grazie agli URL Schemes, ma non solo: impareremo a creare il nostro URL Scheme personalizzato, che useremo per far aprire la nostra applicazione allo stesso modo degli esempi citati.<!--more--><\/p>\n<h4>Introduzione agli URL Schemes<\/h4>\n<p>Sveliamo il primo mistero: come si fa ad aprire Safari o un&#8217;altra applicazione sul nostro iPhone o iPad!<br \/>\nDalla nostra applicazione, come accennato, possiamo far in modo di aprire le applicazioni native Mail, Safari, Telefono, Messaggi e Mappe semplicemente inviando un&#8217;istruzione del tipo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n[[UIApplication sharedApplication] openURL:url].\r\n<\/pre>\n<p>La variabile <em>url<\/em> che ho usato nell&#8217;istruzione sopra non \u00e8 altro che uno schema per gli indirizzi URL. Questo funziona come un vero e proprio indirizzo web (mentre non lo \u00e8 di per se). Vediamo qualche esempio.<\/p>\n<p>Quando la nostra variabile sar\u00f2 del tipo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n[NSURL urlWithString:@\"http:\/\/devapp.it\"]\r\n<\/pre>\n<p>Si aprir\u00e0 l&#8217;applicazione nativa Safari caricando la pagina del sito web cui la stringa che compone l&#8217;URL fa riferimento;<\/p>\n<p>Se invece il nostro URL \u00e8 del tipo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n[NSURL urlWithString:@\"mailto:indirizzo@devapp.it\"]\r\n<\/pre>\n<p>si aprir\u00e0 l&#8217;app Mail e un nuovo messaggio verr\u00e0 creato inserendo <em>indirizzo@devapp.it<\/em> tra i destinatari dell&#8217;e-mail. Quindi non solo apriamo un&#8217;applicazione nativa, ma passiamo ad essa alcuni parametri, senza i quali questa funzionalit\u00e0 perderebbe la sua &#8220;magia&#8221;. Allo stesso modo si comportano le altre applicazioni quando riconoscono un URL a loro noto.<\/p>\n<p>Ma come fanno a sapere che devono aprirsi e cosa devono presentare una volta aperte?<\/p>\n<p>Apple mette a disposizione degli sviluppatori molte APIs. Tra queste c&#8217;\u00e8 n&#8217;\u00e8 una in grado di riconoscere le richieste di apertura di indirizzi URL tramite il messaggio <strong>[[UIApplication sharedApplication] openURL:url]<\/strong> e, nel caso in cui l&#8217;indirizzo combaci con la serie di URL Schemes impostati in un&#8217;applicazione, apre quell&#8217;applicazione.<\/p>\n<p>La nostra app, poi, ricever\u00e0 la chiamata alla funzione booleana &#8220;handleOpenURL&#8221; che si occupa di gestire l&#8217;apertura dell&#8217;app. Cosa viene fatto durante l&#8217;apertura dell&#8217;app \u00e8 quindi gestito da questo metodo secondo il tipo di schema riconosciuto.<\/p>\n<p>Anche Safari, quando digitate un indirizzo, manda quel messaggio, infatti, se provate a scrivere nel campo &#8220;indirizzo&#8221; di Safari per iPhone &#8220;<em>tel:1-408-555-5555<\/em>&#8220;, l&#8217;applicazione nativa Telefono si aprir\u00e0 con il numero inserito nell&#8217;indirizzo pre-impostato per voi. Stesso discorso vale per tutte le app e i loro indirizzi URL.<\/p>\n<p>Cosa sono allora questi schemi?<\/p>\n<p>In pratica si tratta di una sorta di modello per un URL, se avete notato, nella pratica, ogni indirizzo mostrato negli esempi sopra ha una sua struttura, questa \u00e8 rappresentata da uno schema specifico. Un indirizzo modello, quindi, sar\u00e0 del tipo:<\/p>\n<p><em>urlScheme:\/\/identifier?query#fragment<\/em><\/p>\n<p>dove i campi <em>urlScheme<\/em> e <em>identifier<\/em> sono indispensabili al funzionamento dell&#8217;indirizzo, mentre i campi <em>query<\/em> (ricerca) e <em>fragment<\/em> (meglio interpretato come &#8220;sezione&#8221;, secondo me) sono opzionali.<\/p>\n<p>Per maggiori informazioni sugli URL Schemes potete visitare questa pagina su <a href=\"http:\/\/en.wikipedia.org\/wiki\/URI_scheme\" target=\"_blank\">Wikipedia<\/a> (purtroppo non \u00e8 disponibile in versione italiana).<\/p>\n<h4>URL Scheme personalizzati<\/h4>\n<p>Ma veniamo alla parte pi\u00f9 bella! Apple permette a tutti gli sviluppatori di creare URL Scheme personalizzati per le proprie esigenze!<\/p>\n<p>Molte app, infatti, ne hanno uno. Se avete l&#8217;app ufficiale di Twitter per iOS installata sul vostro iPhone, iPod Touch o iPad, ad esempio, e provate a inserire in Safari l&#8217;indirizzo <em>twitter:\/\/user?screen_name=gtranchedone<\/em>, si aprir\u00e0 la pagina del mio profilo Twitter direttamente nell&#8217;applicazione Twitter ufficiale.<\/p>\n<p>Ma quali sono i vantaggi derivanti dall&#8217;utilizzo degli URL Schemes?<\/p>\n<p>Innanzitutto avere la possibilit\u00e0 di aprire altre applicazioni dall&#8217;interno della nostra offre moltissime occasioni per integrare nuovi servizi da offrire ai nostri utenti. Ci\u00f2 non solo render\u00e0 la nostra app pi\u00f9 utile ma migliorer\u00e0 anche l&#8217;esperienza di chi la usa. Offrire questo tipo di integrazione \u00e8, secondo me, una delle possibilit\u00e0 meno sfruttate nello sviluppo di app per iOS. L&#8217;unica &#8220;controindicazione&#8221; che si riceve dall&#8217;aprire app di terze parti \u00e8 che l&#8217;utente \u00e8 costretto a uscire dalla vostra. A tal proposito occorre per\u00f2 fare alcune osservazioni:<\/p>\n<ol>\n<li>non tutte le app sono pensate per essere usate per un lungo periodo di tempo continuato, specialmente in ambiente mobile (pensiamo a un&#8217;app per creare tasks come Things della Cutured Code o un&#8217;app che serva da dizionario bilingue);<\/li>\n<li>dobbiamo integrare app che effettivamente possano essere utili ai nostri utenti e valutare se e quando sia opportuno permettere all&#8217;utente di aprire queste applicazioni;<\/li>\n<li>se prendiamo ad esempio l&#8217;app ToDo di Appigo, che offre un&#8217;ottima API per l&#8217;integrazione con app di terze parti, questa \u00e8 costruita in modo tale da permettere di specificare lo URL Scheme della propria app quando le mandiamo una richiesta di apertura, permettendo all&#8217;utente di tornare alla nostra app una volta che ha finito di utilizzare ToDo. Perch\u00e9 non fare lo stesso con le nostre applicazioni? \ud83d\ude09<\/li>\n<\/ol>\n<p>Pensate inoltre al vantaggio di avere la nostra applicazione pubblicizzata, ad esempio, all&#8217;interno di altre applicazioni che ne integrano i servizi! Per gli utenti sarebbe molto pi\u00f9 facile scoprire la nostra applicazione e\/o essere orientati ad acquistare la nostra app piuttosto che un&#8217;altra concorrente! E le possibilit\u00e0 di sponsorship &#8220;gratuite&#8221; a questo punto diventano moltissime!<\/p>\n<h4>Aggiungere un&#8217; URL Scheme alla propria applicazione iOS<\/h4>\n<p>Eccoci giunti al cuore di questo tutorial. Vedremo ora come aggiungere uno schema URL alla nostra applicazione iPhone o iPad! L&#8217;operazione \u00e8 molto semplice e richiede non pi\u00f9 di 5 minuti. Ecco i passi da seguire:<\/p>\n<ol>\n<li>La prima cosa da fare \u00e8 aprire il progetto della nostra app (o crearne uno nuovo) e andare nel nostro info.plist. Qui, dovremo aggiungere una nuovo elemento alla lista, possiamo farlo semplicemente cliccando con il tasto secondario del mouse\/trackpad su una qualsiasi riga e cliccando su &#8220;Add Row&#8221;.<\/li>\n<li>Selezioniamo quindi la riga appena creata e impostiamone la key a &#8220;URL types&#8221;.<\/li>\n<li>Espandiamo la struttura che \u00e8 stata creata per noi fino a trovare la chiave &#8220;URL identifier&#8221; e impostiamone il valore alla stringa &#8220;path&#8221; (o una qualsiasi altra stringa a nostra scelta).<\/li>\n<li>Selezioniamo la riga &#8220;URL identifier&#8221; e clicchiamo sul segno (+) per aggiungere un nuovo elemento al dizionario in cui questa \u00e8 contenuta. Impostiamo la key del nuovo elemento a &#8220;URL Schemes&#8221;.<\/li>\n<li>Espandiamo la struttura che \u00e8 stata creata e impostiamo il valore dell&#8217;elemento 0 alla stringa &#8220;myapp&#8221; (o un&#8217;altra stringa sempre a nostra scelta).<\/li>\n<\/ol>\n<p>Fatto, nient&#8217;altro! Abbiamo il nostro URL Scheme disponibile e pronto per essere utilizzato. Se avete seguito correttamente l&#8217;operazione dovreste avere come risultato qualcosa del genere:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-Config.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-Config-1024x640.png\" alt=\"\" title=\"URL Scheme Config\" width=\"550\" height=\"344\" class=\"aligncenter size-large wp-image-7051\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-Config-1024x640.png 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-Config-300x187.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-Config-150x93.png 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-Config.png 1280w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Costruiamo ora il nostro URL secondo lo schema [URL Scheme]:\/\/[URL identifier]. Se avete inserito le stringhe suggerite nel tutorial, il risultato ottenuto sar\u00e0 l&#8217;indirizzo <em>myapp:\/\/path<\/em>. Facciamo una prova e vediamo se funziona.<\/p>\n<p>Clicchiamo su &#8220;Build &#038; Run&#8221; in XCode e, una volta che la nostra app si \u00e8 aperta, apriamo Safari nell&#8217;iPhone Simulator (o nel dispositivo) e proviamo a digitare l&#8217;indirizzo <em>myapp:\/\/path<\/em>. Vedrete che si chiuder\u00e0 safari e dar\u00e0 spazio nuovamente alla nostra app che si aprir\u00e0 senza problemi.<\/p>\n<p>Quanto mostrato fin&#8217;ora \u00e8 pi\u00f9 che sufficiente per far semplicemente aprire la nostra applicazione da un browser per iOS o, chiamando la funzione <em>openURL<\/em>, da un&#8217;altra applicazione. Ma se volessimo aggiungere delle funzionalit\u00e0 alla nostra app quando questa viene aperta?<\/p>\n<p>Come dicevamo all&#8217;inizio di questo articolo, Apple mette a disposizione degli sviluppatori un semplice metodo booleano che di default restituisce &#8220;NO&#8221; e non fa fare nulla di che alla nostra app, se non aprirsi semplicemente. Se volessimo farle fare qualcosa dovremmo, innanzitutto, restituire &#8220;YES&#8221; e inserire le istruzioni da eseguire prima della chiamata a &#8220;return&#8221;.<br \/>\nDobbiamo dunque sovrascrivere la funzione &#8220;handleOpenURL&#8221;.<\/p>\n<p>Andiamo nel delegato della nostra app e aggiungiamo questo metodo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url\r\n{\r\n    \/\/ Inserisci qui le istruzioni da eseguire\r\n    return YES;\r\n}\r\n<\/pre>\n<p>A questo punto non ci resta che indicare le istruzioni da eseguire quando l&#8217;app si aprir\u00e0. Un modo comune di fare ci\u00f2 \u00e8 sfruttare la parte <em>query<\/em> dell&#8217;indirizzo. Questo \u00e8 di solito del tipo &#8220;<em>query=something<\/em>&#8221; (ma pu\u00f2 essere anche semplicemente &#8220;<em>query<\/em>&#8220;) e si scrive dopo l&#8217;URL identifier da cui \u00e8 diviso dal segno &#8220;?&#8221;.<\/p>\n<p>Un esempio pratico potrebbe essere questo: <\/p>\n<p><em>myapp:\/\/path?query=something<\/em> o ancora &#8220;<em>myapp:\/\/path?query<\/em>&#8220;.<\/p>\n<p>Cocoa ci permette di estrapolare semplicemente la parte <em>query<\/em> dall&#8217;indirizzo tramite il metodo <strong>[url query]<\/strong>. Aggiungiamo, quindi, qualche semplice istruzione al nostro metodo <em>handleOpenURL<\/em>:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url\r\n{\r\n    if ([url query] != nil) {\r\n        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"[url query] \u00e8 diverso da nil\" message:nil delegate:self cancelButtonTitle:@\"Continua\" otherButtonTitles:nil];\r\n        <div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n        <div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n        \r\n        return YES;\r\n    }\r\n    \r\n    return NO;\r\n}\r\n<\/pre>\n<p>Quando l&#8217;app viene aperta tramite URL Scheme, ora, controlla se la parte <em>query<\/em> dell&#8217;indirizzo chiamante esiste (indipendentemente dal fatto che sia del tipo <em>query<\/em> o <em>query=something<\/em>) e in caso esista mostra una UIAlertView.<\/p>\n<p>Clicchiamo nuovamente su &#8220;Build &#038; Run&#8221; in XCode e proviamo se tutto funziona. Apriamo Safari e digitiamo l&#8217;indirizzo senza query. L&#8217;app si aprir\u00e0 e non far\u00e0 nulla. Ripetiamo l&#8217;operazione aggiungendo questa volta una query (es. <em>myapp:\/\/path?query<\/em>) e l&#8217;app mostrer\u00e0 l&#8217;UIAlertView come previsto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-query.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-query-1024x640.png\" alt=\"\" title=\"URL Scheme query\" width=\"550\" height=\"344\" class=\"aligncenter size-large wp-image-7052\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-query-1024x640.png 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-query-300x187.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-query-150x93.png 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URL-Scheme-query.png 1280w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ovviamente, questo \u00e8 solo un banale esempio, le cose che si possono fare all&#8217;apertura dell&#8217;app sono limitate alla sola nostra fantasia! \ud83d\ude00<\/p>\n<h4>Un altro uso interessante per gli URL Scheme: &#8220;Collezionale tutte!&#8221;<\/h4>\n<p>A dimostrazione degli svariati usi che si possono fare degli URL Schemes, uno in particolare ha colpito molti sviluppatori: aggiungere una lista di tutte le applicazioni create nell&#8217;about di ogni vostra app e usare gli URL Schemes per capire quali, tra le nostre app, l&#8217;utente ha installato sul proprio device e incitarlo, eventualmente, ad acquistare le altre!<\/p>\n<p>Probabilmente, i primi a usare gli URL Schemes in questo modo sono stati gli sviluppatori di Tweetbot. Nella loro app li usano cos\u00ec:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/Tweetbot-CollectThemAll.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/Tweetbot-CollectThemAll-300x248.png\" alt=\"\" title=\"Tweetbot-CollectThemAll\" width=\"300\" height=\"248\" class=\"aligncenter size-medium wp-image-7054\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/Tweetbot-CollectThemAll-300x248.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/Tweetbot-CollectThemAll-150x124.png 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/Tweetbot-CollectThemAll.png 640w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Per sapere se un&#8217;applicazione \u00e8 installata sul dispositivo in uso o meno, ci baster\u00e0 inserire il codice che segue:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\nBOOL isMyAppInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL urlWithString:@\"myapp:\/\/path\"];\r\n\r\nif (isMyAppInstalled) {\r\n    \/\/ do something cool here\r\n}\r\n<\/pre>\n<p>Semplice, no? \ud83d\ude09<\/p>\n<h4>Integrare altre applicazioni nella nostra app<\/h4>\n<p><a href=\"http:\/\/handleopenurl.com\/scheme\" target=\"_blank\">Qui<\/a> potete trovare una lista parziale, ma comunque abbastanza vasta, di applicazioni per iOS che utilizzano gli URL Scheme. Allora che aspettate? Aggiungete il vostro schema e integrate la vostra app con quelle di altri sviluppatori e fate in modo che altri facciano lo stesso con la vostra!<\/p>\n<h4>Conclusioni<\/h4>\n<p>A questo proposito, voglio approfittare dell&#8217;occasione per accennarvi un piccolo progetto che sto intraprendendo: sto sviluppando un Kit simile a quello proposto dagli sviluppatori di <a href=\"http:\/\/getsharekit.com\/\" target=\"_blank\">ShareKit<\/a> (kit per l&#8217;integrazione di servizi come Twitter, Facebook, Instapaper e Read it Later), ma che serva per integrare applicazioni di vario genere nelle nostre app. Spesso, infatti, le applicazioni che utilizzano gli URL Schemes non lo fanno solo per poter far aprire la propria app dall&#8217;esterno, ma utilizzano anche le funzioni di <em>query<\/em> e <em>fragment<\/em> per aggiungere funzionalit\u00e0. Solo che non \u00e8 cos\u00ec facile trovare tutti gli schemi di una data app se non contattando direttamente gli sviluppatori e a volte ci sono anche delle eccezioni da considerare che possono essere non proprio palesi. Questo per non parlare del fatto che per ogni app che integriamo dobbiamo scrivere del codice che si occupi di avvisare l&#8217;utente quando quell&#8217;app non \u00e8 installata sul dispositivo e permetta all&#8217;utente di andarla a scaricare direttamente dallo store. Certo, il sito <a href=\"http:\/\/handleopenurl.com\/scheme\" target=\"_blank\">HandleOpenURL.com<\/a> ci da una mano, ma si pu\u00f2 fare di meglio!<\/p>\n<p>Il mio obiettivo \u00e8 quello di facilitare tutta la serie di operazioni necessarie a integrare una data app nella nostra scrivendo solo una o due righe di codice.<\/p>\n<p>Se siete interessati a questo progetto e volete saperne di pi\u00f9 potete iscrivervi alla mailing list che ho creato appositamente <a href=\"http:\/\/eepurl.com\/echdj\" target=\"_blank\">qui<\/a> e\/o visitare il sito <a href=\"http:\/\/sketchtocode.com\/developers-area\" target=\"_blank\">Sketch to Code<\/a> (in allestimento).<\/p>\n<p>Se volete contribuire fornendo i vostri schemi potete invece <a href=\"mailto:g.tranchedone@sketchtocode.com\" target=\"_blank\">scrivermi via e-mail<\/a>. Per contribuire direttamente al progetto, invece, iscrivetevi alla mailing list, presto caricher\u00f2 il progetto su GitHub e quando questo avverr\u00e0 potrete modificare il codice direttamente o inviarmi le vostre classi per la revisione e l&#8217;inserimento nel kit. \ud83d\ude42<\/p>\n<p>Alla prossima<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URLSchemeExample.zip\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\" alt=\"\" width=\"33\" height=\"40\" align=\"middle\" \/><\/a> Se avete problemi con il tutorial, <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/06\/URLSchemeExample.zip\" target=\"_blank\">questo \u00e8 il nostro file di progetto.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ciao a tutti e benvenuti in questo nuovo appuntamento della nostra rubrica &#8220;Tutorial Pratici di programmazione iPhone&#8230;<\/p>\n","protected":false},"author":539,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[772,770,235,771,769],"class_list":["post-7046","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-esempi-codice-xcode","tag-openurl","tag-sharedapplication","tag-url-scheme-iphone","tag-url-schemes"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7046","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\/539"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=7046"}],"version-history":[{"count":21,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7046\/revisions"}],"predecessor-version":[{"id":7072,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7046\/revisions\/7072"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=7046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=7046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=7046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}