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

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

“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

Singleton in Swift

Uno dei pattern più utilizzati durante lo sviluppo è sicuramente il Singleton. Per chi non lo sapesse, la definizione di pattern Singleton è la seguente1:

Il singleton è un design pattern creazionale che ha lo scopo di garantire che di una determinata classe venga creata una e una sola istanza, e di fornire un punto di accesso globale a tale istanza.

Con un singleton, quindi, possiamo avere un’unica istanza di una determinata classe, che viene condivisa

Continua a leggere

CoreData e la proprietà “Allows External Storage”

In queste ultime settimane sto lavorando, più per passione che per altro, ad una nuova applicazione per iOS (che prima o poi vedrà la luce, spero). Questa app permette all’utente di inserire diverse informazioni, salvandole poi in CoreData. Tra le informazioni da salvare, però, ci sono anche delle immagini.

Proprio in merito alle immagini è sorta la grande domanda: come salvarle in CoreData? È possibile salvarle direttamente all’interno del database oppure è meglio memorizzarle all’esterno e inserire nel database solo

Continua a leggere

Site Footer