You are here

Sviluppare app multipiattaforma - Le basi: l’algoritmo e il codice (terza parte)

> INDICE DEL CORSO
< Articolo precedente: Sviluppare app multipiattaforma - Le basi: l’algoritmo e il codice (seconda parte)

Nel precedente articolo, abbiamo visto un po' di codice iniziale, un assaggino di Java. Qui, invece, mi soffermo su ciò che è necessario prima di andare avanti, al fine di evitare smarrimenti o sgradite sorprese strada facendo.

Argomenti:


Gli attrezzi del mestiere, ovvero la (costosa) dotazione software, hardware e cloud

Per sviluppare app multipiattaforma, un buon ambiente di lavoro potrebbe essere il seguente:

  • Computer di fascia alta (circa 1500-2000 euro), con schermo grande, SSD capiente, RAM abbondante, capacità di eseguire macchine virtuali pesanti con scioltezza, ben funzionante con una distribuzione GNU/Linux di proprio gradimento e conoscenza, possibilmente una LTS (in modo che sia stabile e che non riceva troppi aggiornamenti); in alternativa (e sarebbe pure meglio per i motivi sotto riportati), un Mac, sempre di fascia alta (circa 3000 euro).
     
    Osservazioni:

    • Personalmente starei lontano da Windows quantomeno perché è un ricettacolo di virus e malware vari.
    • L'uso di macchine virtuali non è un requisito, ma può agevolarci molto durante il coding: poter fare più snapshots durante il lavoro (senza esagerare e ogni tanto rimuovendoli tutti, per una questione di prestazioni) è un'enorme comodità per poter tornare a un punto precedente del codice e della configurazione della piattaforma di sviluppo. Il mio ambiente di lavoro, quello dove programmo, si trova infatti dentro una macchina Virtualbox. Un'ulteriore comodità è il fatto di poter esportare la macchina virtuale in un unico file, agevolando backup completi e permettendoci di riutilizzarla anche su un altro computer.
       
      Situazioni in cui è necessario utilizzare MacOS e possibili alternative:

      • Di norma non serve, anzi, uno dei punti di forza di Codename One, rispetto ad altre alternative di sviluppo multipiattaforma, è che la compilazione delle app per iOS viene eseguita sui build server di Codename One, affrancando lo sviluppatore dall'esigenza di possede un Mac. Però...
         
      • ... al momento di pubblicare le proprie app sull'App Store di Apple, sarà costretto ad usare un computer con MacOS per l'upload dell'app: il problema è facilmente risolvibile con un abbonamento temporaneo a MacInCloud (20 euro circa per un uso saltuario). Suggerisco a chi usa Linux di collegarsi a MacInCloud tramite il software "Remmina".
         
      • Prima o poi ogni sviluppatore Codename One sufficiente esperto e avventuroso potrebbe aver bisogno di Xcode per scrivere "interfacce native". Per il momento, è prematuro spiegare cosa sono le interfacce native: ai principianti sicuramente non interessa, è un argomento complesso che richiede la padronanza di più linguaggi di programmazione e, soprattutto, per imparare a sviluppare app multipiattaforma con Codename One non sono necessarie le interfacce native... però, prima o poi, anche i principianti diventano esperti e allora un computer (reale o virtuale) con MacOS sarà indispensabile per lo sviluppo di interfaccie native. Per chi come me usa Linux, le possibilità sono:
        • riuscire a virtualizzare MacOS (il che è difficile e ha seri limiti, comunque ci sono queste istruzioni: io riesco a collegare l'iPhone via usb a un MacOS virtualizzato); da notare, comunque, che né Apple né Virtualbox supportano ufficialmente la virtualizzazione di MacOS, o meglio, il punto critico è proprio il collegamento via usb dell'iPhone alla macchina virtuale (anche riuscendo a farlo funzionare, un qualsiasi aggiornamento di Virtualbox o di MacOS potrebbe renderlo inutilizzabile).
        • procurarsi un computer Mac reale aggiornato;
        • acquistare un abbonamento "Dedicated plan" a MacInCloud, con l'addon di Xcode (in tutto viene circa 70-100 euro al mese, a seconda delle opzioni scelte) e provare a seguire le istruzioni "How do I connect my physical iPhone or USB device to the server?" per MacInCloud; preciso che non ho mai tentato questa strada e che i software richiesti (come Flexihub e USB Gate) hanno costi annuali e non so se funzionano su Linux.
  • Nel computer, reale o virtualizzato, in cui si desidera iniziare a programmare, per prima cosa è necessario installare Java, nello specifico suggerisco Oracle Java 8 (tra le varie versioni di Java esistenti, attualmente siamo arrivati alla versione 13), per i motivi che già ho descritto qui. Il download è gratuito, previa registrazione sul sito di Oracle. Per chi usa Debian, Ubuntu o Linux Mint ho scritto alcune istruzioni nell'articolo "How to install Oracle Java8 JDK 8u211 / 8u212 or later on Debian / Ubuntu / Linux Mint from deb".
     
  • E' necessario un IDE, cioè l'ambiente di sviluppo vero e proprio. Per chi non ha preferenze particolari, consiglio Netbeans (le altre opzioni compatibili con Codename One sono Eclipse e Intellij IDEA): un paio di motivi per questa scelta è che in quasi tutti i tutorial gratuiti e a pagamento di Codename One viene utilizzato Netbeans, inoltre anche l'ultima versione di Netbeans (nel momento in cui scrivo è la 11.2) è compatibile con Java 8.

    Osservazioni:

    • Preciso, per completezza, che io non scarico Netbeans dal sito ufficiale precedentemente linkato: preferisco scaricarlo dal sito di Jeddict, in quanto la versione di Netbeans lì fornita è già integrata di tools che torneranno utili per lo sviluppo lato server. A proposito: Jeddict richiede proprio Java 8, e non altre versioni di Java.
       
    • Un piccolo trucchetto: Netbeans su Linux, nel caso di schermi ad alta densità, può apparire con caratteri microscopici, in tal caso è sufficiente specificare la dimensione dei caratteri come parametro per il suo lanciatore, ad es.: /home/francesco/NetBeans_IDE_10.0/bin/netbeans --fontsize 20
       
    • Sempre su schermi ad alta densità, anche le finestre del plugin di Codename One per Netbeans su Linux possono apparire con caratteri microscopici (ad es. la finestra "CodenameOne Settings"). In tal caso, è possibile specificare un fattore di zoom prima di avviare Netbeans, specificando la variabile d'ambiente Bash "CN1_FONT_SCALE". Ad esempio, io avvio Netbeans su Linux tramite questo script Bash:
      #!/bin/bash
      export CN1_FONT_SCALE=1.7
      /home/francesco/NetBeans_IDE_10.0/bin/netbeans --fontsize 20
       
  • Abbonamento a Codename One: suggerisco di iniziare con il piano Professional (circa 80 euro al mese), meglio ancora sarebbe il piano Enterprise (circa 400 euro al mese); comunque ci sono anche piani di abbonamento più economici (che però non mi sento di consigliare, in particolare la funzionalità di "crash report" fornita con il piano Professional è molto utile in fase di debugging del codice). Da notare che il piano Enterprise dà accesso anche ad assistenza telefonica (in inglese) e alla possibilità di richiedere soluzioni personalizzate (con prezzi pensati per le aziende).
     
  • Plugin di Codename One per Netbeans: sebbene sia facilmente installabile in quanto già elencato tra i plugins disponibili, suggerisco di usare le istruzioni specifiche per Codename One riportate alla pagina "NetBeans Plugin Update Center", in quanto ciò permetterà di ricevere più velocemente gli aggiornamenti.
     
  • Database MySql e PhpMyAdmin: serviranno per lo sviluppo lato server.
     
  • Iscrizione su Google Play Console: la quota di iscrizione una tantum era circa di 20 euro (qualche anno fa, non so quanto sia attualmente). Questa iscrizione è necessaria per poter pubblicare le app nello store di Android.
     
  • Iscrizione su Apple Developer Program, costa circa 100 euro all'anno. Nota bene: tale iscrizione è necessaria persino per poter provare le proprie app sul proprio iPhone!
     
  • Abbonamento a Browser Stack App Live, costa circa 40 euro al mese: è una device farm, è uno strumento estremamente utile, permette infatti di provare le proprie app su vari modelli di smartphone Android e iPhone, su tablet Android e iPad. E' molto semplice da usare, e permette di vedere tutti i log generati dall'app.
     
  • Possesso di almeno un iPhone recente e aggiornato (circa 1300-1500 euro). L'ideale sarebbe possedere più modelli.
     
  • Possesso di almeno uno smartphone Android recente e aggiornato (in questo caso c'è un'ampia casistica di prezzi, comunque in generale molto più contenuti rispetto agli iPhone). L'ideale sarebbe possedere più modelli.
     
  • Possesso di almeno un tablet Android e di un iPad se si intende sviluppare anche per tablet.
     
  • Abbonamento per l'uso di uno o più VPS, necessari per lo sviluppo lato server. Io mi trovo bene con Aruba Cloud VPS Pro (anche per l'assistenza tecnica in italiano, compresa quella telefonica), comunque ci sono molte altre soluzioni sul mercato. Il prezzo dipende dal servizio acquistato, suggerisco di orientarsi verso un servizio che permetta di fare facilmente backup dell'intero VPS e anche di scaricarli sul proprio computer (come soluzione per disaster recovery).
     
  • Abbonamenti vari a servizi cloud in base a ciò che si intende sviluppare.

A tutti questi costi iniziali, in previsione ne andrà aggiunto un altro: se le proprie app comprenderanno la possibilità di fare acquisti in-app, il 30% del prezzo pagato dagli utenti andrà alle casse di Google e di Apple.

In sintesi, sebbene il singolo sviluppatore novizio che intenda imparare a programmare app multipiafforma potrebbe cavarsela con un costo iniziale in hardware, software e servizi cloud di poche migliaia di euro (suppongo 5000 euro), a cui poi si sommeranno i costi mensili dei servizi acquistati (compresi i corsi online per imparare a programmare), nel caso di sviluppatori più esperti, che abbiano progetti di una certa importanza tra le mani, i costi iniziali e quelli mensili potrebbero essere ben più consistenti. Come ordine di grandezza dei costi, alcuni servizi cloud possono costare centinaia o migliaia di euro al mese. Nel caso di collaborazioni esterne, il costo medio degli sviluppatori freelance specializzati in Codename One è circa 70 euro all'ora, mentre gli sviluppatori altamente specializzati in Codename One chiedono anche 100 euro all'ora: una specializzazione in Codename One, al di là della passione personale, comunque fondamentale, ha quindi un'alto valore anche economico.

Tutto questi costi iniziali sono per un singolo sviluppatore e le cifre che ho indicato sono quelle minime. Normalmente per fare un'app serve un team: non sorprende quindi che il costo complessivo dello sviluppo di un'app, soprattutto in ambito aziendale, è molto elevato.


Documentazione di riferimento di Java: un manuale completo e altre indicazioni

Per i motivi già esposti nel precedente articolo, suggerisco il manuale di Java 8 di Claudio De Sio Cesari. In rete si trova abbastanza facilmente sia l'epub sia il pdf, attualmente è ancora in vendita anche l'edizione cartacea.

Ad ogni modo, non è necessario studiarlo tutto, alcune parti non servono con Codename One. Nello specifico, suggerisco di concentrarsi su:

  • Modulo 1, introduzione a Java 8
  • Modulo 2, componenti fondamentali di un programma Java
  • Modulo 3, identificatori, tipi di dati e array
  • Modulo 4, operatori e gestione del flusso di esecuzione
  • Modulo 5, incapsulamento ed visibilità
  • Modulo 6, ereditarietà e interfacce
  • Modulo 7, polimorfismo
  • Modulo 8, eccezioni e asserzioni (soprattutto le eccezioni, la parte sulle asserzioni può anche essere saltata)

Il resto del libro non è necessario, tranne il paragrafo 15.1, che riguarda le espressioni lambda, che vanno conosciute.

Oltre a questa risorsa di studio, in Rete riguardo a corsi Java c'è di tutto e di più. Su udemy ho visto alcuni corsi interessanti.

Sia ben chiaro, però, che la conoscenza degli argomenti sopra elencati riguardanti Java è un prerequisito per imparare a usare Codename One, che richiede ulteriore studio e appositi corsi.

Segnalo inoltre una relativamente breve Introduzione a Java scritta da me molti anni fa (al tempo di Java 5) e che ha riscosso abbastanza successo, in quanto è stata ripubblicata su vari siti: https://www.galgani.it/pdf/java.pdf


Documentazione di riferimento di Codename One: tutorials, manuale per gli sviluppatori, Codename One Accademy

Risorse principali:

Per un elenco più completo di risorse e tutorial su Codename One, rimando all'articolo: Tutorials & Resources - Learn Java on Mobile videos courses for iOS, Android etc


Supporto tecnico per gli sviluppatori che usano Codename One

Consiglio di leggere questo articolo che spiega le varie modalità di supporto: Clarifying our Support. Ad ogni modo, il consiglio principale è di familiarizzare con Stack Overflow.

Alla prossima lezione,
Francesco Galgani,
14 dicembre 2019

Classificazione: