Da anni mi occupo di software gestionale: in questo ambito la correttezza dell’algoritmo implementato rappresenta la parte più importante del software prodotto.

Quello che voglio dire è che in questo campo specifico elementi come perfomance, bellezza delle UI e architettura impiegata rappresentano fattori assolutamente secondari e trascurabili rispetto alla correttezza e precisione dei risultati prodotti.

Una maschera che permette inserire dei dati contabili può essere bella e funzionale quanto si vuole, nonché essere velocissima e appoggiarsi sull'architettura più estensibile e moderna possibile, ma se capita che in un aggiornamento porti alla situazione in cui un qualsivoglia conteggio previsto dalla faragginosa contabilità italiana risulti essere errato, o anche solo non correttamente arrotondato, allora l’intero software viene considerato una emerita schifezza.

Per questo motivo la gestione dei test del software gestionale prodotto è una procedura che deve sempre essere eseguita con "religiosa" cura: uno sbaglio, seppur minimo, dei calcoli eseguiti è considerato alla stregua di un tradimento.

Nella pratica per realizzare test per tale tipo di software ci si è sempre basati su un approccio misto: parte dei test vengono eseguiti in modo automatico, tramite unit-test, e parte in modo manuale, con l’utilizzo di personale addestrato a trovare, calcolatrice alla mano, i seppur minimi difetti dei calcoli proposti.

Xamarin vers. 3.5 ha portato un’interessante novità: il Bindable Layout.

Devo ammettere che la prima volta che ne ho letto non mi ha convinto per nulla: mi sembrava la classica "soluzione in cerca di un problema".

Però poi mi sono sforzato di trafficarci per vedere se mi poteva essere utile e mi sono reso conto che, come spesso capita, non ne avevo capito una cippa: in effetti questa nuova feature è in grado di fornire un valido strumento per poter risolvere velocemente un bel po' di rogne.

Per questo motivo mi sono deciso a scriverne qualcosa, in modo tale da fissare le mie idee sull'argomento.

Che cappero è il Bindable Layout ?

Penso che tutti Voi conosciate la classi Layout e le sue derivate: queste rappresentano le classi container delegate a contenere e posizionare in modo automatico e nel modo corretto i controlli figli.

Alcuni esempi notevoli: Absolute Layout, Stack Layout, Grid.

Nella scorsa parte stavamo analizzando gli scopi e utilizzi dei valori targetSdkVersion e target framework.

Come accennato questi valori servono per gestire il fatto che le nuove versioni di Android propongono non solo nuove funzionalità e nuovi template, ma anche in alcuni casi possono eliminare o modificare istruzioni e funzionalità preesistenti.

>> Osservazione 9
Il targetSdkVersion è usato solo a runtime, e indica la versione di Android per la quale la nostra app è ottimizzata.

Detto in altri termini dice qualcosa tipo

"Ehi, questa app l'abbiamo scritta e testata per Android versione Y, e sappiamo che con quella versione tutto funziona tutto alla grande"

Ovviamente si ha: Y = targetSdkVersion

Detta così in effetti non si comprende molto l'utilità di questo valore, ma Vi prego, andate avanti con la lettura e capirete cosa voglio dire. Inoltre questo è quello che troverete scritto su questo argomento in giro.....

Tra i grandi misteri che l'intelletto propone io pongo anche la configurazione degli Android API Level nei progetti Xamarin.Android, nonchè i molti messaggi di errore che NUGet propone quando si modificano in modo improvvido detti valori, o comunque si traffica con le versioni dei pacchetti.

Io con franchezza ho grosse difficoltà a comprendere l'argomento, e tutte le volte che devo toccare qualcosa in questo ambito mi rifaccio ai miei "sacri" appunti e.... incrocio le dita......

Per questo motivo ho deciso di scriverne qualcosa con la speranza che possa aiutare anche altri.

Iniziamo con specificare i termini del problema.

Per ogni progetto Xamarin.Android è necessario impostare nelle proprietà del progetto i tre seguenti valori.

Minimum Android Version (minSdkVersion)
Questo valore permette di specificare la minima versione di Android dove la app è in grado di funzionare.

Target Framework
Indica quale versione di Android viene utilizzata per compilare la app.

Target Android Version (targetSdkVersion)
E' la versione di Android dove si immagina che la nostra app sarà in esecuzione. In altri termini possiamo dire che la app sarà ottimizzata per la versione di Android qui specificata.

Il commento che ho specificato sotto ogni voce scommetto che più che chiarire Vi ha fatto confusione: concordo appieno ma abbiate la pazienza di leggere il seguito e tutto (forse) diventerà chiaro.

Dopo aver seguito tutte le osservazioni che Vi segnalo sono certo che comprenderete qualcosa in più di questi "mistemagici" valori.