Blog Posts

Come salvare un’immagine in Swift preservando i dati EXIF

Recentemente ho dovuto “lottare” con i dati EXIF salvati nelle foto di iOS.

Personalmente era la prima volta che avevo la necessità di fare in modo che le immagini conservassero questi dati anche quando caricate tramite delle API. Pensavo che iOS fornisse dei metodi standard per queste operazioni, invece la questione si è rivelata più particolare del previsto.

In questo articolo troverete l’implementazione iniziale che utilizzavo, e le nuove modifiche che ho apportato per riuscire a risolvere il problema.

Continua a leggere

Il mio setup 2023 – Terminale con iTerm2 e Oh My Zsh

Nel precedente articolo di questa mini-serie dedicata al setup del mio Mac, vi ho mostrato le app e le configurazioni che utilizzo quotidianamente in macOS.

C’era però un grande assente: il terminale. Come ogni sviluppatore che si rispetti, il terminale è un fedele compagno di lavoro, che personalmente mi trovo ad utilizzare per parecchio tempo durante la giornata. Questa è, attualmente, la configurazione del mio terminale:

Continua a leggere

Il mio setup 2023 – macOS e app

Recentemente ho dato una bella ripulita al mio Mac, che iniziava ad essere pieno di applicazioni e tool che non utilizzavo. Ho scelto l’opzione più drastica: inizializzazione completa e reinstallazione di tutto quello che mi serviva.

Non è stata un’operazione particolarmente lunga, in una giornata di lavoro sono tornato ad avere tutto configurato. Avendo la maggior parte dei miei dati in cloud, questo tipo di operazioni si è semplificato di molto.

In questo articolo ho raccolto sia le configurazioni che

Continua a leggere

Storia di un MacBook late 2007, di Pop!_OS e di un cavetto

Qualche settimana fa ho rispolverato il mio vecchio MacBook bianco, che giaceva ormai da anni abbandonato in un armadio. Comprato nel lontano 2007, modello Core 2 Duo A1181, è uno dei pochi computer a cui sono affezionato, perché ha rappresentato l’inizio della mia avventura nel mondo Apple.

Era inutilizzato da parecchio tempo, in particolare perché la retroilluminazione non funzionava più, quindi era necessario collegarlo sempre ad un monitor esterno.

Mi sono chiesto, “possibile non riuscire a dargli una seconda (o

Continua a leggere

Swift e Timer, attenzione ai retain cycle

La creazione di un timer è un’operazione che, prima o dopo, qualsiasi sviluppatore iOS si trova a fare.

C’è una piccola insidia, tuttavia, nella gestione della memoria che può portare ad avere dei retain cycle all’interno della classe/controller in cui vi trovate a definire il timer.

La documentazione di Apple definisce così la classe Timer (NSTimer per i nostalgici):

Timers work in conjunction with run loops. Run loops maintain strong references to their timers, so you don’t have to

Continua a leggere

Come gestire una tastiera ANSI con Shortcuts, senza impazzire

Da ormai un anno mi sono convertito alle tastiere meccaniche, con conseguente layout ANSI (qui una comparativa per chi non conoscesse la differenza).

Il vantaggio di questo layout è di poter avere tutti i simboli utilizzati nello sviluppo (backtip e parentesi graffe su tutti) molto più accessibili, senza dover ricorrere a combo magiche sulla tastiera.

macOS permette di gestire diversi layout di tastiera, ma questo vi costringerà a continui cambi se, come me, passate spesso dalla vostra tastiera meccanica

Continua a leggere

“Protocol Oriented Programming” per la gestione degli storyboard segue

Uno dei problemi ricorrenti nello sviluppo delle applicazioni iOS è la gestione della Storyboard e dei segue. Questi vengono definiti all’interno dello storyboard stesso, mentre alcune operazioni devono essere poi effettuate via codice. Tipicamente via codice si effettuano passaggi di dati o configurazioni che devono essere fatte a runtime.

Situazione attuale

Chiunque abbia utilizzato uno storyboard e i suoi segue avrà poi scritto delle istruzioni simili:

@IBAction func doSomething() { performSegueWithIdentifier("detailSegue", sender: nil) } override
Continua a leggere

Risolvere il problema di cache della tastiera con UIResponder+KeyboardCache

C’è un fastidioso bug in iOS che causa un ritardo piuttosto significativo tra la prima volta che la tastiera viene richiesta e quando questa appare effettivamente su schermo. Il problema si presenta solo al primo avvio della tastiera, che viene poi mantenuta in cache dal sistema.

Per risolvere questo problema, ho rilasciato su GitHub creato un’estensione in Swift, che permette di forzare la procedura di cache della tastiera (la category originale in ObjectiveC è invece disponibile in questa

Continua a leggere

Incremento automatico del numero di build in Xcode

Su GitHub ho trovato un utile script che permette di eseguire l’incremento automatico del numero di build in un progetto Xcode.

Lo script incrementa ad ogni run il numero di build del progetto (CFBundleVersion), che deve essere impostato in precedenza ad un valore intero iniziale (ad esempio 1).

Eccovi lo script in questione:

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber"
Continua a leggere

Site Footer