{"id":11396,"date":"2015-08-25T16:04:01","date_gmt":"2015-08-25T14:04:01","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11396"},"modified":"2016-02-03T17:18:24","modified_gmt":"2016-02-03T16:18:24","slug":"gestire-le-dipendenze-con-carthage","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/gestire-le-dipendenze-con-carthage\/","title":{"rendered":"Gestire le dipendenze con Carthage"},"content":{"rendered":"<p>Due anni fa pubblicavamo un articolo molto simile a questo, relativo per\u00f2 a CocoaPods\u00a0<a href=\"http:\/\/www.devapp.it\/wordpress\/cococapods-gestire-le-dipendenze-e-gli-aggiornamenti-in-xcode-in-modo-automatico.html\" target=\"_blank\">&#8220;CocoaPods: gestire le dipendenze e gli aggiornamenti in Xcode in modo automatico&#8221;<\/a>\u00a0da allora CocoaPods ne ha fatta di strada e da un tool riservato ai pi\u00f9 smaliziati \u00e8 diventato lo strumento principale per integrare le\u00a0<em>millemila<\/em> librerie opensource che github mette a disposizione. Qualcuno con ironia ha anche detto che non dovremmo pi\u00f9 definirci &#8220;iOS developer&#8221; ma &#8220;cocoapods integrator&#8221; talmente \u00e8 facile ormai mettere insieme un po&#8217; di librerie e realizzare un&#8217;app.<\/p>\n<p>Ma CocoaPods non piace proprio a tutti, e soprattutto non piaceva a chi ha pensato bene di realizzarne un&#8217;alternativa il cui scopo finale \u00e8 sempre quello di gestire le dipendenze, ma lo fa nel modo quanto pi\u00f9 distante possibile da CocoaPods.<\/p>\n<p>CocoaPods ha un database centralizzato di tutti i progetti e le relative versioni che sono installabili tramite il loro tool (<a href=\"https:\/\/github.com\/CocoaPods\/Specs\" target=\"_blank\">qui<\/a>) e funziona creando un workspace dove il vostro progetto e le diverse librerie convivono pi\u00f9 o meno pacificamente.<\/p>\n<p>Carthage \u00e8 l&#8217;esatto opposto. Non esiste un repository centrale e non modifica di una virgola la struttura del vostro progetto. Ma allora come funziona?<\/p>\n<p>Carthage utilizza i Dynamic Frameworks per cui \u00e8 possibile utilizzarlo soltanto se il vostro progetto supporta iOS8 e successivi. Niente iOS7, I&#8217;m sorry.<\/p>\n<p>Per installare carthage la soluzione pi\u00f9 semplice \u00e8 quella di utilizzare homebrew, quindi basta digitare:<\/p>\n<pre class=\"lang:sh decode:true \">brew install carthage<\/pre>\n<p>Una volta installato, create un <a href=\"https:\/\/github.com\/Carthage\/Carthage\/blob\/master\/Documentation\/Artifacts.md#cartfile\" target=\"_blank\">Cartfile<\/a> nella root del vostro progetto. Il Cartfile non \u00e8 altro che un semplice file di testo dove specifichiamo le nostre dipendenze. Il contenuto per esempio potrebbe essere questo:<\/p>\n<pre class=\"lang:sh decode:true\">github \"Mantle\/Mantle\"<\/pre>\n<p>Se vi state chiedendo come fare a trovare i progetti compatibili con carthage, beh abbiamo detto che non \u00e8 centralizzato quindi non esiste un elenco dei progetti disponibili, sar\u00e0 l&#8217;autore della libreria\/framework a dirvi se il suo progetto \u00e8 o meno compatibile, per esempio esponendo questo badge:<\/p>\n<div id=\"attachment_11397\" style=\"width: 561px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/mantle_carthage_badge.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-11397\" class=\"wp-image-11397\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/mantle_carthage_badge-1024x244.png\" alt=\"mantle_carthage_badge\" width=\"551\" height=\"131\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/mantle_carthage_badge-1024x244.png 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/mantle_carthage_badge-300x71.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/mantle_carthage_badge.png 1690w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/a><\/p>\n<p id=\"caption-attachment-11397\" class=\"wp-caption-text\">Mantle \u00e8 compatibile con Carthage<\/p>\n<\/div>\n<p>Una volta creato il file con le dipendenze digitate il comando:<\/p>\n<pre class=\"lang:sh decode:true \">carthage bootstrap<\/pre>\n<p>per procedere alla compilazione dei framework. Il risultato visibile in console \u00e8 questo (click per zoomare):<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_output.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11401\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_output-300x33.png\" alt=\"carthage_output\" width=\"700\" height=\"77\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_output-300x33.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_output-1024x112.png 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_output.png 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>Ci\u00f2 che \u00e8 interessante \u00e8 che il nostro progetto non \u00e8 stato modificato di una virgola, infatti tutto il risultato della compilazione \u00e8 uno o pi\u00f9 framework compilati e presenti in una specifica folder del nostro progetto.<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_filesystem.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11404\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_filesystem.png\" alt=\"carthage_filesystem\" width=\"500\" height=\"371\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_filesystem.png 634w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_filesystem-300x222.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>A questo punto non ci resta che trascinare il framework all&#8217;interno del nostro progetto Xcode (come si faceva una volta \ud83d\ude09 prima dell&#8217;esistenza di CocoaPods) e il gioco \u00e8 fatto.<\/p>\n<p>Assicuratevi che sia correttamente aggiunto anche nella sezione &#8220;Link Binary With Libraries&#8221;<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_link.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11407\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_link-1024x684.png\" alt=\"carthage_link\" width=\"600\" height=\"401\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_link-1024x684.png 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2015\/08\/carthage_link-300x200.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Adesso potremo iniziare ad usare il framework senza chiederci se committare o meno la <a href=\"http:\/\/stackoverflow.com\/questions\/9446644\/what-goes-into-your-gitignore-if-youre-using-cocoapods\" target=\"_blank\">Pod folder<\/a>\u00a0o come gestire correttamente le configurazioni del progetto.<\/p>\n<p>Alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Due anni fa pubblicavamo un articolo molto simile a questo, relativo per\u00f2 a CocoaPods\u00a0&#8220;CocoaPods: gestire le dipendenze&#8230;<\/p>\n","protected":false},"author":53,"featured_media":11410,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-11396","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial-pratici"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11396","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\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11396"}],"version-history":[{"count":16,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11396\/revisions"}],"predecessor-version":[{"id":11731,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11396\/revisions\/11731"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/11410"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11396"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11396"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11396"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}