Quadri Cordova: Ionic vs. Framework7

Pubblicato: 2022-03-11

In questi giorni, gli sviluppatori web governano il mondo. JavaScript è usato ovunque si possa programmare. Tra queste aree, lo sviluppo di app mobili è stato uno dei primi modi per espandersi: circa dieci anni fa, PhoneGap consentiva l'installazione di app HTML e JavaScript per iOS e Android.

Da allora, la tecnologia ha avuto alti e bassi: nonostante la facilità di sviluppo, queste app erano ovviamente molto diverse dalle app native. Vanilla HTML e JavaScript basato su browser erano destinati ai browser e non c'era modo per loro di migrare in modo impeccabile in questo nuovo campo.

Ancora oggi i problemi principali sono:

  • Difficoltà nell'aderire al design e all'animazione nativi
  • Effetti di transizione dello schermo complessi
  • Toccare la gestione degli eventi
  • Prestazioni su grandi liste
  • Posizionamento di elementi fissi
  • Adattamento per diverse dimensioni dello schermo
  • Posizioni degli elementi di controllo nativi (ad esempio, la barra di stato di iOS)
  • Adattamento a diversi browser mobili

Perché utilizzare un framework per le app Cordova?

La tecnologia Cordova è spesso sottovalutata a causa delle app che presentano i problemi di cui sopra. I framework mirano a compensarli e portare le app HTML il più vicino possibile alle app native, sia in termini di design che di prestazioni.

Diamo un'occhiata a un paio di esempi di app ibride. Sono realizzati con i due framework attualmente di maggior successo, oltre all'interfaccia utente Onsen, che sono destinati a facilitare l'espansione degli sviluppatori web nel mondo moderno: Framework7 e Ionic.

Informazioni sulla struttura ionica

Ionic è stato sviluppato da Drifty Co. nel 2012 e si basa su Angular. Da allora, è stato in fase di sviluppo attivo, ricevendo investimenti significativi e una forte comunità di sviluppatori. Il sito Web ufficiale afferma che milioni di app sono state sviluppate sulla base di esso.

Al momento della stesura di questo articolo, la versione più recente è Ionic 3 basata su Angular 5. Ionic 4, che mira alla flessibilità e all'indipendenza da Angular, è in beta iniziale.

Oltre al motore dell'interfaccia utente, una meravigliosa libreria di componenti e un'interfaccia per l'accesso alle funzioni del dispositivo nativo, Ionic offre molteplici funzionalità, servizi e utilità extra.

Il CLI ionico

L'interfaccia della riga di comando di Ionic viene utilizzata per l'inizializzazione interattiva del progetto (ad es. una procedura guidata), la generazione di pagine e componenti e l'esecuzione di un server di sviluppo che consente di creare app in movimento e di ricaricarle in tempo reale. Fornisce inoltre l'integrazione con i servizi cloud di Ionic.

Lab e DevApp

Lab è il mini-servizio estremamente utile che permette di imitare il lavoro dell'applicazione su diverse piattaforme nel browser dello sviluppatore Ionic. DevApp ti aiuta a distribuire rapidamente un'app su un dispositivo reale.

Imballaggio, distribuzione e monitoraggio

Ionic viene fornito con un pacchetto di servizi Web che semplificano e velocizzano la creazione, il debug, il test e l'aggiornamento di applicazioni per tester e utenti.

I piani di Ionic cambiano spesso, però. Alcuni servizi precedentemente esistenti, come Auth, Push, Analytics e View, sono stati chiusi, provocando proteste da parte degli abbonati.

Creatore

Questo è l'editor grafico drag-and-drop di Ionic per lo sviluppo di interfacce funzionali.

Informazioni su Framework7

Questo framework è stato sviluppato nel 2014 dallo studio russo iDangero. Alla fine, uno sviluppatore ha lavorato al progetto, esclusi diversi contributori minori al repository GitHub.

In origine, Framework7 consisteva nell'insieme di componenti dell'interfaccia utente nello stile dell'allora rilasciato iOS 7, da cui prende il nome. Successivamente è stato aggiunto un tema Android ed entrambi i temi sono stati aggiornati per iOS e Material Design più recenti.

Di recente, lo sviluppo del progetto ha accelerato e si è esteso da un insieme di componenti a un quadro completo per applicazioni mobili, integrando tecnologie e strumenti popolari.

Il supporto e gli esempi di Framework7 che utilizzano Vue.js esistono dalla v1 e anche la v3 supporta React. Questo è ciò che potrebbe consentire al progetto di competere seriamente con il più popolare Ionic, che offre solo Angular e TypeScript.

Installazione e primo avvio

Ionico

Per iniziare a lavorare con Ionic, installalo con NPM:

 npm install -g ionic

Quindi, seleziona il modello per l'applicazione futura. Il sito Web ufficiale di Ionic offre più modelli, oppure puoi selezionare un modello vuoto per creare l'applicazione da zero con ionic start myApp blank .

Selezioniamo un design semplice. Esegui il seguente comando:

 ionic start Todo tabs

Rispondi "Sì" quando il programma di installazione chiede "Vuoi integrare la tua nuova app con Cordova per scegliere come target iOS e Android nativi?" Ciò integrerà automaticamente l'applicazione con Cordova e la preparerà per la distribuzione su piattaforme mobili.

Nel passaggio successivo, il programma di installazione si offrirà di connetterci a Ionic Pro SDK. Rispondi "No" per ora per mantenere l'esempio semplice.

Installa il pacchetto aggiuntivo @ionic/lab per ottenere la comoda interfaccia utente di debug, imitazioni nel browser di dispositivi iOS, Android e Windows:

 cd Todo npm i --save-dev @ionic/lab

Ora puoi avviare l'applicazione in modalità debug. Ciò consente di sviluppare ed eseguire il debug dell'applicazione in tempo reale nel browser Web:

 ionic lab

Di conseguenza, otterrai diversi indirizzi utili:

Output di processo "laboratorio ionico".

Il servizio di debug di Ionic Lab viene avviato sulla porta 8200. L'applicazione stessa viene eseguita sulla porta 8100 e il collegamento Apri schermo intero di Ionic Lab conduce lì. La finestra del browser con Ionic Lab in esecuzione si apre automaticamente.

L'interfaccia utente di debug di Ionic Lab, che mostra simulazioni iOS e Android

Inoltre, Ionic fornisce l'indirizzo dell'applicazione nella rete locale . Ciò è estremamente utile, in quanto consente di aprire l'applicazione nel browser del dispositivo mobile, purché il dispositivo sia nella rete locale (ad esempio tramite Wi-Fi). Inoltre, puoi utilizzare il pulsante Aggiungi alla schermata iniziale per riaprire l'applicazione in modalità a schermo intero. Questo è il modo più rapido per testare la tua applicazione sul dispositivo.

Un altro modo è l'applicazione Ionic DevApp, che può essere installata su un dispositivo mobile e fornisce l'accesso all'applicazione tramite la rete locale. Offre supporto plug-in (Ionic Native) per l'accesso alle funzioni del dispositivo nativo e la visualizzazione dei registri.

Quadro7

Gli strumenti di sviluppo di F7 sono meno avanzati di quelli di Ionic e la CLI di inizializzazione automatica non è documentata. Tuttavia, il sito Web ufficiale fornisce diversi repository GitHub con progetti di modelli che ti aiuteranno a iniziare lo sviluppo.

Simile al modello Tabs in Ionic, F7 offre Tabbed Views , ma utilizzeremo un modello più funzionale che integra Framework7 con React. Il supporto per React è stato aggiunto nella v3. Per questo, clona il repository del modello:

 git clone https://github.com/framework7io/framework7-template-react.git Todo

Passa alla cartella del progetto, recupera le dipendenze e avvia il processo:

 cd Todo npm install npm start

I risultati dell'esecuzione sono simili a Ionic: ottieni un collegamento locale e un collegamento all'interno della tua rete per l'accesso istantaneo da un dispositivo reale:

Output del processo "npm start" per Framework7

Ora puoi aprire http://localhost:3000/ in un browser. Framework7 non include emulatori di dispositivi integrati, quindi utilizziamo la modalità dispositivo di Chrome DevTools per ottenere un risultato simile:

Un'applicazione Framework7 in esecuzione nella modalità dispositivo di Chrome DevTools per iOS e Android

Come puoi vedere, Framework7 è simile a Ionic in quanto ha iOS e Material Design come suoi due temi standard. Il tema viene selezionato in base alla piattaforma.

Purtroppo, a differenza di un modello simile con supporto Vue.js nei modelli React ufficiali, Webpack non è ancora implementato e questo ci impedisce di utilizzare Hot Module Replacement per aggiornare rapidamente le applicazioni senza ricaricare la pagina. Tuttavia, puoi utilizzare la funzione di ricarica in tempo reale predefinita, che ricarica la pagina ogni volta che modifichi il codice sorgente.

Allestimento Cordova

Per installare applicazioni su dispositivi ed emulatori con Cordova, devi scaricare e configurare strumenti di sviluppo per iOS e Android, oltre a Cordova CLI. Puoi leggere di più su questo nel nostro articolo precedente e sul sito Web ufficiale di Cordova nelle sezioni Guida alla piattaforma iOS e Guida alla piattaforma Android.

Ionico

L'esperienza dimostra che per risolvere con successo la maggior parte dei problemi di Ionic, è sufficiente il debug basato su browser con test occasionali su dispositivi reali.

Nonostante tu accetti l'integrazione per iOS e Android e Ionic prepari le impostazioni richieste nel file config.xml e le risorse nella cartella resources , devi comunque connettere entrambe le piattaforme all'applicazione con Cordova:

 cordova platform add ios cordova platform add android

Ora puoi avviare l'app Cordova in emulatori "reali", installarla sul dispositivo mobile e persino inviarla all'App Store e a Google Play.

Il comando successivo installa l'applicazione sul tuo dispositivo iOS se è collegato tramite USB. In caso contrario, l'app verrà installata sul simulatore iOS.

 cordova run ios

Molto probabilmente, Xcode Command Line Tools ti informerà sulla necessità di impostare certificati per sviluppatori. Dovrai aprire il progetto in Xcode ed eseguire le azioni richieste. Questo deve essere fatto solo una volta e in seguito sarai in grado di eseguire l'applicazione con Cordova CLI.

A volte iOS Simulator non si avvia automaticamente. In questo caso, avvialo manualmente, ad esempio tramite Spotlight.

L'emulatore Android può essere avviato in modo simile:

 cordova run android 

Emulatori iOS e Android con applicazione Cordova basata su Ionic installato

Si noti che il comando cordova run avvia e installa l'applicazione già compilata , che non utilizza il server ionic serve / ionic lab , quindi Live Reload non funzionerà. Per sviluppare ed eseguire il debug dell'applicazione in tempo reale, utilizzare il browser nella rete locale o installare l'applicazione Ionic DevApp.

L'esperienza dimostra che per risolvere con successo la maggior parte dei problemi di Ionic, è sufficiente il debug basato su browser con test occasionali su dispositivi reali.

Quadro7

Il modello Framework7 "React" scelto in precedenza non fornisce l'automazione della configurazione per Cordova, quindi dovrai aggiungere le piattaforme manualmente. Crea un progetto cordova nella sottocartella cordova della cartella del tuo progetto:

 cordova create cordova/ com.example.todo Todo cd cordova/ cordova platform add ios cordova platform add android cd ../

Il modello è basato sull'app Create React, quindi per eseguire il progetto compilato in un ambiente Cordova è necessario aggiungere la "homepage": "." impostazione sul file ./package.json . Questo file può essere trovato al livello principale del progetto:

L'impostazione richiesta per compilare correttamente Cordova

Compila il progetto Framework7 e copia il risultato nel progetto Cordova:

 npm run build rm -rf cordova/www/* cp -r build/* cordova/www/

Ora puoi avviare l'applicazione su un dispositivo o un emulatore:

 cd cordova/ cordova run ios 

Emulatori iOS e Android con l'applicazione Cordova basata su Framework7 installata


Hai fatto! Speriamo che Framework7 raggiunga lo standard di sviluppo e la comodità di configurazione iniziale di Ionic.

Creazione di elenchi di attività

Ionico

Iniziamo finalmente a creare l'applicazione! Poiché si tratta di un'applicazione da fare, la pagina principale (file src/pages/home/home.html ) conterrà l'elenco delle attività con la possibilità di "contrassegnare completate" e "aggiungere nuove".

Ionic offre i componenti <ion-list> e <ion-item> per gli elenchi. Innanzitutto, rimuovi la proprietà di padding dall'elemento <ion-content> per rendere l'elenco a livello di schermo. Nell'elenco, posiziona il testo utilizzando un elemento <ion-label> e aggiungi un elemento <ion-toggle> per contrassegnare le attività completate.

 <ion-content> <ion-list> <ion-item> <ion-label>Hello</ion-label> <ion-toggle></ion-toggle> </ion-item> <ion-item> <ion-label>Toptal</ion-label> <ion-toggle></ion-toggle> </ion-item> <ion-item> <ion-label>Blog</ion-label> <ion-toggle></ion-toggle> </ion-item> </ion-list> </ion-content>

Torna alla scheda del browser con il servizio Ionic Lab in esecuzione. L'applicazione è stata aggiornata automaticamente:

Il nostro test di layout To Do List statico simulato tramite Ionic Lab in modalità Android e iOS

Grande! Ora sposta i dati dell'attività sull'oggetto JS e imposta la sua presentazione HTML con Angular. Vai al file src/pages/home/home.ts e crea la proprietà delle attività dell'istanza della classe HomePage :

 export class HomePage { tasks = [{ name: 'Hello' }, { name: 'Toptal' }, { name: 'Blog' }]; constructor() { } }

Ora puoi fare riferimento all'array delle tasks nel codice HTML. Utilizzare il *ngFor Angular per creare in modo iterativo elementi di elenco per ciascun elemento dell'array. Il codice diventa più piccolo:

 <ion-list> <ion-item *ngFor="let task of tasks"> <ion-label>{{task.name}}</ion-label> <ion-toggle></ion-toggle> </ion-item> </ion-list>

Non resta che aggiungere il pulsante per creare nuove attività all'intestazione della pagina. A tale scopo, utilizzare i <ion-navbar> , <ion-buttons> , <button> e <ion-icon> :

 <ion-header> <ion-navbar> <ion-title>To Do List</ion-title> <ion-buttons end> <button ion-button icon-only (click)="addTask()"> <ion-icon name="add-circle"></ion-icon> </button> </ion-buttons> </ion-navbar> </ion-header>

Nota la costruzione angolare (click)="addTask()" . Come puoi immaginare, aggiunge il tap handler al pulsante e chiama il metodo addTask() per il nostro componente. Implementiamo questo metodo per aprire la finestra di dialogo del nome dell'attività quando si tocca il pulsante.

Per questo è necessario il componente AlertController Ionic. Per utilizzare questo componente, importane il tipo:

 import { AlertController } from 'ionic-angular';

E specificalo nell'elenco dei parametri del costruttore per la pagina:

 constructor(public alertCtrl: AlertController) { }

Ora puoi chiamarlo nel metodo addTask() . Installalo dopo il controller. È possibile creare e visualizzare la finestra di dialogo con le seguenti chiamate:

 this.alertCtrl .create(/* options */) .present();

Specificare l'intestazione del messaggio, la descrizione del campo e due pulsanti nell'oggetto options . Il pulsante "OK" aggiungerà una nuova tasks all'array delle attività:

 handler: (inputs) => { this.tasks.push({ name: inputs.name }); }

Dopo aver aggiunto l'elemento all'array this.tasks , il componente verrà ricostruito in modo reattivo e una nuova attività verrà visualizzata nell'elenco.

Il codice della pagina intera ora appare così:

 import { Component } from '@angular/core'; import { AlertController } from 'ionic-angular'; @Component({ selector: 'page-home', templateUrl: 'home.html' }) export class HomePage { tasks = [{ name: 'Hello' }, { name: 'Toptal' }, { name: 'Blog' }]; constructor(public alertCtrl: AlertController) { } addTask() { this.alertCtrl .create({ title: 'Add Task', inputs: [ { name: 'name', placeholder: 'Task' } ], buttons: [ { text: 'Cancel', role: 'cancel' }, { text: 'Add', handler: ({ name }) => { this.tasks.push({ name }); } } ] }) .present(); } } 

La nostra applicazione To Do, simulata tramite Ionic Lab in modalità Android e iOS

Reinstallare l'applicazione sul dispositivo:

 cordova run ios

Questo è tutto! Non è così difficile, vero? Ora proviamo a fare lo stesso con Framework7.

Quadro7

I modelli Framework7 sono realizzati per mostrare tutte le funzionalità dei componenti, quindi è necessario lasciare solo la pagina src/components/pages/HomePage.jsx nei file src/components/App.jsx e src/routes.js , ripulirne il contenuto e rimuovere i commenti di codice extra.

Ora crea l'elenco delle attività. Framework7 fornisce i componenti <List simple-list> e <ListItem> per questo. Per posizionare un interruttore di completamento dell'attività, aggiungi il componente <Toggle slot="after"/> . Ricorda di importare tutti questi componenti dal modulo framework7-react . Ora il codice della pagina è simile a questo:

 import React from 'react'; import { Page, Navbar, NavTitle, List, ListItem, Toggle } from 'framework7-react'; export default () => ( <Page> <Navbar> <NavTitle>To Do List</NavTitle> </Navbar> <List simple-list> <ListItem title="Hello"> <Toggle slot="after"/> </ListItem> <ListItem title="Toptal"> <Toggle slot="after"/> </ListItem> <ListItem title="Blog"> <Toggle slot="after"/> </ListItem> </List> </Page> );

E l'applicazione stessa si presenta così:

Il nostro test di layout statico To Do List in esecuzione in Framework7, simulato da Chrome DevTools in modalità Android e iOS

Inizio abbastanza buono. Proviamo a spostare di nuovo i dati statici fuori dal codice HTML. Per questo, usa un componente intelligente invece di quello apolide che avevamo. Importa la classe astratta Component da React:

 import React, { Component } from 'react';

E scrivi l'array delle attività nell'istanza della variabile di state :

 export default class HomePage extends Component { state = { tasks: [{ name: 'Hello' }, { name: 'Toptal' }, { name: 'Blog' }] }; /* ... */ }

È probabile che l'applicazione reale utilizzi un flusso di dati più astratto, ad esempio con Redux o MobX, ma per un piccolo esempio manterremo lo stato del componente interno.

Ora puoi utilizzare la sintassi JSX per creare in modo iterativo elementi di elenco per ogni attività nell'array:

 {this.state.tasks.map((task, i) => ( <ListItem title={task.name} key={i}> <Toggle slot="after"/> </ListItem> ))}

Non resta che aggiungere l'intestazione con il pulsante per creare nuovamente una nuova attività. L'elemento <Navbar> esiste già, quindi aggiungi <Link iconOnly> <NavRight> :

 <Navbar> <NavTitle>To Do List</NavTitle> <NavRight> <Link iconOnly iconF7="add_round_fill" onClick={this.addTask}/> </NavRight> </Navbar>

In React aggiungi gestori di tap utilizzando la proprietà onClick e impostando il puntatore di callback in essa. Implementare il gestore per mostrare la finestra di dialogo del nome dell'attività.

Ogni elemento in Framework7 ha accesso all'istanza dell'applicazione tramite this.$f7 proprietà. Puoi usare il metodo dialog.prompt() in questo modo. Prima di chiudere la finestra di dialogo, chiama il metodo setState() del componente React e passagli la copia dell'array precedente con un nuovo elemento. Questo aggiornerà in modo reattivo l'elenco.

 addTask = () => { this.$f7.dialog.prompt('Task Name:', 'Add Task', (name) => { this.setState({ tasks: [ ...this.state.tasks, { name } ] }); }); };

Ecco il codice completo del componente:

 import React, { Component } from 'react'; import { Page, Navbar, NavTitle, NavRight, Link, List, ListItem, Toggle } from 'framework7-react'; export default class HomePage extends Component { state = { tasks: [{ name: 'Hello' }, { name: 'Toptal' }, { name: 'Blog' }] }; addTask = () => { this.$f7.dialog.prompt('Task Name:', 'Add Task', (name) => { this.setState({ tasks: [ ...this.state.tasks, { name } ] }); }); }; render = () => ( <Page> <Navbar> <NavTitle>To Do List</NavTitle> <NavRight> <Link iconOnly iconF7="add_round_fill" onClick={this.addTask}/> </NavRight> </Navbar> <List simple-list> {this.state.tasks.map((task, i) => ( <ListItem title={task.name} key={i}> <Toggle slot="after"/> </ListItem> ))} </List> </Page> ); }

Controlla il risultato:

La nostra applicazione To Do in esecuzione tramite Framework7, simulata da Chrome DevTools in modalità Android e iOS

Non resta che ricostruire e distribuire sul dispositivo:

 npm run build rm -rf cordova/www/* cp -r build/* cordova/www/ cd cordova/ cordova run ios

Fatto!


Il codice finale per entrambi questi progetti è disponibile su GitHub:

  • ionic-todo-app
  • framework7-react-todo-app

Risultati

Ora hai visto il tutorial completo con ogni framework Cordova. In che modo Framework7 si confronta con Ionic?

Configurazione iniziale

Ionic è molto più facile da installare grazie alla sua CLI, mentre F7 richiede più tempo per selezionare e impostare un modello o per l'installazione passo dopo passo da zero.

Diversità dei componenti

Entrambi i framework hanno un set completo di componenti standard meravigliosamente realizzati in due temi: iOS e Material Design. Ionic fornisce inoltre questi componenti nel tema di Windows e un gigantesco mercato dei temi utente.

Oltre a imitare completamente il design e le animazioni native, viene prestata molta attenzione all'ottimizzazione delle prestazioni, fornendo risultati fantastici: spesso è quasi impossibile distinguere le applicazioni su entrambi i framework da quelle native.

Framework7 fornisce un elenco aggiuntivo di componenti più complessi e utili, come Selezione intelligente , Completamento automatico , Calendario , Elenco contatti , Schermata di accesso , Messaggi e Browser foto . D'altra parte, Ionic fornisce una vasta selezione di componenti creati dall'utente.

Ecosistema e comunità

Ionic ovviamente vince su questi parametri grazie alla sua maggiore durata, al forte supporto finanziario e alla comunità attiva. L'infrastruttura ionica è in continua evoluzione: i servizi di supporto e le soluzioni cloud lasciano il posto a nuovi e il numero di plugin continua a crescere.

Framework7 è migliore che mai, ma manca gravemente del supporto della comunità.

Dipendenze di terze parti

Framework7 è più flessibile per quanto riguarda le soluzioni di terze parti. Il suo più grande punto di forza è probabilmente la possibilità di scegliere se utilizzare Vue o React nel progetto, oltre a Webpack o Browserify. Ionic si basa su Angular e richiede conoscenza in esso (e quindi anche TypeScript).

Tuttavia, di recente, gli sviluppatori di Ionic hanno annunciato una nuova beta di Ionic 4, affermando di essere completamente indipendente dal framework dell'interfaccia utente, non più dipendenze angolari se non le vuoi.

Framework Cordova: ancora un modo potente per sviluppare app mobili multipiattaforma

Se utilizzare Cordova dipende dal progetto specifico. In effetti, la velocità dello sviluppo di app mobili ibride e il supporto di più piattaforme sono i suoi principali vantaggi. Ma è sempre un compromesso e talvolta potresti dover affrontare alcuni difetti che non esisterebbero con un approccio nativo. Questi meravigliosi framework e le loro comunità fanno un ottimo lavoro per ridurre questi difetti e semplificarci la vita. Quindi, perché non provarli?

Relazionato: The Duel: React Native vs. Cordova