{"id":11136,"date":"2014-11-18T12:54:59","date_gmt":"2014-11-18T11:54:59","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11136"},"modified":"2016-02-03T17:05:16","modified_gmt":"2016-02-03T16:05:16","slug":"rendere-perfetto-un-progetto-xcode-con-faux-pas","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/rendere-perfetto-un-progetto-xcode-con-faux-pas\/","title":{"rendered":"Rendere perfetto un progetto Xcode con Faux Pas"},"content":{"rendered":"<p>Vi segnalo oggi questo utile strumento utile per mantenere i nostri progetti Xcode in perfetta forma e privi di errori.<\/p>\n<p>Il tool si chiama <a href=\"http:\/\/fauxpasapp.com\/\" target=\"_blank\">Faux Pas<\/a>\u00a0che \u00e8 un termine francese per indicare un &#8220;piccolo errore&#8221; o un &#8220;passo falso&#8221;.<\/p>\n<p>Faux Pas contiene 99 regole (il numero \u00e8 destinato a salire) alle quali ogni buon progetto iOS dovrebbe obbedire, partendo da regole come &#8220;tutte le stringhe dovrebbero essere inserite con NSLocalizedString&#8221; \u00a0a &#8220;tutte le immagini presenti nel progetto dovrebbero\u00a0avere la controparte retina @2x&#8221; o anche regole pi\u00f9 specifiche come &#8220;ciascun KVO dovrebbe\u00a0essere rimosso nel dealloc della class&#8221; oppure &#8220;nella versione release dell&#8217;app non dovrebbe\u00a0essere presente nessun NSLog&#8221;<\/p>\n<p>Faux Pas analizza il vostro progetto e segnala quando il vostro codice non obbedisce ad una di queste regole.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11140 size-full\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/11\/screen-1-9719a34b-e1416128168602.jpg\" alt=\"screen-1-9719a34b\" width=\"640\" height=\"485\" \/><\/p>\n<p>\u00c8 possibile deselezionare alcune regole quando, come dice l&#8217;autore, non siamo d&#8217;accordo con le premesse alla base. Per esempio io disabilito sempre la regola che ogni classe deve iniziare con un identificativo di 3 lettere. Sono consapevole che \u00e8 una linea guida di Apple e che tutti i prefissi con due lettere sono riservati per il team di Cupertino ma usare tre lettere mi sembra controproducente e mi ricorda la &#8220;<a href=\"http:\/\/blog.codinghorror.com\/new-programming-jargon\/\" target=\"_blank\">Smurf naming convention<\/a>&#8221; \u00a0con classi che si chiamano SmurfAccountView, SmurfAccountDTO e SmurfAccountController. (Per chi non lo sapesse:\u00a0gli smurf sono i puffi)<\/p>\n<div id=\"attachment_11138\" style=\"width: 190px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/11\/brainy-smurf.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-11138\" class=\"wp-image-11138 size-full\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2014\/11\/brainy-smurf.png\" alt=\"brainy-smurf\" width=\"180\" height=\"250\" \/><\/a><\/p>\n<p id=\"caption-attachment-11138\" class=\"wp-caption-text\">Smurf naming convention<\/p>\n<\/div>\n<p>Una regola che invece da sola vale l&#8217;acquisto del software \u00e8 &#8220;invalid API&#8221;&#8230; in pratica vi avvisa quando nel codice utilizzate una API che non \u00e8 presente nel base SKD. Per esempio state scrivendo la vostra applicazione con Xcode 6, quindi viene compilata con l&#8217;sdk di iOS 8, ma volete rendere l&#8217;app compatibile anche con iOS\u00a07\u00a0quindi mettete base-sdk 7.0. A questo punto utilizzate nell&#8217;app il metodo\u00a0<em>containsString:<\/em> peccato che Xcode non vi segnali che quel metodo \u00e8 stato introdotto con iOS 8, quindi quando l&#8217;app gira su iOS 7 va in <em>unrecognized selector<\/em> e crasha.<\/p>\n<p>Questo scenario \u00e8 molto comune e infatti prima di <strong>Faux Pas<\/strong> utilizzavo <a href=\"http:\/\/www.deploymateapp.com\/\" target=\"_blank\">Deploymate<\/a>\u00a0e se siete utilizzatori di <a href=\"https:\/\/www.jetbrains.com\/objc\/\" target=\"_blank\">AppCode<\/a>\u00a0vi trovate questa funzione all&#8217;interno della code analysis.<\/p>\n<p>Un&#8217;ultima nota interessate riguardo Faux Pas \u00e8 che \u00e8 possibile utilizzarlo anche da riga di comando, il che lo rende perfetto per essere integrato all&#8217;interno del processo di building\u00a0con <strong>Jenkins<\/strong> o altri CI.<\/p>\n<p>Putroppo il costo non \u00e8 proprio irrisorio, ma se sviluppate applicazioni iOS per mestiere pu\u00f2 farvi risparmiare una lunga serie di stupidi crash e aiuta a mantere il progetto in perfetta forma.<\/p>\n<p>Happy coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vi segnalo oggi questo utile strumento utile per mantenere i nostri progetti Xcode in perfetta forma e&#8230;<\/p>\n","protected":false},"author":53,"featured_media":11140,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[481,7],"tags":[1420,1439,1440,1431,1441,1442],"class_list":["post-11136","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-risorse-utili","category-strumenti-di-sviluppo","tag-ios-developer","tag-ios-development-best-practice","tag-ios-devs","tag-mobile-developer","tag-strumenti-per-sviluppatori-ios","tag-utility-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11136","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=11136"}],"version-history":[{"count":8,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11136\/revisions"}],"predecessor-version":[{"id":11705,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11136\/revisions\/11705"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/11140"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}