Actualizarea aplicațiilor iOS cu GroundControl

Trimiterea unei actualizări la App Store este inevitabilă dacă doriți să adăugați îmbunătățiri majore unei aplicații. Cu toate acestea, este greoaie și consumatoare de timp să treceți prin procesul de revizuire App Store pentru modificări simple. În acest articol, vă voi arăta cum să actualizați o aplicație de la distanță utilizând proiectul GroundControl.


Introducere

Ideea din spatele GroundControl este simplă, aplicația preia o listă de proprietăți la distanță și actualizează-o NSUserDefaults cu conținutul listei de proprietăți. Chiar dacă multe aplicații descarcă date dintr-un backend dedicat pentru a-și actualiza dinamic conținutul, strategia pe care o voi pune în acest articol este ideală dacă un backend dedicat nu este o opțiune sau depășește cerințele aplicației.

Setarea discutată în acest tutorial este ușoară și ieftină. Nu numai că este ieftin, este de asemenea ușor de întreținut, ceea ce este un factor de multe ori neglijat de către clienți și dezvoltatori.

Este important să subliniem faptul că listele de proprietăți sunt ideale pentru bucăți mici de date și nu ar trebui folosite ca înlocuitori pentru un backend dedicat. Dacă o aplicație trebuie să fie actualizată zilnic cu conținut nou, atunci strategia discutată în acest tutorial nu o va tăia.

Pentru a ilustra modul în care se potrivesc toate piesele diferite, vom construi o aplicație iOS denumită corespunzător Telecomandă. Chiar dacă aplicația însăși nu va face prea mult, prin integrarea GroundControl pentru actualizarea aplicației NSUserDefaults va deveni clar cât de ușor este să actualizați de la distanță o aplicație cu foarte puțin aeriene. Să începem.


Pasul 1: Configurarea proiectului

Creați un nou proiect în Xcode selectând Vizualizare individuală șablon din lista de șabloane (figura 1). Denumiți aplicația Telecomandă, introduceți un identificator al companiei, setați iPhone pentru familia de dispozitive și verificați Utilizați numărarea automată a referințelor. Asigurați-vă că debifați casetele de validare rămase pentru acest proiect. Spuneți Xcode în cazul în care doriți să salvați proiectul dvs. și apăsați pe Crea butonul (figura 2).


Pasul 2: GroundControl

Numele Mattt Thompson ți-ar putea părea familiar. El este unul dintre creatorii si forta motrice din spatele AFNetworking, cea mai populara biblioteca de retele pentru iOS si OS X. GroundControl este construit pe partea de sus a AFNetworking si ofera o solutie usoara pentru configurarea de la distanta a unei aplicatii prin actualizarea aplicatiei NSUserDefaults. Aceasta face acest lucru printr-o categorie NSUserDefaults, care permite NSUserDefaults să se actualizeze asincron cu o listă de proprietăți la distanță.

Nu contează unde se află lista de proprietăți atâta timp cât se poate ajunge prin protocolul HTTP (S), iar tipul de conținut al răspunsului este setat la application / x-plist.

Pe pagina GitHub a GroundControl, Mattt oferă două exemple despre cum să implementeze partea de server a povestirii, o implementare Ruby și o implementare Python. Cu toate acestea, v-am promis că configurarea va fi ușoară și ieftină. În loc să folosiți un server pe care trebuie să îl întrețineți, vom folosi Serviciul Amazon de stocare simplă sau S3. Așa cum am explicat mai devreme, cerințele sunt simple, adică (1) fișierul trebuie să fie o listă de proprietăți și (2) tipul de conținut al răspunsului trebuie să fie application / x-plist. S3 Amazon este perfect potrivită.

Nu numai că AWS S3 se potrivește perfect pentru a servi fișiere statice, și-a câștigat dungile de-a lungul anilor. Chiar dacă aplicația dvs. ajunge în top 10 în App Store, S3 va continua să difuzeze această listă de proprietăți fără probleme. Înainte de a vă deplasa la Consola AWS (Amazon Web Services), prima necesitate de a integra GroundControl în proiectul dvs..


Pasul 3: Adăugați AFNetworking și GroundControl

GroundControl este construit pe partea de sus a rețelei AFNetworking, ceea ce înseamnă că trebuie să adăugați AFNetworking la proiectul dvs. Xcode. Chiar dacă am putea adăuga AFNetworking și GroundControl folosind CocoaPods, vom adăuga ambele biblioteci manual, deoarece unii dintre voi poate nu sunteți familiarizați cu CocoaPods. Descărcați cea mai recentă versiune de AFNetworking și GroundControl și trageți fiecare bibliotecă în proiectul dvs. Xcode. Asigurați-vă că ați copiat conținutul folderului în proiect, bifând caseta de selectare Copiați articolele în dosarul grupului de destinație (dacă este necesar) și nu uitați să adăugați ambele biblioteci la ținta de la distanță (figurile 3 și 4).

AFNetworking se bazează pe Configuratia sistemului și Servicii mobile de bază cadre pentru unele dintre funcționalitățile sale. Prin urmare, este necesar să vă conectați proiectul la aceste cadre. Selectați proiectul în Project Navigator și selectați Telecomandă țintă din lista de obiective. Alege Construiți faze în partea de sus, deschideți Link binar cu biblioteci sertar și adăugați ambele cadre la proiectul dvs. (figura 5).

Înainte de a începe să lucrăm cu AFNetworking și GroundControl, trebuie să actualizăm proiectul Prefix.pch fișier adăugând o declarație de import pentru cadrele pe care tocmai le-am adăugat la proiect. Uitați-vă la fragmentul de mai jos pentru clarificare.

 // // Antetul prefixului pentru toate fișierele sursă ale țintei "Remote Control" din proiectul "Remote Control" / / #import  #ifndef __IPHONE_4_0 #warning "Acest proiect utilizează funcții disponibile numai în SDK 4.0 și ulterior." #endif #ifdef __OBJC__ #import  #import  #import  #import  # endif

Pasul 4: Integrarea aplicației GroundControl

Începem prin adăugarea a două declarații de import în fișierul de implementare a delegatului aplicației, unul pentru AFNetworking și altul pentru GroundControl. Dacă ajungeți să utilizați AFNetworking în diferite locuri în proiect, atunci ar fi o idee bună să adăugați declarația de import pentru AFNetworking la proiectul dvs. Prefix.pch fişier.

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

Integrarea GroundControl este partea ușoară, deoarece necesită doar două linii de cod. În delegatul aplicației applicationDidBecomeActive: metodă, numim o metodă de ajutor pentru a inițializa GroundControl.

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

Metoda ajutorului nu a putut fi mai ușoară datorită categoriei NSUserDefaults furnizate de GroundControl. Creăm adresa URL pentru lista de proprietăți și o transmitem ca argument în registerDefaultsWithURL:. Aceasta va asigura că lista de proprietăți este descărcată în mod asincron. Odată descărcat, NSUserDefaults este actualizat automat cu conținutul listei de proprietăți.

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

O altă opțiune este de a apela registerDefaultsWithURL: succes: eșec: în schimb, dacă preferați să lucrați cu apelări de succes și de eșec. Pentru un control mai mare, GroundControl oferă oa treia metodă, registerDefaultsWithURLRequest: succes: eșec:. Această metodă acceptă un exemplu de NSURLRequest precum și un bloc de succes și eșec.

S-ar putea să vă surprindă, dar integrarea GroundControl a fost partea dificilă. Ultimii doi pași sunt (1) crearea unei liste de proprietăți și (2) încărcarea acesteia pe S3 de la Amazon.


Pasul 5: Creați o listă de proprietăți

Creați un fișier nou în Xcode selectând Resursă fila din stânga și alegerea Lista de proprietăți în dreapta (figura 6). Denumiți fișierul Telecomandă și salvați-l pe desktop-ul computerului. Nu este necesar să-l adăugați la proiectul dvs. Xcode. Cea mai ușoară modalitate de a edita lista de proprietăți este în Xcode. Uitați-vă la imaginea de mai jos pentru a vedea cum arată lista de proprietăți și puteți fi editat în Xcode (figura 7). Rețineți că o listă de proprietăți poate conține numai booleani, date, numere, date binare, șiruri, matrice și dicționare. Este o practică bună să numești cheile (de exemplu, cu prefixul de clasă al proiectului) pentru a vă asigura că acestea nu intră în conflict cu alte intrări stocate în NSUserDefaults.

Pasul 6: Încărcați lista de proprietăți

Pentru a utiliza serviciile Web Amazon, aveți nevoie de un cont Amazon. Costurile asociate cu S3 de la Amazon sunt extrem de scăzute, iar șansele sunt că nici măcar nu veți fi taxat de când lista de proprietăți este de numai câteva kilobyte.

Puteți încărca lista de proprietăți pe Amazon S3 folosind Consola Amazon AWS sau utilizând o aplicație care acceptă S3 de la Amazon, cum ar fi Transmit fantastic de la Panic.

După încărcarea listei de proprietăți, rămân trei lucruri de făcut, (1) copierea adresei URL a listei de proprietăți, (2) acordarea accesului public la lista de proprietăți și (3) setarea tipului de conținut corect.

Copiați adresa URL

În Consola AWS, selectați lista de proprietăți și faceți clic pe Proprietăți butonul din dreapta sus. Selectați fila numită Detalii în panoul proprietăților (figura 8). Copiați linkul din lista de proprietăți și actualizați initializeGroundControl metoda în delegarea aplicației cu adresa URL corectă.

Acordați acces public

Selectați fila numită Permisiuni în panoul proprietăți și adăugați un nou set de permisiuni la lista de proprietăți făcând clic pe Adăugați mai multe permisiuni buton. Setați beneficiarul la Toata lumea și să limitați permisiunile Deschideți / Descărcare. Acest lucru vă va asigura că aplicația dvs. poate descărca lista de proprietăți. Nu uitați să faceți clic pe butonul de salvare pentru a propaga modificările.

Setați tipul de conținut

Selectați fila numită metadate în panoul cu proprietăți și setați valoarea cheii Tipul de conținut la application / x-plist. Nu uitați să faceți clic pe butonul de salvare pentru a propaga modificările.


Pasul 7: Construiți și executați

Aplicația dvs. este acum gata să fie actualizată de la distanță. Modul în care aplicația dvs. răspunde la modificările aduse de lista de proprietăți depinde de aplicația dvs. Acest articol vă arată doar cât de ușor este să actualizați de la distanță o aplicație fără a trebui să trimiteți o nouă versiune la App Store.

Puteți testa dacă totul funcționează modificând ușor initializeGroundControl metodă. În loc să invocăm registerDefaultsWithURL:, folosim registerDefaultsWithURL: succes: eșec: furnizate de GroundControl. Dacă ați implementat corect GroundControl, dicționarul blocului de succes trebuie să conțină datele din lista de proprietăți. Aplicația ta NSUserDefaults vor fi actualizate automat.

 - (void) initializeGroundControl NSURL * url = [NSURL URLWithString: @ "https://s3.amazonaws.com/com.mobiletuts.bartjacobs/RemoteControl.plist"]; [NSUserDefaults standardUserDefaults] registerDefaultsWithURL: succes url: ^ (NSDictionary * implicit) NSLog (@ "Defaults>% @", implicit);  eșec: ^ (eroare NSError *) NSLog (@ "Eroare>% @ cu informații despre utilizator% @", eroare, [error userInfo]); ]; 

dropbox

Succesul imens și ritmul rapid de adoptare al Dropbox au dus la apariția a numeroase aplicații inteligente și utile. Pentru persoanele care nu sunt familiarizate cu AWS și Xcode, ar putea fi mai ușor să lucrezi cu Dropbox. Chiar dacă Dropbox este o soluție excelentă și oferă opțiunea de a face un fișier accesibil public prin plasarea lui în dosarul Dropbox public, Dropbox nu poate fi folosit cu versiunea curentă a GroundControl. Motivul este că tipul de conținut al unei liste de proprietăți difuzate de Dropbox este setat automat la text / plain în loc de cele necesare application / x-plist. AFNetworking aruncă o eroare datorită faptului că tipul de conținut necesar nu se potrivește application / x-plist.

Cu toate acestea, este posibil să utilizați Dropbox pentru a actualiza de la distanță o aplicație. Atenția este că va trebui să faceți singuri o ridicare greoaie, prin descărcarea asincronă a listei de proprietăți și actualizarea aplicației NSUserDefaults.

În ciuda utilității dosarului public Dropbox, viitorul său este incert. De asemenea, este neclar dacă există o limită de bandă impusă fișierelor din dosarul public Dropbox. Cu alte cuvinte, dacă doriți să utilizați Dropbox pentru actualizarea de la distanță a unei aplicații iOS sau OS X, rețineți că s-ar putea rupe la un moment dat sau că contul dvs. Dropbox ar putea fi suspendat din cauza depășirii anumitor restricții.


Concluzie

Nu este întotdeauna necesar să construiți un backend personalizat pentru o aplicație iOS sau OS X dacă tot ce trebuie să faceți este să actualizați din când în când o mână de setări. Strategiile discutate în acest articol demonstrează cum să actualizați de la distanță o aplicație cu o listă de proprietăți simplă.

Desigur, există și alte câteva posibilități de a actualiza de la distanță o aplicație. De exemplu, este posibil să utilizați un serviciu ca Parse. Cu toate acestea, consider că și Parse este "prea mult" dacă tot ce vrei să faci este să actualizezi o mulțime de setări.

Cod