Come costruire un backend per la vostra applicazione iOS?
Le applicazioni iOS, come le applicazioni web, richiedono un modo per archiviare e tenere traccia dei dati. Sia che i dati siano archiviati su un servizio di backend nel cloud o su un server costruito localmente ed eseguito personalmente, un backend è essenziale per gestire i dati degli utenti.
Tuttavia, costruire un backend per la vostra app iOS da zero può essere un compito scoraggiante, soprattutto se non siete esperti di sviluppo iOS e di backend.
In questa esercitazione imparerete a costruire un backend per la vostra applicazione iOS. Innanzitutto, forniremo una panoramica dello sviluppo iOS e ne discuteremo i vantaggi e i limiti.
Quindi, esplorerete le diverse opzioni di backend disponibili. Infine, imparerete a utilizzare Back4App, un Backend as a Service (BaaS), come backend per la vostra applicazione iOS.
Contents
Panoramica di iOS
Apple ha sviluppato iOS come sistema operativo principale per alimentare le app mobili costruite sui suoi iPhone, iPad e iPod Touch.
La creazione di queste app e la loro ottimizzazione per funzionare sulla piattaforma iOS, come progettato da Apple, si chiama sviluppo iOS. Le app iOS vengono scritte utilizzando due linguaggi di programmazione, Objective-C e, più recentemente, Swift.
Objective-C era il linguaggio principale utilizzato per lo sviluppo di app iOS prima dell’introduzione di Swift nel 2014. Swift è stato progettato per essere un linguaggio più moderno e facile da usare, con caratteristiche come l ‘inferenza di tipo e gli optionals che lo rendono più facile da leggere e scrivere.
Entrambi i linguaggi possono essere utilizzati nello stesso progetto. Questo perché Swift, secondo la documentazione Swift, è stato progettato per essere compatibile con Objective-C e può essere utilizzato per interagire con il codice legacy Objective-C esistente.
Per creare le app iOS, Apple mette a disposizione Xcode, un ambiente di sviluppo integrato (IDE) in cui è possibile scrivere comodamente il codice, costruire e sviluppare le app iOS.
Vantaggi dello sviluppo di applicazioni iOS
Come sviluppatore, la creazione di applicazioni iOS può essere vantaggiosa nei seguenti modi:
Esperienza utente di alta qualità
Le app iOS sono note per la loro eccezionale esperienza utente, con design intuitivi e curati che gli utenti trovano attraenti e facili da usare.
Hanno una linea guida specifica per la progettazione delle app, creata per garantire un’esperienza utente di alto livello, enfatizzando la semplicità, la chiarezza e la coerenza. Questo si traduce in app visivamente accattivanti, con controlli e layout che consentono agli utenti di trovare facilmente ciò di cui hanno bisogno e di completare rapidamente le loro attività.
Inoltre, Apple mette a disposizione degli sviluppatori una serie completa di strumenti di progettazione e risorse per garantire che le loro app soddisfino i più elevati standard di qualità.
Le app iOS sono inoltre ottimizzate per l’hardware e il software specifici dei dispositivi Apple, con conseguenti prestazioni veloci, animazioni fluide e grafica di alta qualità.
Migliore sicurezza
Un altro vantaggio significativo delle applicazioni iOS è il livello di sicurezza offerto. Ciò è dovuto a diversi fattori, a cominciare dal rigoroso processo di revisione dell’App Store di Apple, dalla forte crittografia e dalle funzioni incentrate sulla privacy.
Il processo di revisione dell’App Store è progettato per garantire che tutte le applicazioni dell’App Store soddisfino le rigorose linee guida in materia di contenuti e sicurezza. Ciò include controlli per verificare la presenza di codice maligno, malware e altre potenziali minacce alla sicurezza.
Di conseguenza, è meno probabile che le app iOS contengano codice dannoso o siano utilizzate per attacchi di phishing o altre attività dannose.
Coerenza tra i dispositivi
Le app iOS sono progettate per avere lo stesso aspetto e lo stesso funzionamento su tutti i dispositivi Apple, compresi iPhone, iPad e iPod Touch.
Questa coerenza consente agli utenti di passare facilmente da un dispositivo all’altro senza dover imparare una nuova interfaccia utente o un nuovo sistema di navigazione. Inoltre, garantisce agli sviluppatori di app la possibilità di progettare e realizzare applicazioni che funzionino senza problemi su tutti i dispositivi, senza doversi preoccupare di problemi di compatibilità o di caratteristiche specifiche del dispositivo.
Strumenti per gli sviluppatori
Apple mette a disposizione degli sviluppatori iOS potenti strumenti che facilitano lo sviluppo, il test e il debug delle app iOS.
Questi strumenti includono l’SDK di iOS, Xcode e una serie di altri strumenti e risorse che aiutano a ottimizzare l’esperienza degli sviluppatori e la qualità delle app realizzate.
Limitazioni dello sviluppo di applicazioni iOS
L’esperienza di sviluppo di iOS non è impeccabile. Lo sviluppo di un’applicazione iOS presenta alcune limitazioni. Alcune di queste includono.
Compatibilità limitata dei dispositivi
Una delle principali frustrazioni che si incontrano nello sviluppo di applicazioni iOS è la scarsa compatibilità con i dispositivi. Al mondo d’oggi esiste un’ampia gamma di produttori di dispositivi mobili e un’altrettanto ampia gamma di utenti dedicati.
Tuttavia, le applicazioni iOS funzionano solo sull’hardware di Apple. Ciò significa che le applicazioni possono essere utilizzate solo su iPhone, iPad e iPod Touch. Questo limita il pubblico potenziale di un’applicazione creata e la circoscrive all’ecosistema Apple.
Sebbene Apple abbia un’ampia base di utenti, la limitata compatibilità dei dispositivi delle applicazioni iOS può essere uno svantaggio se si vuole raggiungere un pubblico più ampio al di fuori di Apple.
Processo di approvazione dell’App Store
Il processo di revisione dell’App Store di Apple è noto per essere severo e può richiedere più tempo rispetto ad altri app store, come Google Play.
Il processo di revisione è progettato per garantire che tutte le app sull’App Store soddisfino le linee guida di Apple in materia di qualità, sicurezza e contenuti. Tuttavia, può essere una sfida a causa dei lunghi tempi di attesa, che ritardano il rilascio dell’app al pubblico.
Ecosistema chiuso
Apple controlla strettamente l’hardware e il software dei suoi dispositivi, il che significa che solo il software e l’hardware approvati da Apple possono essere utilizzati con i dispositivi iOS. Il loro ecosistema chiuso limita anche il potenziale di personalizzazione e può creare ostacoli se si desidera offrire maggiore flessibilità agli utenti della propria applicazione.
Questo sistema chiuso renderà più difficile per gli sviluppatori l’integrazione con servizi e API di terze parti.
Opzioni di backend per le applicazioni iOS
Ora che conoscete i vantaggi e i limiti dello sviluppo di applicazioni iOS, dovreste comprendere le diverse opzioni di backend disponibili per la vostra applicazione iOS.
IaaS
L’Infrastructure as a Service (IaaS) è un modello di cloud computing in cui un fornitore di terze parti offre risorse informatiche virtualizzate su Internet agli utenti che ne hanno bisogno per eseguire software personali.
Utilizzare un sistema IaaS equivale a noleggiare un computer virtuale da un fornitore terzo. Invece di acquistare e conservare un computer, si può accedere a un computer che il provider ospita su Internet.
Questo computer è semplicemente una rappresentazione virtuale di un computer reale, con tutte le infrastrutture di base fornite per costruire il proprio ambiente di calcolo virtuale con caratteristiche quali spazio di archiviazione, potenza di elaborazione e memoria.
Il provider vi garantisce l’accesso a questo computer virtuale, dove potete eseguire il vostro software e le vostre applicazioni senza dovervi preoccupare dell’hardware fisico o della manutenzione.
Con i servizi IaaS, è possibile aumentare o diminuire le dimensioni a seconda delle necessità e pagare solo per ciò che si utilizza. Esempi di servizi IaaS sono Amazon Web Services (AWS), Microsoft Azure e Google Cloud Platform.
PaaS
Platform as a Service (PaaS) è un altro modello di cloud computing simile a IaaS. I fornitori di PaaS offrono una piattaforma preconfigurata con una personalizzazione minima, rendendo più facile e veloce la creazione e la distribuzione delle applicazioni.
La differenza principale tra IaaS e PaaS è il livello di controllo sull’infrastruttura sottostante.
Con l’IaaS, il fornitore offre risorse informatiche virtualizzate, come server e storage, tramite Internet. Allo stesso tempo, il cliente ha il controllo completo dell’ambiente virtuale, compreso il sistema operativo, il middleware e le applicazioni.
Con il PaaS, invece, il fornitore offre una piattaforma preconfigurata per i sistemi operativi, il middleware e altri componenti software necessari per lo sviluppo e la distribuzione delle applicazioni. Il cliente deve solo concentrarsi sullo sviluppo dell’applicazione, mentre il provider PaaS si occupa dell’infrastruttura sottostante.
Esempi di servizi PaaS sono Heroku, Google App Engine e Microsoft Azure App Service.
BaaS
Con il Backend as a Service (BaaS), è possibile integrare facilmente un backend cloud nella propria applicazione senza dover costruire o gestire l’infrastruttura sottostante.
I fornitori di BaaS offrono servizi di backend precostituiti non comunemente forniti con PaaS o IaaS, come database, autenticazione degli utenti, archiviazione dei file, funzioni serverless e notifiche push. Ora è possibile integrare questi servizi nelle proprie applicazioni attraverso un’API o un SDK.
Questo elimina la necessità di costruire e mantenere la propria infrastruttura di backend, consentendo di concentrarsi sulla creazione del front-end dell’applicazione. Esempi di servizi BaaS sono Back4App, Firebase e 8Base.
Qual è il costo dello sviluppo di un backend per un’applicazione iOS?
Lo sviluppo di un backend per un’applicazione iOS può avere costi diversi a seconda di vari fattori, tra cui il tempo, le risorse e le risorse umane necessarie.
Il tempo impiegato per costruire e configurare il backend è un fattore significativo da considerare. Il tempo necessario per costruire il backend dipende dalla complessità delle funzionalità dell’applicazione e dall’integrazione del backend con l’applicazione.
Può anche richiedere tempo aggiuntivo per i test, il debug e la distribuzione. Quanto più complesse sono le funzionalità dell’app, tanto più lungo può essere lo sviluppo del backend, con conseguente aumento dei costi.
Le risorse umane necessarie per sviluppare il backend sono un altro fattore critico che incide sui costi. Assumere e mantenere sviluppatori esperti può essere costoso e il costo della formazione e dello sviluppo può aggiungersi al costo complessivo dello sviluppo del backend.
Il costo dello sviluppo di un backend per un’app iOS può essere gestito sfruttando le soluzioni di backend esistenti, come Back4app.
Come costruire il backend di un’app iOS con Back4app?
Back4App è una piattaforma Backend as a Service (BaaS) con un’infrastruttura backend già pronta per lo sviluppo di applicazioni mobili e web. Fornisce un’infrastruttura di backend potente e scalabile, che comprende la gestione del database, l’autenticazione degli utenti, le notifiche push e altro ancora.
Back4App è un’ottima opzione come backend per la vostra app iOS per diversi motivi. In primo luogo, offre un’interfaccia semplice e intuitiva che facilita la gestione dei dati e delle API.
In secondo luogo, offre una documentazione completa che guida l’utente in ogni fase del processo di sviluppo. Inoltre, Back4App fornisce un cloud hosting scalabile in grado di gestire le esigenze di qualsiasi applicazione, grande o piccola, e offre funzionalità di sicurezza di alto livello.
Seguendo i passaggi illustrati di seguito, è possibile creare un backend per app iOS utilizzando Back4App.
Fase 1: Registrazione di un account gratuito Back4app
Per creare un’infrastruttura di backend per la vostra app iOS, registrate un account Back4App gratuito sul sito ufficiale. Con il vostro account Back4App, avrete la possibilità di creare e configurare il backend per la vostra app iOS e di gestire tutti i processi relativi ai dati da tale app.
Per iscriversi a un account gratuito, visitate il sito web di Back4App e registratevi utilizzando un account Google, un account GitHub o un indirizzo e-mail.
Passo 2: creare una nuova app
Ora che avete un account Back4App, potete accedere e procedere alla creazione di una NUOVA APP. Il pulsante per farlo si trova nell’angolo in alto a destra della pagina del vostro account. Dovete selezionare l’opzione Backend as a Service per la vostra applicazione.
Procedete a dare un nome appropriato alla vostra nuova applicazione e premete il pulsante Crea.
Back4App costruirà ora la vostra applicazione e vi farà accedere alla sua dashboard.
Passo 3: Collegare l’app iOS a Back4app
Il passo successivo consiste nel collegare l’app iOS al backend Back4App. A tale scopo, è necessario installare l’SDK Parse nella propria app iOS. L’app utilizzerà questo SDK per ottenere un collegamento diretto al backend.
Prima di impostare la connessione, è necessario disporre di un’applicazione iOS funzionante con cui lavorare. Come già accennato, le applicazioni iOS sono costruite con Xcode, l’IDE di Apple per lo sviluppo di software Apple.
Per poter seguire questa guida è necessario che sul computer Mac sia installata una versione recente di Xcode (versione 13.0.0 o successiva). Alcuni degli strumenti e delle funzioni che utilizzerete in questa guida sono disponibili solo in queste versioni di Xcode.
Iniziate lanciando Xcode e creando un nuovo progetto di app iOS in Xcode:
Verrà richiesto di inserire un nome per l’applicazione e alcune informazioni di configurazione. Assicuratevi di selezionare SwiftUI come interfaccia di scelta.
L’interfaccia SwiftUI utilizza un sistema di visualizzazione diverso da quello dell’interfaccia StoryBoard, che è stata gradualmente eliminata. Di conseguenza, nella struttura attuale del progetto manca un file AppDelegate.swift
. È necessario creare questo file, poiché ne avremo bisogno più avanti nella guida.
Creare AppDelegate.swift
e importare il seguente codice nel file:
import SwiftUI
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
return true
}
}
Ora, all’interno di App
, nel file principale del progetto, copiate e incollate il seguente codice all’inizio:
@UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
Ora siete pronti a installare l’SDK Parse. L’installazione avverrà con CocoaPods, un gestore di dipendenze open-source per progetti Xcode. Se non l’avete ancora fatto, installate CocoaPods.
Per prima cosa, inizializzare un Podfile per il progetto, eseguendo il comando pods init
in un terminale all’interno della cartella del progetto.
Aprire il file Pod generato con Xcode e specificare l’SDK Parse.
Il vostro file Pod dovrebbe assomigliare a questo:
# Uncomment the next line to define a global platform for your project
#platform :ios, '13.0'
target 'ParseiOS-app' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for ParseiOS-app
pod 'Parse'
end
È quindi possibile installare l’SDK Parse nel progetto con la dipendenza Parse specificata nel Podfile.
Eseguite il seguente comando nel terminale:
pod install
Dopo l’installazione dei pod, il progetto verrà ricostruito come un nuovo file di workspace con estensione .xcworkspace
. Da qui, si lavorerà con l’area di lavoro ricostruita.
L’SDK Parse è stato installato con successo nel progetto.
È possibile che si verifichi un errore di compatibilità con il simulatore della versione iOS dopo aver eseguito l’installazione del pod. In questo caso, modificare il file Pod in modo da includere questo alla fine:
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
end
Il frammento di codice è un hook post-installazione per il vostro Podfile, che vi permette di modificare le impostazioni di compilazione del vostro progetto Xcode dopo che CocoaPods ha finito di installare i pod.
Questo particolare post-installer imposta la versione minima del target di distribuzione per l’iPhone OS a 12.0. È possibile cambiarla in qualsiasi momento assegnando una nuova versione a ['IPHONEOS_DEPLOYMENT_TARGET']
.
Ora installare nuovamente i pod:
pod install
Per completare la connessione dell’app iOS, è necessario collegare l’App ID e la Client Key dell’app Back4App. A tale scopo, accedere alle Impostazioni dell’app nella dashboard e spostarsi su Impostazioni del server > Impostazioni del nucleo.
All’interno di Core Settings, si dovrebbero trovare l’id dell'app
e la chiave client
generata personalmente per il backend Back4App. Copiare e salvare queste chiavi.
Quindi, aprire AppDelegate.swift
e modificare il codice esistente all’interno della funzione didFinishLaunchingWithOptions
.
La funzione dovrebbe assomigliare a questa:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
print("app launched!")
let configuration = ParseClientConfiguration {
$0.applicationId = "PASTE_YOUR_APPLICATION_ID_HERE"
$0.clientKey = "PASTE_YOUR_CLIENT_ID_HERE"
$0.server = "<https://parseapi.back4app.com>"
}
Parse.initialize(with: configuration))
return true
}
Incollare l’id dell'applicazione
e la chiave del cliente
salvati nei segnaposti indicati.
Si deve quindi importare l’SDK Parse in questo file per eliminare eventuali errori di "modulo non trovato"
:
import Parse
La vostra applicazione è ora connessa con successo a Back4App!
Passo 4: Testare il backend
In questa sezione, si testerà la propria app iOS per confermare la possibilità di interagire con il server Back4App e l’app creata.
Verranno testate le operazioni CRUD e l’archiviazione dei dati utilizzando l’SDK Parse.
Al termine del test, si potrà confermare che i dati creati vengono salvati e letti con successo dall’applicazione di backend.
Per memorizzare i dati nel backend si crea un oggetto classe all’interno di Back4app. Per impostazione predefinita, una nuova classe avrà uno schema con tre campi: “objectId”, “createdAt” e “updatedAt”. È possibile aggiungere nuovi campi e righe di dati.
Si creerà un nuovo campo dall’applicazione iOS e si leggeranno i dati memorizzati nella classe creata.
Per prima cosa, all’interno di ContentView.swift
importate il Parse SDK proprio sotto SwiftUI:
import SwiftUI
import Parse
Per verificare che la vostra applicazione possa interagire con il backend, creerete un’interfaccia utente che consenta all’utente di inserire un testo di punteggio e di salvarlo nel backend. L’applicazione sarà anche in grado di accedere al backend, interrogare i dati della classe e visualizzare i punteggi salvati.
All’inizio della struttura View in ContentView.swift
, creare le seguenti proprietà di stato mutabili:
@State private var newScore: Int = ""
@State private var scores: [PFObject] = []
Queste proprietà di stato attivano gli aggiornamenti della vista quando i loro valori cambiano. La prima dichiara una proprietà di stato chiamata newScore
di tipo String
. Rappresenta il valore inserito dall’utente per un nuovo punteggio. È inizializzata con una stringa vuota ""
.
La seconda dichiara una proprietà di stato chiamata scores
di tipo [PFObject]
, che è un array di istanze di PFObject
. Questo rappresenterà i punteggi recuperati dal backend.
La classe PFObject
è un oggetto di classe fornito da Parse-SDK-iOS
che può memorizzare dati. Consente di definire proprietà e valori personalizzati per gli oggetti, che possono poi essere salvati nel backend.
Quindi, all’interno di un elemento VStack
, aggiungete il seguente frammento di codice:
VStack {
TextField("EnterScore", text: $newScore)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
Button("Save Scores") {
saveScore()
}
List(scores, id: \\.objectId) { score in
Text(score["score"] as? String ?? "")
}
}
.padding()
.onAppear {
fetchScores()
}
Si dispone di un campo di testo
in cui gli utenti inseriscono un punteggio. Il parametro text
è legato alla variabile di stato newScore
, il che significa che qualsiasi modifica nel campo di testo si rifletterà nella variabile newScore
.
Poi c’è il pulsante “Salva punteggi” che attiva la funzione saveScore()
quando viene toccato.
Il componente Elenco
visualizza i punteggi recuperati dal backend. Si usa l’array dei punteggi
per popolare l’elenco e il parametro id
specifica un identificatore univoco per ogni voce di punteggio. All’interno dell’elenco, è presente una vista Text
che visualizza il valore del punteggio come stringa.
Si utilizza il concatenamento opzionale e l’operatore nil-coalescing (??
) per gestire i casi in cui il punteggio non è disponibile o è di tipo diverso.
Infine, il modificatore onAppear
è usato per attivare la funzione fetchScores()
quando appare la vista VStack.
A questo punto, si dovrebbe ricevere un errore che indica che saveScores()
e fetchScores()
non possono essere trovati.
Le funzioni verranno create successivamente. Queste funzioni gestiranno rispettivamente la scrittura, il salvataggio dei dati e il recupero dei dati salvati dall’applicazione backend Back4app collegata.
Utilizzare la chiamata al metodo .save()
o saveInBackground()
per salvare la variabile newScore
nel backend:
func saveScore() {
let score = PFObject(className: "GameScore")
score["score"] = newScore
score.saveInBackground { success, error in
if let error = error {
print("Error saving score: \\(error.localizedDescription)")
} else {
print("Score saved sucessfully: \\(String(describing: score.objectId))")
newScore = ""
fetchScores()
}
}
}
Innanzitutto, si crea una nuova istanza di PFObject
con il nome della classe “GameScore”. Questo oggetto rappresenta una nuova voce nel database del backend. Nella riga successiva, si imposta la proprietà “score” dell’oggetto sul valore memorizzato di newScore
.
Successivamente, si chiama il metodo saveInBackground
sull’oggetto score
. L’uso di saveInBackground
avvia un’operazione di salvataggio asincrona eseguita su una coda in background. All’interno della chiusura di completamento, si controlla se si è verificato un errore durante l’operazione di salvataggio e si gestisce l’errore.
Dopo aver salvato il punteggio, si reimposta la variabile di stato newScore
su una stringa vuota per cancellare il campo di testo. Quindi, si richiama la funzione fetchScores()
per aggiornare l’elenco dei punteggi.
All’interno della funzione fetchScores()
, si utilizza PFQuery
di Parse per eseguire query sui dati del backend e recuperare oggetti da una classe specifica. In questo caso, tale classe è la classe GameScore
:
func fetchScores() {
let query = PFQuery(className: "GameScore")
query.findObjectsInBackground { objects, error in
if let error = error {
print("Error fetching scores: \\(error.localizedDescription)")
} else if let objects = objects {
scores = objects
}
}
}
Qui si chiama il metodo findObjectsInBackground
sull’oggetto query per avviare l’operazione di recupero asincrona. All’interno della chiusura di completamento, si possono gestire i risultati della query.
Se si verifica un errore durante l’operazione di recupero, si stampa un messaggio di errore. Altrimenti, se il fetch ha successo e gli oggetti vengono restituiti, si aggiorna la variabile di stato scores
con gli oggetti recuperati. Questi oggetti rappresentano i punteggi recuperati dal backend.
Quando si esegue l’applicazione, si inserisce un nuovo punteggio e si preme il pulsante Salva punteggi, l’applicazione invia e salva il nuovo valore del punteggio al backend e recupera tutti i punteggi salvati. Dovrebbe quindi visualizzare un elenco dei punteggi come nell’immagine seguente.
Si noti come i punteggi corrispondano ai valori del punteggio nel backend.
Questo conferma che il test è stato superato e che la scrittura e la lettura dei dati dal backend di Back4App sono riuscite.
Ora sapete come costruire un backend per le vostre applicazioni mobili iOS utilizzando Back4App e il linguaggio di programmazione Swift.