Aggiornamento delle applicazioni iOS con GroundControl

L'invio di un aggiornamento all'App Store è inevitabile se si desidera aggiungere importanti miglioramenti a un'applicazione. Tuttavia, è ingombrante e richiede molto tempo per passare attraverso il processo di revisione dell'App Store per semplici modifiche. In questo articolo, ti mostrerò come aggiornare un'applicazione in remoto usando il progetto GroundControl.


introduzione

L'idea alla base di GroundControl è semplice, l'applicazione recupera una lista di proprietà remota e la aggiorna NSUserDefaults con il contenuto della lista di proprietà. Anche se molte applicazioni scaricano i dati da un backend dedicato per aggiornare dinamicamente i loro contenuti, la strategia che presenterò in questo articolo è ideale se un backend dedicato non è un'opzione o supera i requisiti dell'applicazione.

L'installazione discussa in questo tutorial è leggera e poco costosa. Non solo è economico, ma è anche facile da mantenere, fattore spesso trascurato da clienti e sviluppatori.

È importante sottolineare che gli elenchi di proprietà sono ideali per piccoli blocchi di dati e non devono essere utilizzati in sostituzione di un back-end dedicato. Se un'applicazione deve essere aggiornata quotidianamente con nuovi contenuti, la strategia descritta in questo tutorial non la taglierà.

Per illustrare come tutti i diversi pezzi combaciano, costruiremo un'applicazione iOS opportunamente denominata Telecomando. Anche se l'applicazione in sé non farà molto, integrando GroundControl per aggiornare le applicazioni NSUserDefaults diventerà chiaro quanto sia facile aggiornare da remoto un'applicazione con un sovraccarico minimo. Iniziamo.


Passaggio 1: Impostazione del progetto

Crea un nuovo progetto in Xcode selezionando il Applicazione vista singola modello dall'elenco di modelli (figura 1). Dai un nome alla tua domanda Telecomando, inserire un identificativo aziendale, impostare i phone per la famiglia di dispositivi e controllare Utilizzare il conteggio di riferimento automatico. Assicurati di deselezionare le caselle di controllo rimanenti per questo progetto. Dillo a Xcode dove vuoi salvare il tuo progetto e colpisci il Creare pulsante (figura 2).


Passaggio 2: GroundControl

Il nome Mattt Thompson potrebbe sembrarti familiare. È uno dei creatori e la forza trainante di AFNetworking, la libreria di rete più popolare per iOS e OS X. GroundControl è basato su AFNetworking e offre una soluzione semplice per configurare da remoto un'applicazione, aggiornando le applicazioni dell'applicazione. NSUserDefaults. Lo fa attraverso una categoria su NSUserDefaults, che permette NSUserDefaults per aggiornarsi in modo asincrono con un elenco di proprietà remote.

Non importa dove si trova l'elenco delle proprietà finché può essere raggiunto tramite il protocollo HTTP (S) e il tipo di contenuto della risposta è impostato su application / x-plist.

Nella pagina GitHub di GroundControl, Mattt fornisce due esempi su come implementare il lato server della storia, una implementazione Ruby e una implementazione Python. Tuttavia, ti ho promesso che l'installazione sarebbe stata leggera e poco costosa. Invece di utilizzare un server che è necessario mantenere, lo useremo Servizio di archiviazione semplice di Amazon o S3. Come ho spiegato in precedenza, i requisiti sono semplici, ovvero (1) il file deve essere un elenco di proprietà e (2) il tipo di contenuto della risposta deve essere application / x-plist. Amazon S3 è una soluzione perfetta.

AWS S3 non solo è perfetto per servire file statici, ma si è guadagnato le sue strisce nel corso degli anni. Anche se la tua applicazione raggiunge i primi 10 nell'App Store, S3 continuerà a pubblicare l'elenco delle proprietà senza problemi. Prima di passare alla console AWS (Amazon Web Services), devi prima integrare GroundControl nel tuo progetto.


Passaggio 3: aggiunta di AFNetworking e GroundControl

GroundControl è basato su AFNetworking, il che significa che devi aggiungere AFNetworking al tuo progetto Xcode. Anche se potremmo aggiungere AFNetworking e GroundControl usando CocoaPods, aggiungeremo entrambe le librerie manualmente poiché alcuni di voi potrebbero non avere familiarità con CocoaPods. Scarica l'ultima versione di AFNetworking e GroundControl e trascina ogni libreria nel tuo progetto Xcode. Assicurati di copiare il contenuto della cartella nel tuo progetto selezionando la casella di controllo Copia gli elementi nella cartella del gruppo di destinazione (se necessario) e non dimenticare di aggiungere entrambe le librerie alla destinazione Remote Control (figure 3 e 4).

AFNetworking si basa su Configurazione di sistema e Servizi di base mobile quadri per alcune delle sue funzionalità. È quindi necessario collegare il tuo progetto a questi quadri. Seleziona il tuo progetto nel Project Navigator e selezionare il Telecomando bersaglio dalla lista di obiettivi. Scegliere Costruisci fasi in alto, apri il Collega binario con le librerie cassetto e aggiungi entrambe le strutture al tuo progetto (figura 5).

Prima di iniziare a lavorare con AFNetworking e GroundControl, è necessario aggiornare i progetti Prefix.pch file aggiungendo una dichiarazione di importazione per i framework che abbiamo appena aggiunto al progetto. Dai uno sguardo allo snippet qui sotto per un chiarimento.

 // // Intestazione prefisso per tutti i file di origine della destinazione "Controllo remoto" nel progetto "Controllo remoto" // #import  #ifndef __IPHONE_4_0 #warning "Questo progetto utilizza funzionalità disponibili solo in iOS SDK 4.0 e versioni successive." #endif #ifdef __OBJC__ #import  #importare  #importare  #importare  #finisci se

Passaggio 4: integrazione di GroundControl

Iniziamo aggiungendo due istruzioni di importazione al file di implementazione del delegato dell'applicazione, uno per AFNetworking e un altro per GroundControl. Se si finisce per utilizzare AFNetworking in vari punti del progetto, potrebbe essere una buona idea aggiungere l'istruzione import per AFNetworking al progetto Prefix.pch file.

 #import "AFNetworking.h" #import "NSUserDefaults + GroundControl.h"

Integrare GroundControl è la parte facile in quanto richiede solo due linee di codice. Nel delegato dell'applicazione applicationDidBecomeActive: metodo, chiamiamo un metodo di supporto per inizializzare GroundControl.

 - (void) applicationDidBecomeActive: (applicazione UIApplication *) // Initialize GroundControl [self initializeGroundControl]; 

Il metodo di supporto non potrebbe essere più semplice grazie alla categoria su NSUserDefaults fornito da GroundControl. Creiamo l'URL per l'elenco di proprietà e lo passiamo come argomento in registerDefaultsWithURL:. Ciò garantirà che l'elenco delle proprietà sia scaricato in modo asincrono. Una volta scaricato, NSUserDefaults viene automaticamente aggiornato con i contenuti della lista di proprietà.

 - (void) initializeGroundControl NSURL * url = [NSURL URLWithString: @ "https://www.example.com/RemoteControl.plist"]; [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL: url]; 

Un'altra opzione è chiamare registerDefaultsWithURL: il successo: il fallimento: preferibilmente se preferisci lavorare con callback riusciti e falliti. Per un controllo ancora maggiore, GroundControl fornisce un terzo metodo, registerDefaultsWithURLRequest: il successo: il fallimento:. Questo metodo accetta un'istanza di NSURLRequest così come un blocco di successo e fallimento.

Potrebbe sorprendervi, ma l'integrazione di GroundControl è stata la parte difficile. Gli ultimi due passaggi sono (1) creando la lista di proprietà e (2) caricandola su S3 di Amazon.


Passaggio 5: creare un elenco di proprietà

Crea un nuovo file in Xcode selezionando il Risorsa scheda a sinistra e scelta Elenco delle proprietà a destra (figura 6). Nominare il file RemoteControl e salvarlo sul desktop del tuo computer. Non è necessario aggiungerlo al tuo progetto Xcode. Il modo più semplice per modificare l'elenco delle proprietà è in Xcode. Dai uno sguardo allo screenshot qui sotto per vedere come appare l'elenco delle proprietà e può essere modificato in Xcode (figura 7). Tieni presente che un elenco di proprietà può contenere solo valori booleani, date, numeri, dati binari, stringhe, matrici e dizionari. È consigliabile assegnare un nome ai tasti (ad esempio, con il prefisso di classe del progetto) per assicurarsi che non siano in conflitto con altre voci memorizzate in NSUserDefaults.

Passaggio 6: carica l'Elenco proprietà

Per utilizzare i servizi Web di Amazon, è necessario un account Amazon. I costi associati a S3 di Amazon sono estremamente bassi e le probabilità sono che non ti verrà addebitato nemmeno per un po 'di tempo poiché l'elenco delle proprietà ha solo pochi kilobyte di dimensione.

Puoi caricare l'elenco di proprietà su Amazon S3 utilizzando la Console AWS di Amazon o utilizzando un'applicazione che supporta Amazon S3, come ad esempio il fantastico Transmit di Panic.

Dopo aver caricato la lista delle proprietà, ci sono tre cose da fare, (1) copiare l'URL della lista delle proprietà, (2) concedere l'accesso pubblico alla lista delle proprietà e (3) impostare il tipo di contenuto corretto.

Copia l'URL

Nella Console AWS, seleziona l'elenco delle proprietà e fai clic su Proprietà pulsante in alto a destra. Seleziona la scheda denominata Dettagli nel pannello delle proprietà (figura 8). Copia il link dell'elenco delle proprietà e aggiorna il initializeGroundControl metodo nell'applicazione delegare con l'URL corretto.

Concedi l'accesso pubblico

Seleziona la scheda denominata permessi nel pannello delle proprietà e aggiungi un nuovo set di autorizzazioni all'elenco delle proprietà facendo clic su Aggiungi più permessi pulsante. Imposta il concessionario a Tutti e limitare le autorizzazioni a Apri / Scarica. Questo farà in modo che la tua applicazione possa scaricare l'elenco delle proprietà. Non dimenticare di fare clic sul pulsante Salva per propagare le modifiche.

Imposta il tipo di contenuto

Seleziona la scheda denominata Metadati nel pannello delle proprietà e impostare il valore della chiave Tipo di contenuto a application / x-plist. Non dimenticare di fare clic sul pulsante Salva per propagare le modifiche.


Passaggio 7: costruisci ed esegui

La tua applicazione è ora pronta per essere aggiornata da remoto. Il modo in cui la tua applicazione risponde alle modifiche apportate dall'elenco delle proprietà dipende dalla tua applicazione. Questo articolo mostra solo quanto sia facile aggiornare da remoto un'applicazione senza dover inviare una nuova versione all'App Store.

Puoi verificare se tutto funziona modificando leggermente il file initializeGroundControl metodo. Invece di invocare registerDefaultsWithURL:, noi usiamo registerDefaultsWithURL: il successo: il fallimento: fornito da GroundControl. Se hai implementato GroundControl correttamente, il dizionario del blocco di successo dovrebbe contenere i dati dell'elenco delle proprietà. La tua applicazione NSUserDefaults sarà aggiornato automaticamente.

 - (void) initializeGroundControl NSURL * url = [NSURL URLWithString: @ "https://s3.amazonaws.com/com.mobiletuts.bartjacobs/RemoteControl.plist"]; [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL: url success: ^ (NSDictionary * defaults) NSLog (@ "Defaults>% @", defaults);  errore: ^ (errore NSError *) NSLog (@ "Errore>% @ con informazioni utente% @.", errore, [errore userInfo]); ]; 

Dropbox

L'immenso successo e il rapido tasso di adozione di Dropbox ha portato all'emergere di numerose applicazioni intelligenti e utili. Per le persone che non hanno familiarità con AWS e Xcode, potrebbe essere più semplice lavorare con Dropbox. Anche se Dropbox è un'ottima soluzione e offre la possibilità di rendere un file pubblicamente accessibile posizionandolo nella cartella pubblica Dropbox, Dropbox non può essere utilizzato con la versione corrente di GroundControl. Il motivo è che il tipo di contenuto di un elenco di proprietà servito da Dropbox viene impostato automaticamente su text / plain invece del necessario application / x-plist. AFNetworking genera un errore dovuto al fatto che il tipo di contenuto richiesto non corrisponde application / x-plist.

Tuttavia, è possibile utilizzare Dropbox per aggiornare da remoto un'applicazione. L'avvertenza è che dovrai eseguire un po 'di sollevamento pesante, ovvero scaricare in modo asincrono l'elenco delle proprietà e aggiornare l'applicazione NSUserDefaults.

Nonostante l'utilità della cartella pubblica Dropbox, il suo futuro è incerto. Inoltre, non è chiaro se sia stato imposto un limite di larghezza di banda ai file nella cartella pubblica Dropbox. In altre parole, se desideri utilizzare Dropbox per l'aggiornamento remoto di un'applicazione iOS o OS X, tieni presente che potrebbe interrompersi a un certo punto o che il tuo account Dropbox potrebbe essere sospeso a causa del superamento di alcune limitazioni.


Conclusione

Non è sempre necessario creare un back-end personalizzato per un'applicazione iOS o OS X se tutto ciò che devi fare è aggiornare di tanto in tanto una manciata di impostazioni. Le strategie discusse in questo articolo dimostrano come aggiornare da remoto un'applicazione con un semplice elenco di proprietà.

Naturalmente, ci sono molte altre possibilità per aggiornare da remoto un'applicazione. Ad esempio, è possibile utilizzare un servizio come Parse. Tuttavia, trovo che anche Parse sia "troppo" se tutto ciò che vuoi è aggiornare una manciata di impostazioni.