La storia è semplice e ha anche risvolti tristi: Ve la racconto perchè scommetto che anche a Voi sarà capitato una cosa simile.

Il committente ci propone la realizzazione di un software molto complesso, dotato di una robusta logica di funzionamento, ma che riusciamo a creare nei tempi e modi previsti.

Questo ovviamente applicando i pattern corrett,i nonchè tutte le ultime tecnologie del caso. Insomma: tutti contenti, soprattutto noi che siamo riusciti anche a rispettare i tempi di realizzazione !

Sin qui sembra una storia a lieto fine ma..... c'è sempre un ma....

Dopo aver iniziato il deploy del nostro fantastico software su centinaia di dispositivi, tra i più disparati, l'iniziale soddisfazione diffusa si trasforma in poche ore in momenti di panico e notti insonne.

In altri termini in un baleno avviene la trasformazione: da sultano del codice (come simpaticamente mi chiamano i miei colleghi) a ultimo-dei-miei-cani.

Infatti su alcuni di questi dispositivi il "fantastico" inizia a fare stravaganze e comportamenti anomali.

Nemmeno a dirlo uno di questi dispositivi in cui il nostro software fa le bizze è quello dell'executive dell'azienda: ovviamente lo stramaledetto device incriminato non è tra quelli in nostro possesso e che usiamo per il testing su dispositivi reali.

Anche i simulatori non ci aiutano a identificare il problema il quale, a peggiorare le cose, si presenta pure in modo sporadico.

Per quello che mi riguarda tutte le volte che mi capita una cosa simile inizio a a pensare che forse ho sbagliato a fare questo lavoro, che forse mi dovevo occupare di qualche attività più manuale che, una volta terminata, difficilmente propone recrudescenze e/o comportamenti aleatori e sporadici da risolvere a tempo zero.

Ma a nulla vale ripensare al passato, e a quell'amico che ha aperto una piccola azienda nel campo edilizio e si è recentemente comprato una macchina spaventosamente bella, nemmeno a dirlo molto più bella della mia che, per inciso, dentro inizia  ad avere il muschio ma "ora non è il momento di cambiarla perchè non posso spendere". E che (sempre il suddetto amico) sono certo non ha tutte le rotture di scatole che possiamo avere noi faticatori del codice nell'affrontare problemi così aleatori che non si riescono nemmeno a riprodurre.

Un mattone un volta posato difficilmente inizia a muoversi ma solo in alcune ore della giornata, e solo con alcune persone vicino...

L'invidia è una brutta bestia... lo so....

Insomma questa è la storia che sta dietro al problema che Vi espongo in queste righe.

L'oggetto è una app scritta in XamarinForms, per Android e Ios. Il codice incriminato è una innocente pagina che elenca una serie di articoli che è possibile ordinare: una cosa classica e molto rodata. Potete vederne il codice nel seguito.

Mentre per Android la pagina funziona perfettamente e non presenta alcun problema, per Ios la stessa su alcuni dispositivi presenta un bug fastidioso: la ListView, che dovrebbe occupare interamente lo spazio lo spazio disponibile in realtà si ferma a poco più della metà.

In figura potete vedere il problema in tutta la sua triste bellezza.

Il difetto si presenta in modo assolutamente sporadico e non deterministico, e solo su alcuni dispositivi Ios: sarebbe stato troppo semplice sennò !!!!

Quelli più coinvolti sembrano essere Ios Xs e Xr, ma non solo quelli. Inutile dire che il simulatore funziona perfettamente per quegli stessi modelli di Ios.

A nulla vale l'aggiornamento all'ultimo grido di Xamarin.Ios, XF, etc etc

Dopo alcune prove mi sono imbattuto nel bug che Vi riporto in linkografia, e che sembra essere proprio il problema cui faccio cenno in questo scritto.

In definitiva porre una ListView all'interno di una Grid.... no buono.

In altri termini il problema è come è stata impostata la pagina: usare una Grid per disegnare il layout principale con dentro una ListView sembra che non sia gradita a sua maestà XF.

Ridisegnando la pagina usando in luogo della Grid uno StackLayout si risolve il problema.

Sembra che il problema sarà risolto definitivamente con XF 5.0, però alla data in cui sto scrivendo queste note è una versione ancora in pre-release, e utilizzare una versionecome questa in produzione contraddice la regola numero uno del giovane programmatore scaltro: non fare mai deploy in produzione di applicazioni che utilizzano versioni di framework non stabili.

Giusto per precisione: la seconda regola è ovviamente "mai fare deploy di applicazioni in produzione il Venerdì" !!

Comunque eseguendo il refactory della pagina incriminata come suggerito nel bug e ho spiegato brevemente sopra sembra risolvere il problema sembra essersi risolto.

Insomma dopo la correzione sopra i miei colleghi mi hanno renziato ad appellare sultano del codice.

Spero che queste note servano anche a Voi !

Linkografia

Github: [Bug] ListView/CollectionView is not filling the entire Screen on some iOS devices #6908