UIImageView – pinch to zoom in iOS Swift 3+

Avete una UIImageView e volete dare la possibilit√† all’utente di ingrandire l’immagine e muoverla con un “pizzico”?

SOLUZIONE: aggiungere una scrollview e tre righe di codice ūüôā

  • Aggiungiamo una ScrollView che conterr√† la UIImageView

ScrollView > ImageView

  • Modifichiamo il ViewController in modo da implementare il protocol (o interfaccia)¬†UIScrollViewDelegate e aggiungiamo queste righe di codice:

Finito. Non è necessario altro.

Happy coding… ūüôā

Client REST in Swift per app su iOS e macOS

Quando realizziamo un app dobbiamo spesso consentirle di comunicare con un server per inviare o ricevere messaggi.

Spesso questa comunicazione avviene attraverso una web service, cioè (generalizzando e semplificando molto) un servizio reso disponibile attraverso una rete distribuita che fa uso del protocollo HTTP per il trasporto dei messaggi.

Cos’√® REST e cosa c’entra con la comunicazione della nostra app?

REST sta per¬†REpresesentational¬†State¬†Transfer ed √® un insieme di principi architetturali per la progettazione di un sistema di ipertesto distribuiti. Sarebbe interessante, ma non voglio dilungarmi al riguardo in questo articolo. Per adesso ci basta sapere che vengono definiti dei vincoli che riguardano la comunicazione di un client con un server. Questi vincoli stabiliscono che la comunicazione deve essere costituita da un’interfaccia uniforme, che il server non deve memorizzare nessun contesto tra una comunicazione e l’altra (stateless), …

Un concetto fondamentale √® l’esistenza delle¬†risorse a cui si pu√≤ accedere tramite un identificatore globale (URI: Uniform Resource Interface). Il client deve solo sapere qual √® l’URI per accedere alla risorsa, gli eventuali parametri (ID della risorsa ad esempio) e il formato di rappresentazione che generalmente (e in questo articolo) √® il JSON. Leggi tutto “Client REST in Swift per app su iOS e macOS”

Salvare le preferenze utente in iOS e macOS con Swift

Quando creiamo un’applicazione, spesso desideriamo salvare le preferenze dell’utente per riutilizzarle in esecuzioni successive. Ad esempio, possiamo voler salvare quali notifiche l’utente desidera ricevere, lo schema di colori e altre personalizzazioni. Alcune volte, pu√≤ essere necessario salvare delle preferenze nascoste (o implicite).

Il framework¬†Foundation rende disponibile la classe¬†UserDefaults. Questa classe permette di accedere ad un “database” nel quale √® possibile salvare delle coppie¬†chiave-valore¬† che vengono persistite nelle diverse esecuzioni dell’app. Leggi tutto “Salvare le preferenze utente in iOS e macOS con Swift”

Mostrare notifiche all’utente in iOS 8+ Swift 3

Per mostrare un messaggio di alert all’utente √® possibile usare la classe¬†UIAlertController¬†(da notare che UIAlertView √® ormai considerata deprecata). ¬†UIAlertController √® disponibile da iOS 8+ nel framework UIKit. Permette di configurare il controller con le azioni e lo stile desiderato e poi di mostrarlo all’utente.

Sono disponibili due stili nella enum UIAlertControllerStyle: actionSheet e alert.

La differenza è ben chiara da questa immagine, a sinistra una notifica on stile alert a destra di tipo actionSheet.

Stili UIAlertController

√ą possibile anche aggiungere dei campi di testo per permettere l’inserimento di dati all’utente, oltre a diversi pulsanti (action).

L’utilizzo della classe √® molto semplice in Swift: Leggi tutto “Mostrare notifiche all’utente in iOS 8+ Swift 3”

Dependency Inversion, Inversion of Control e Dependency Injection

Dependency Inversion, Inversion of Control e Dependency Injection

Nella programmazione a oggetti, si sente spesso parlare di Dependency Inversion e Inversion of Control (Principio di inversione delle Dipendenze, ¬†Inversione del Controllo in italiano).¬†Forse, i termini vi sono noti perch√© avete utilizzato Spring,¬†ma sapete distinguerne le caratteristiche o comprenderne l’importanza?

In questo articolo cercher√≤ di chiarire e introdurre i concetti che riguardano il Dependency Inversion, Inversion of Control e Dependency Injection. Leggi tutto “Dependency Inversion, Inversion of Control e Dependency Injection”

Ecco le 5 cose che ho detto al mio team

Oggi mi è capitato di leggere questo testo, un breve decalogo di un team lavorativo. Voglio condividerlo con voi.

ECCO LE 5 COSE CHE HO DETTO OGGI AL MIO (OTTIMO) TEAM PER MIGLIORARE LE COSE

Sincerità
Il primo passo per migliorare noi stessi e le relazioni con gli altri è essere sinceri. La sincerità costa, ma ripaga alla grande.

Coraggio
Coraggio nell’affrontare un problema con il desiderio di risolverlo, accettando il rischio di uno scontro, ma che nella maggior parte dei casi si trasforma in un incontro chiarificatore.

Consapevolezza
Acquisire la consapevolezza dell’interdipendenza e che quindi il mio o il tuo successo √® il nostro successo, attiva immediatamente atteggiamenti molto pi√Ļ produttivi.

Collaborazione
Solo cos√¨ un team sar√† disponibile a collaborare sempre meglio, creando i presupposti per fare un grande salto di qualit√† basato su due fattori indispensabili: la fiducia reciproca e l’umilt√† di ognuno nel mettersi a disposizione dell’altro, indipendentemente dal ruolo.

Condivisione
Senza dialogo costante non c’√® relazione, senza relazione non esiste un gruppo. Condividere, ascoltare, parlare…spesso e bene. Conoscere l’altro sempre meglio.

Asset Studio – app per Mac OS per generare asset di icone

Spesso mi capita di dover generare gli Asset di immagini per le icone di un app. Su Android Studio c’√® un bellissimo tool integrato, ma su Mac OS non ho trovato nulla di utile o gratuito.

Allora ho deciso di crearlo da me ūüôā

Il progetto è molto semplice ed è pubblicato su GitHub: https://github.com/2geek/AssetStudio

Screenshot di Asset Studio
App per la creazione di Asset di icone per Mac OS

Mi sono divertito e ho imparato qualcosa in pi√Ļ su Swift e Mac OS.

L’app permette di ridimensionare velocemente e con ottima qualit√† una immagini in immagini png. Le dimensioni degli asset sono modificabili nelle impostazioni.

Spero troviate utile questa semplice App. Per qualsiasi domanda potete contattarmi su GitHub o direttamente commentando l’articolo.

SCP Resume

Non so voi, ma a me capita spesso di trasferire file con scp da e verso un server remoto. La cosa pi√Ļ frustrante succede quando stai trasferendo un file abbastanza grande e la connessione scp cade. Spesso mi son chiesto perch√© scp non supporti il resume.

La soluzione, comunque, è abbastanza semplice: usare rsync! ;)

Esempio:

Se per trasferire il file abbiamo utilizzato scp:

per ripristinare la connessione:

Ancora pi√Ļ semplice se creiamo un alias all‚Äôultimo comando come scpresume

Test Driven Development – Primi passi

Eccoci al secondo articolo sul TDD. Spero di avervi incuriosito nell’introduzione precedente. √Č arrivata l’ora di passare agli aspetti pratici.

Premessa

La tecnica del TDD √® applicabile con diversi linguaggi,¬†tecnologie¬†e¬†Framework. In questa serie di articoli useremo principalmente il linguaggio di programmazione JAVA. Vedremo l’utilizzo del TDD con diversi Framework e paradigmi di programmazione (orientata agli oggetti, orientata agli aspetti).

Prerequisiti per la prima lezione

Conoscenza dei fondamenti di programmazione a oggetti.

Superficiale conoscenza del linguaggio di programmazione JAVA (versione 7).

Test Driven Development

Ciclo di sviluppo

Nel primo articolo, abbiamo indicato qual è il ciclo di sviluppo utilizzando la tecnica del TDD:

Ciclo sviluppo TDD
Ciclo sviluppo TDD

Leggi tutto “Test Driven Development – Primi passi”

Test Driven Development – Introduzione

 

Red Pill TDD

Questo articolo, sarà il primo di una lunga serie sul Test Driven Development (Sviluppo Guidato dai Test) o TDD.

Il processo di sviluppo TDD ha fatto il suo debutto circa 18 anni fa come parte integrante dell’Extreme Programming (XP) ed √® ora adottato da tutti i team di sviluppo che fanno uso di metodi agili, e non solo. Io ne ho sentito parlare non pi√Ļ di 10 anni fa ed ero molto scettico al riguardo. All’inizio facevo delle prove per conto mio, mai in applicazioni che avrei dovuto sviluppare per lavoro. Prima il mio approccio era: analisi su carta, sviluppo, test completo, debug, correzione, test, analisi, debug, sbattimento di testa, debug, correzione, sviluppo, … e cos√¨ via. Producendo software per soldi (ovvero per lavoro), non pensavo ci fosse tempo per scrivere degli Unit Test o, addirittura, partire dal test!

Adesso non rilascio una classe se prima non ci sono degli Unit Test che la coprono (torneremo in seguito sul Code Coverage) e, addirittura, non scrivo codice se prima non c’√® un test che fallisce.

Ok per i test, ma non scrivere codice se non c’√® un test che fallisce? Ma che significa?

Leggi tutto “Test Driven Development – Introduzione”