{"id":11193,"date":"2015-01-14T15:11:25","date_gmt":"2015-01-14T14:11:25","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11193"},"modified":"2016-02-03T17:14:27","modified_gmt":"2016-02-03T16:14:27","slug":"mmwormhole-comunicazione-in-realtime-tra-app-ed-estensioni","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/mmwormhole-comunicazione-in-realtime-tra-app-ed-estensioni\/","title":{"rendered":"MMWormhole: comunicazione in realtime tra App ed estensioni"},"content":{"rendered":"<p>Con l&#8217;arrivo di iOS 8, Apple ha introdotto una nuovo concetto nella programmazione, quella delle estensioni. Ne sono state messe a disposizione diverse direttamente nella prima release di iOS (<a href=\"http:\/\/www.devapp.it\/wordpress\/novita-di-ios-8-le-estensioni.html\">ne abbiamo parlato qua<\/a>), mentre un altro tipo di estensione sar\u00e0 disponibile con l&#8217;arrivo dell&#8217;Apple Watch; tutte le app per l&#8217;orologio di Cupertino, saranno delle estensioni all&#8217;applicazione nativa di iOS.<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/12\/MMWormhole.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11194 size-full\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/12\/MMWormhole.gif\" alt=\"MMWormhole\" width=\"564\" height=\"476\" \/><\/a><\/p>\n<p>Comunicare tra app ed estensioni non \u00e8 stato reso comodo da Apple, che ha lasciato gli user defaults come modo pi\u00f9 semplice per condividere informazioni. Per agevolare, per\u00f2, la comunicazione\u00a0<a href=\"http:\/\/www.mutualmobile.com\/\" target=\"_blank\">Mutual Mobile<\/a>\u00a0ha sviluppato una libreria: <strong>MMWormhole<\/strong>. Tramite questa libreria si ha disposizione comunicazione in realtime tra app ed estensioni usando pochissime linee di codice.<\/p>\n<p>Per usarlo \u00e8 necessario inizializzare un oggetto MMWormhole nel seguente modo:<\/p>\n<pre class=\"lang:objc decode:true \">self.wormhole = [[MMWormhole alloc] initWithApplicationGroupIdentifier:@\"group.com.mutualmobile.wormhole\"\r\noptionalDirectory:@\"wormhole\"];<\/pre>\n<p>L&#8217; <em>applicationGroupIdentifier<\/em> deve essere impostato nelle impostazioni del progetto, creando di fatto uno spazio dove i dati possono fluire tra app ed estensioni.<\/p>\n<p>Successivamente per passare un oggetto si usa il seguente codice:<\/p>\n<pre class=\"lang:objc decode:true \">[self.wormhole passMessageObject:@{@\"titleString\" : title}\r\nidentifier:@\"messageIdentifier\"];<\/pre>\n<p>Se invece si vuole ritrovare un oggetto il codice \u00e8 questo:<\/p>\n<pre class=\"lang:objc decode:true \">id messageObject = [self.wormhole messageWithIdentifier:@\"messageIdentifier\"];<\/pre>\n<p>Il procedimento \u00e8 simile a quello che succede con <em>NSUserDefaults<\/em>. Il grande vantaggio, per\u00f2, \u00e8 che si pu\u00f2 impostare una notifica, con relativa esecuzione di codice, ogni qual volta un valore relativo ad una determinata chiave cambia:<\/p>\n<pre class=\"lang:objc decode:true \">[self.wormhole listenForMessageWithIdentifier:@\"messageIdentifier\"\r\nlistener:^(id messageObject) {\r\n\/\/ Do Something\r\n}];<\/pre>\n<p>Questo permette di avere una comunicazione realtime tra app ed estensione, che sar\u00e0 molto comoda con le applicazioni relative ad Apple Watch, ma questo lo scopriremo in futuro.<\/p>\n<p>Maggiori informazioni sulla libreria, che si installa anche tramite Cocoapods, nel <a href=\"http:\/\/www.mutualmobile.com\/posts\/mmwormhole\" target=\"_blank\">blog ufficiale<\/a> o nella repo su GitHub al <a href=\"https:\/\/github.com\/mutualmobile\/MMWormhole\" target=\"_blank\">seguente indirizzo<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con l&#8217;arrivo di iOS 8, Apple ha introdotto una nuovo concetto nella programmazione, quella delle estensioni. Ne&#8230;<\/p>\n","protected":false},"author":557,"featured_media":11181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[42,30,481],"tags":[800,1477,1472,1478],"class_list":["post-11193","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework","category-materiale-open-source","category-risorse-utili","tag-librerie-ios","tag-risorse-per-apple-watch","tag-risorse-per-sviluppatori-ios","tag-widget-ed-estensioni-ios-8"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11193","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\/557"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11193"}],"version-history":[{"count":7,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11193\/revisions"}],"predecessor-version":[{"id":11719,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11193\/revisions\/11719"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/11181"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}