HTC Magic Vodafone update a Froyo 2.2.1

Da circa una settimana, o poco più, è iniziato l’aggionamento dei dispositivi htc magic brandizzati Vodafone (per intenderci quelli con la scritta “with Google”, dunque i famosi dispositivi che promettevano la Google Experience). L’aggiornamento sta avvenendo in automatico da parte i Vodafone, in base ai seriali dei dispositivi, tramite l’invio di due pacchetti tramite OTA, (On the Air). Questo tipo di aggiormento è automatico e dunque all’utente non è richiesta nessuna capacità tecnica particolare, solo l’accettazione dell’installazione. Il primo dei due pacchetti non varia il kernel del dispositivo, che rimarrà sempre alla versione 1.6, mentre il secondo aggiornamento, più corposo, porterà il dispositivo alla versione 2.2.1 del sistema operativo di Montain View. Per chi di voi volesse provare a forzare l’aggiornamento, procedura non dannosa, ma che non per forza porta all’aggiornamento, basta toglirere la sim, riavviare il dispositivo e attivare il Wifi. Fatto ciò digitate dal telefono il codice *#*#2432546#*#* che porterà il dispositivo ad una notifica. A questo punto cliccate sulla notifica ( se chiaramente vi da il success) così da poter aggiornare il dispositivo. Eseguito il primo update il sistema si riavvierà e non sarà variato nulla. Occorrerà allora reinserire il codice in modo da scaricare il vero aggiornamento alla 2.2.1. Per verificare il corretto download del sistema andare su impostazioni –> aggiornamento del sistema..

A questo punto il gioco è fatto, siete alla versione 2.2.1 o meglio conosciuta come Froyo!

Individuare i movimenti con Iphone

Per cercare di capire come un utente sta utilizzando il dispositivo, o magari cosa l’utente sta facendo senza interagire direttamente con il dispositivo, è possibile sfruttare i dati dell’accelerometro presente su tutte le versioni dell’Iphone. Con la versione 4 del dispositivo è stata introdotta la possibilità di rilevare movimenti che prima non erano interpretabili (l’accelerometro non è in grado di rilevare la differenza tra un movimento impresso al dispositivo e l’accelerazione di gravità) e tutto grazie all’introduzione del giroscopio. Con questa funzione si è passati dal gestire i valori da 3 assi (x,y,z) a gestire i valori su 6 assi, dando così la possibilità agli sviluppatori di concentrare gli sforzi anche su applicazioni prima di più difficile sviluppo come quelle di Agumented Reality.

A breve pubblicherò una piccola classe basata sugli accelerometri classici in grado di rilevare alcune gesture pre impostate.

Nomi progetti Xcode

Breve post con una piccolissima ma fondamentale info, ossia non inserire nel nome di un progetto Xcode il tratto basso ” _ “. Se si utilizza il tratto basso infatti si avranno poi dei problemi nel momento in cui si vorrà lanciare l’applicazione su un dispositivo reale in quanto il file .plist solleverà un errore legato al product_name.
E’ facile intuire come risulti macchinoso il rename di un progetto Xcode (non eseguire MAI un rename “semplice” del nome del progetto pena la non compilazione successiva dello stesso) in quanto l’ide crea in automatico i file di base del progetto e i collegamenti interni tra essi.

Gestire l’evento shake

Lo shake in alcune guide online è spesso trattato in maniera poco “corretta” o comunque in modo stilisticamente poco fine. Con questo intendo dire che alle volte viene rilevato un evento shake controllando l’accelerometro e i movimenti sui tre assi da esso rilevati. Questa soluzione è sicuramente funzionante è corretta ma diciamo che non tiene conto di una cosa……Cocoa Touch gestisce già l’evento shake e gestisce nel contempo i problemi legati a questo evento (uno shake lungo o corto che sia sempre uno rimane, con gli accellerometri invece basta rallentare senza fermasi per fare scaturire diversi shake). Quindi valutate bene cosa dovete realizzare perchè entrambi i metodi funzionano ma hanno caratteristiche differenti. Ora vi posto il codice dell’evento shake.

#codice da inserire nel file header ad esempio "pippo.h"
 
//evento shake della libreria UIResponder
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;
 
#nel vostro file "pippo.m" invece
//metodo che al riconoscimento dello shake aiuta a capire la schermata
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventSubtypeMotionShake) {
NSLog(@"shake shake shake");
}
}
 
-(BOOL)canBecomeFirstResponder {
return YES;
}
 
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
 
- (void)viewWillDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewWillDisappear:animated];
}

UIControlEvents – Azioni da associare agli eventi

Oggi mi sono trovato in una situazione un po’ strana, ossia cercare di capire come funzionano gli eventi associabili ai metodi. La classe di riferimento per la gestione degli eventi in Cocoa Touch è proprio la UIControlEvents. Sembrerà banale il piccolo programma che ho realizzato ma mi è servito per comprendere in pieno in che momento esatto viene scatenato un eventi.
Sul sito della Apple sono spiegati bene (qui) ma il mio reale problema era capirne il funzionamento utilizzando il VoiceOver, ossia lo screen reader di Apple.

ApplicationTest

Dal test ho evindenziato che gli eventi “drag” sono praticamente inutilizzabili.
Se volete provare, o anche solo guardare un po’ il codice e commentarlo è questo buttonactions ,anche se è stato scritto in pochi minuti per testare l’usabilità dei controlli. Ricordo che per testare il Voice Over bisogna obbligatoriamente deployare l’applicazione sul device in quanto non è un’operazione testabile con il simulatore.

Elenco degli eventi e breve descrizione:

UIControlEventTouchDown – Un evento touch-down è un tap.
UIControlEventTouchDownRepeat
– Un evento ripetuto touch-down, in questo caso, il valore del metodo tapCount UITouch è maggiore di uno.
UIControlEventTouchDragInside – Un evento in cui si trascina con un dito dentro i limiti del controllo.
UIControlEventTouchDragOutside – Un evento in cui si trascina con un dito appena fuori dai limiti del controllo.
UIControlEventTouchDragEnter – Un evento in cui è trascinato un dito nel limiti del controllo.
UIControlEventTouchDragExit – Un evento in cui viene trascinato dall’interno di un controllo al di fuori del proprio limiti.
UIControlEventTouchUpInside – Un evento touch-up  in cui il dito è dentro i limiti del controllo.
UIControlEventTouchUpOutside – Un evento touch-up in cui il dito è fuori dei limiti del controllo.
UIControlEventTouchCancel – Un evento di sistema che cancella i tocchi correnti per il controllo.
UIControlEventValueChanged
– Un slide o uno switch che causa l’emissione di una serie di valori diversi.
UIControlEventEditingDidBegin
– Scatta all’ avvio di una sessione di editing in un oggetto UITextField.
UIControlEventEditingChanged
– Scatta ad un cambiamento in un objet UITextField.
UIControlEventEditingDidEnd
– Scatta all’uscita di  una sessione di editing in un oggetto UITextField.
UIControlEventEditingDidEndOnExit
– Tocco che termina la sessione di editing in un oggetto UITextField.
UIControlEventAllTouchEvents
– Tutti gli eventi tocco.
UIControlEventAllEditingEvents
– Tutti i tocchi di editing per gli oggetti UITextField.
UIControlEventApplicationReserved
– Gamma di valori di controllo-evento disponibili per l’utilizzo dell’applicazione.
UIControlEventSystemReserved
– Una gamma di valori di controllo-evento riservato per uso interno.
UIControlEventAllEvents
– Tutti gli eventi, compresi gli eventi di sistema.