Het indienen van een update naar de App Store is onvermijdelijk als u belangrijke verbeteringen aan een toepassing wilt toevoegen. Het is echter omslachtig en tijdrovend om het herzieningsproces van de App Store voor eenvoudige wijzigingen te doorlopen. In dit artikel zal ik je laten zien hoe je een applicatie op afstand kunt updaten met behulp van het GroundControl-project.
Het idee achter GroundControl is eenvoudig, de toepassing haalt een externe eigenschappenlijst op en werkt deze bij NSUserDefaults
met de inhoud van de eigenschappenlijst. Hoewel veel applicaties gegevens downloaden van een speciale backend om hun inhoud dynamisch bij te werken, is de strategie die ik in dit artikel zal uiteenzetten ideaal als een speciale back-end geen optie is of de vereisten van uw toepassing overschrijdt.
De opstelling die in deze tutorial wordt besproken, is lichtgewicht en niet duur. Niet alleen is het goedkoop, het is ook gemakkelijk te onderhouden, wat vaak door zowel klanten als ontwikkelaars over het hoofd wordt gezien.
Het is belangrijk om te benadrukken dat eigenschappenlijsten ideaal zijn voor kleine hoeveelheden gegevens en niet moeten worden gebruikt als vervanging voor een speciale back-end. Als een toepassing dagelijks moet worden bijgewerkt met nieuwe inhoud, zal de strategie die in deze zelfstudie wordt besproken, niet worden onderbroken.
Om te illustreren hoe alle verschillende stukken bij elkaar passen, zullen we een iOS-applicatie met de passende naam bouwen Afstandsbediening. Hoewel de applicatie zelf niet veel zal doen, door GroundControl te integreren om de applicaties te updaten NSUserDefaults
het zal duidelijk worden hoe gemakkelijk het is om een applicatie op afstand te updaten met weinig overhead. Laten we beginnen.
Maak een nieuw project in Xcode door de. Te selecteren Toepassing enkele weergave sjabloon uit de lijst met sjablonen (figuur 1). Geef je sollicitatie een naam Afstandsbediening, voer een bedrijfsidentificatie in, stel in iPhone voor de apparaatfamilie en vink aan Gebruik automatische referentietelling. Zorg ervoor dat u de resterende selectievakjes voor dit project uitschakelt. Vertel Xcode waar je je project wilt opslaan en klik op creëren knop (figuur 2).
De naam Mattt Thompson klinkt misschien bekend voor je. Hij is een van de makers en de drijvende kracht achter AFNetworking, de populairste netwerkbibliotheek voor iOS en OS X. GroundControl is gebouwd bovenop AFNetworking en biedt een eenvoudige oplossing om een applicatie op afstand te configureren door de applicaties bij te werken. NSUserDefaults
. Het doet dit via een categorie NSUserDefaults
, wat toestaat NSUserDefaults
om zichzelf asynchroon bij te werken met een externe eigenschappenlijst.
Het maakt niet uit waar de eigenschappenlijst zich bevindt zolang deze kan worden bereikt via het HTTP (S) -protocol en het inhoudstype van het antwoord is ingesteld op application / x-plist
.
Op de GitHub-pagina van GroundControl geeft Mattt twee voorbeelden van hoe de serverkant van het verhaal geïmplementeerd kan worden, één Ruby-implementatie en één Python-implementatie. Ik heb je echter beloofd dat de installatie lichtgewicht en niet duur zou zijn. In plaats van een server te gebruiken die u moet onderhouden, zullen we deze gebruiken Amazon's Simple Storage Service of S3. Zoals ik eerder heb uitgelegd, zijn de vereisten eenvoudig, dat wil zeggen (1) het bestand moet een eigenschappenlijst zijn en (2) het inhoudstype van het antwoord moet worden application / x-plist. De S3 van Amazon past perfect.
AWS S3 is niet alleen perfect geschikt voor het serveren van statische bestanden, het heeft in de loop der jaren zijn sporen verdiend. Zelfs als je applicatie de top 10 in de App Store bereikt, blijft S3 deze lijst zonder problemen weergeven. Voordat u naar de AWS (Amazon Web Services) -console gaat, moet u eerst GroundControl integreren in uw project.
GroundControl is gebouwd bovenop AFNetworking, wat betekent dat u AFNetworking aan uw Xcode-project moet toevoegen. Hoewel we met CocoaPods AFNetworking en GroundControl kunnen toevoegen, zullen we beide bibliotheken handmatig toevoegen, omdat sommigen van jullie misschien niet bekend zijn met CocoaPods. Download de nieuwste versie van AFNetworking en GroundControl en sleep elke bibliotheek naar uw Xcode-project. Zorg ervoor dat u de inhoud van de map naar uw project kopieert door het vakje met het label aan te vinken Kopieer items naar de map van de bestemmingsgroep (indien nodig) en vergeet niet om beide bibliotheken aan het doel van de afstandsbediening toe te voegen (figuren 3 en 4).
AFNetworking vertrouwt op de Systeem configuratie en Mobiele kernservices kaders voor een deel van zijn functionaliteit. Het is daarom noodzakelijk om uw project aan die kaders te koppelen. Selecteer uw project in de Project Navigator en selecteer de Afstandsbediening doelwit uit de lijst met doelen. Kiezen Bouw fases bovenaan opent u de Binaire koppeling met bibliotheken lade en voeg beide kaders toe aan uw project (figuur 5).
Voordat we kunnen gaan werken met AFNetworking en GroundControl, moeten we de projecten bijwerken Prefix.pch bestand door een importinstructie toe te voegen voor de frameworks die we zojuist aan het project hebben toegevoegd. Bekijk het onderstaande fragment voor meer informatie.
// // Voorvoegselkop voor alle bronbestanden van het doel 'Afstandsbediening' in het project 'Afstandsbediening' // #import#ifndef __IPHONE_4_0 #waarschuwing "Dit project maakt gebruik van functies die alleen beschikbaar zijn in iOS SDK 4.0 en hoger." #endif # ifdef __OBJC__ #import #importeren #importeren #importeren #stop als
We beginnen met het toevoegen van twee importstatements aan het implementatiebestand van de toepassingsdeelnemer, een voor AFNetworking en een voor GroundControl. Als u op verschillende plaatsen in uw project AFNetworking gebruikt, is het misschien een goed idee om de importinstructie voor AFNetworking toe te voegen aan de projectresultaten van uw project. Prefix.pch het dossier.
#import "AFNetworking.h" #import "NSUserDefaults + GroundControl.h"
Het integreren van GroundControl is een eenvoudig onderdeel omdat het slechts twee regels code vereist. In de afgevaardigden van de toepassing applicationDidBecomeActive:
methode, noemen we een hulpmethode om GroundControl te initialiseren.
- (ongeldig) applicationDidBecomeActive: (UIApplication *) toepassing // Initialize GroundControl [self initializeGroundControl];
De helpermethode kan niet eenvoudiger dankzij de categorie NSUserDefaults
geleverd door GroundControl. We maken de URL voor de eigenschappenlijst en geven deze door als argument in registerDefaultsWithURL:
. Dit zorgt ervoor dat de eigenschappenlijst asynchroon wordt gedownload. Eenmaal gedownload, NSUserDefaults
wordt automatisch bijgewerkt met de inhoud van de eigenschappenlijst.
- (void) initializeGroundControl NSURL * url = [NSURL URLWithString: @ "https://www.example.com/RemoteControl.plist"]; [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL: url];
Een andere optie is om te bellen registerDefaultsWithURL: succes: mislukking:
in plaats daarvan werkt u liever met succes en mislukte callbacks. Voor nog meer controle biedt GroundControl een derde methode, registerDefaultsWithURLRequest: succes: mislukking:
. Deze methode accepteert een instantie van NSURLRequest
evenals een blok voor succes en falen.
Het zal je misschien verbazen, maar de integratie van GroundControl was het moeilijke deel. De laatste twee stappen zijn (1) het maken van de eigenschappenlijst en (2) het uploaden naar Amazon's S3.
Maak een nieuw bestand in Xcode door de. Te selecteren hulpbron tab aan de linkerkant en kiezen Eigenschappenlijst aan de rechterkant (figuur 6). Geef het bestand een naam Afstandsbediening en sla het op op het bureaublad van je computer. Het is niet nodig om het toe te voegen aan uw Xcode-project. De gemakkelijkste manier om de eigenschappenlijst te bewerken is in Xcode. Bekijk de screenshot hieronder om te zien hoe de eigenschappenlijst eruit ziet en die kan worden bewerkt in Xcode (figuur 7). Houd er rekening mee dat een eigenschappenlijst alleen booleans, datums, getallen, binaire gegevens, tekenreeksen, arrays en woordenboeken kan bevatten. Het is een goede gewoonte om de sleutels een naamruimte te geven (bijvoorbeeld met het klassenprefix van het project) om ervoor te zorgen dat ze niet conflicteren met andere items die zijn opgeslagen in NSUserDefaults
.
Om Amazon's Web Services te gebruiken, heb je een Amazon-account nodig. De kosten verbonden aan de S3 van Amazon zijn extreem laag en de kans is groot dat u niet eens voor enige tijd in rekening wordt gebracht, aangezien de lijst met eigendommen slechts enkele kilobytes groot is.
Je kunt de eigenschappenlijst uploaden naar Amazon S3 met Amazon's AWS Console of met behulp van een applicatie die Amazon's S3 ondersteunt, zoals Panic's fantastische Transmit.
Na het uploaden van de eigenschappenlijst zijn er nog drie dingen te doen, (1) de URL van de eigenschappenlijst te kopiëren, (2) openbare toegang tot de eigenschappenlijst te verlenen en (3) het juiste inhoudstype in te stellen.
Selecteer in de AWS-console de eigenschappenlijst en klik op de eigenschappen knop in de rechterbovenhoek. Selecteer het tabblad met de naam Details in het eigenschappenvenster (figuur 8). Kopieer de link van de eigenschappenlijst en update de initializeGroundControl
methode in de toepassingsdeelnemer met de juiste URL.
Selecteer het tabblad met de naam machtigingen in het eigenschappenvenster en voeg een nieuwe set machtigingen toe aan de eigenschappenlijst door op te klikken Voeg meer rechten toe knop. Stel de gerechtigde in op Iedereen en beperk de machtigingen voor Open / Download. Dit zorgt ervoor dat uw toepassing de eigenschappenlijst kan downloaden. Vergeet niet op de knop Opslaan te klikken om de wijzigingen door te geven.
Selecteer het tabblad met de naam metadata in het eigenschappenvenster en stel de waarde van de sleutel in Content-Type naar application / x-plist. Vergeet niet op de knop Opslaan te klikken om de wijzigingen door te geven.
Uw applicatie is nu klaar om op afstand te worden bijgewerkt. Hoe uw toepassing reageert op de wijzigingen die door de eigenschappenlijst worden aangebracht, is afhankelijk van uw toepassing. Dit artikel laat je alleen zien hoe gemakkelijk het is om een app op afstand bij te werken zonder een nieuwe versie in de App Store te moeten indienen.
Je kunt testen of alles werkt door de initializeGroundControl
methode. In plaats van aanroepen registerDefaultsWithURL:
, we gebruiken registerDefaultsWithURL: succes: mislukking:
geleverd door GroundControl. Als u GroundControl correct hebt geïmplementeerd, moet het woordenboek van het succesblok de gegevens van de eigenschappenlijst bevatten. Uw applicatie's NSUserDefaults
wordt automatisch bijgewerkt.
- (void) initializeGroundControl NSURL * url = [NSURL URLWithString: @ "https://s3.amazonaws.com/com.mobiletuts.bartjacobs/RemoteControl.plist"]; [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL: url success: ^ (NSDictionary * standaardinstellingen) NSLog (@ "Defaults>% @", default); failure: ^ (NSError * error) NSLog (@ "Error>% @ with user info% @.", error, [error userInfo]); ];
Het immense succes en de snelle acceptatiegraad van Dropbox hebben geresulteerd in de opkomst van een groot aantal slimme en nuttige applicaties. Voor mensen die niet bekend zijn met AWS en Xcode, is het misschien eenvoudiger om met Dropbox te werken. Hoewel Dropbox een geweldige oplossing is en de optie biedt om een bestand openbaar toegankelijk te maken door het in de openbare Dropbox-map te plaatsen, kan Dropbox niet worden gebruikt met de huidige versie van GroundControl. De reden is dat het inhoudstype van een eigenschappenlijst die door Dropbox wordt bediend, automatisch wordt ingesteld op text / plain in plaats van de vereiste application / x-plist. AFNetworking werpt een fout vanwege het feit dat het vereiste inhoudstype niet overeenkomt application / x-plist.
Het is echter mogelijk om Dropbox te gebruiken om een applicatie op afstand bij te werken. Het voorbehoud is dat u zelf een deel van het zware werk moet doen, dat wil zeggen asynchroon de lijst met eigendommen downloaden en de toepassing bijwerken. NSUserDefaults
.
Ondanks het nut van de publieke Dropbox-map, is de toekomst ervan onzeker. Het is ook onduidelijk of er een bandbreedte-limiet is opgelegd aan bestanden in de openbare Dropbox-map. Met andere woorden, als u Dropbox wilt gebruiken voor het op afstand bijwerken van een iOS- of OS X-toepassing, houd er dan rekening mee dat deze op een bepaald moment kan worden verbroken of dat uw Dropbox-account kan worden opgeschort vanwege overschrijding van bepaalde beperkingen.
Het is niet altijd noodzakelijk om een aangepaste back-end voor een iOS- of OS X-toepassing te bouwen als u van tijd tot tijd een handvol instellingen hoeft bij te werken. De strategieën die in dit artikel worden besproken, laten zien hoe u een app op afstand kunt bijwerken met een eenvoudige lijst met eigenschappen.
Natuurlijk zijn er verschillende andere mogelijkheden om een applicatie op afstand bij te werken. Het is bijvoorbeeld mogelijk om een service als Parse te gebruiken. Ik merk echter dat zelfs parseren "te veel" is als u alleen een handvol instellingen wilt bijwerken.