Aktualisieren von iOS-Anwendungen mit GroundControl

Das Senden eines Updates an den App Store ist unvermeidlich, wenn Sie einer Anwendung wichtige Erweiterungen hinzufügen möchten. Es ist jedoch umständlich und zeitaufwendig, den App Store-Überprüfungsprozess für einfache Änderungen zu durchlaufen. In diesem Artikel zeige ich Ihnen, wie Sie eine Anwendung über das GroundControl-Projekt aus der Ferne aktualisieren.


Einführung

Die Idee hinter GroundControl ist einfach: Die Anwendung holt eine Liste der entfernten Eigenschaften und aktualisiert deren Liste NSUserDefaults mit dem Inhalt der Eigenschaftsliste. Obwohl viele Anwendungen Daten von einem dedizierten Backend herunterladen, um deren Inhalte dynamisch zu aktualisieren, ist die Strategie, die ich in diesem Artikel darlegen werde, ideal, wenn ein dediziertes Backend keine Option ist oder die Anforderungen Ihrer Anwendung übertrifft.

Das in diesem Tutorial behandelte Setup ist leicht und kostengünstig. Es ist nicht nur kostengünstig, sondern auch leicht zu warten, was von Kunden und Entwicklern oft übersehen wird.

Es ist wichtig zu betonen, dass die Eigenschaftslisten ideal für kleine Datenblöcke sind und nicht als Ersatz für ein dediziertes Backend verwendet werden sollten. Wenn eine Anwendung täglich mit neuen Inhalten aktualisiert werden muss, wird sie durch die in diesem Lernprogramm behandelte Strategie nicht eingeschränkt.

Um zu veranschaulichen, wie die verschiedenen Teile zusammenpassen, erstellen wir eine entsprechend benannte iOS-Anwendung Fernbedienung. Obwohl die Anwendung selbst nicht viel ausmacht, indem Sie GroundControl integrieren, um die Anwendung zu aktualisieren NSUserDefaults Es wird deutlich, wie einfach es ist, eine Anwendung aus der Ferne ohne großen Aufwand zu aktualisieren. Lass uns anfangen.


Schritt 1: Projekt einrichten

Erstellen Sie ein neues Projekt in Xcode, indem Sie das auswählen Einzelansicht-Anwendung Vorlage aus der Liste der Vorlagen (Abbildung 1). Benennen Sie Ihre Bewerbung Fernbedienung, Geben Sie eine Firmenkennung ein iPhone für die Gerätefamilie und überprüfen Sie Verwenden Sie die automatische Referenzzählung. Deaktivieren Sie die verbleibenden Kontrollkästchen für dieses Projekt. Teilen Sie Xcode mit, wo Sie Ihr Projekt speichern möchten, und drücken Sie die Erstellen Taste (Abbildung 2).


Schritt 2: GroundControl

Der Name Mattt Thompson mag Ihnen bekannt vorkommen. Er ist einer der Ersteller und die treibende Kraft hinter AFNetworking, der bekanntesten Netzwerkbibliothek für iOS und OS X. GroundControl basiert auf AFNetworking und bietet eine einfache Lösung für die Fernkonfiguration einer Anwendung durch Aktualisieren der Anwendung NSUserDefaults. Es tut dies über eine Kategorie auf NSUserDefaults, welches erlaubt NSUserDefaults um sich asynchron mit einer Remote-Eigenschaftsliste zu aktualisieren.

Es spielt keine Rolle, wo sich die Eigenschaftsliste befindet, solange sie über das HTTP (S) -Protokoll erreichbar ist und der Inhaltstyp der Antwort auf festgelegt ist Anwendung / X-Plist.

Auf der GitHub-Seite von GroundControl bietet Mattt zwei Beispiele für die Implementierung der Serverseite der Story, eine Ruby-Implementierung und eine Python-Implementierung. Ich habe Ihnen jedoch versprochen, dass das Setup leicht und kostengünstig sein wird. Anstatt einen Server zu verwenden, den Sie warten müssen, verwenden wir diesen Amazons Simple Storage Service oder S3. Wie ich bereits erklärt habe, sind die Anforderungen einfach: Das heißt, (1) die Datei muss eine Eigenschaftenliste sein und (2) der Inhaltstyp der Antwort muss sein Anwendung / X-Plist. Amazons S3 passt perfekt.

AWS S3 eignet sich nicht nur für das Ablegen statischer Dateien, sondern hat sich auch im Laufe der Jahre einen Namen gemacht. Auch wenn Ihre Anwendung die Top 10 im App Store erreicht, wird die Eigenschaftsliste von S3 ohne Probleme weitergegeben. Bevor Sie zur AWS (Amazon Web Services) -Konsole wechseln, müssen Sie GroundControl zuerst in Ihr Projekt integrieren.


Schritt 3: Hinzufügen von AFNetworking und GroundControl

GroundControl baut auf AFNetworking auf, dh Sie müssen AFNetworking zu Ihrem Xcode-Projekt hinzufügen. Auch wenn wir AFNetworking und GroundControl mit CocoaPods hinzufügen könnten, werden wir beide Bibliotheken manuell hinzufügen, da einige von Ihnen möglicherweise nicht mit CocoaPods vertraut sind. Laden Sie die neueste Version von AFNetworking und GroundControl herunter und ziehen Sie die einzelnen Bibliotheken in Ihr Xcode-Projekt. Stellen Sie sicher, dass Sie den Inhalt des Ordners in Ihr Projekt kopieren, indem Sie das Kontrollkästchen mit der Markierung markieren Elemente in den Ordner der Zielgruppe kopieren (falls erforderlich) Vergessen Sie nicht, beide Bibliotheken zum Remote Control-Ziel hinzuzufügen (Abbildungen 3 und 4)..

AFNetworking setzt auf die Systemkonfiguration und Mobile Core Services Frameworks für einen Teil seiner Funktionalität. Es ist daher notwendig, Ihr Projekt mit diesen Frameworks zu verknüpfen. Wählen Sie Ihr Projekt in der Projektnavigator und wähle das aus Fernbedienung Ziel aus der Liste der Ziele. Wählen Baue Phasen Oben öffnen Sie die Binäres mit Bibliotheken verknüpfen Schublade, und fügen Sie Ihrem Projekt beide Rahmen hinzu (Abbildung 5).

Bevor wir mit AFNetworking und GroundControl arbeiten können, müssen wir das Projekt aktualisieren Prefix.pch Datei durch Hinzufügen einer Importanweisung für die Frameworks, die wir gerade dem Projekt hinzugefügt haben. Schauen Sie sich den Ausschnitt unten zur Verdeutlichung an.

 // // Präfix-Header für alle Quelldateien des 'Remote Control'-Ziels im' Remote Control'-Projekt // Importieren  #ifndef __IPHONE_4_0 #warning "Dieses Projekt verwendet Funktionen, die nur in iOS SDK 4.0 und höher verfügbar sind." #endif #ifdef __OBJC__ #import  #einführen  #einführen  #einführen  #endif

Schritt 4: GroundControl integrieren

Wir beginnen mit dem Hinzufügen von zwei Importanweisungen zur Implementierungsdatei des Anwendungsdelegaten, eine für AFNetworking und eine für GroundControl. Wenn Sie AFNetworking an verschiedenen Stellen in Ihrem Projekt verwenden, ist es möglicherweise eine gute Idee, die Importanweisung für AFNetworking zu Ihrem Projekt hinzuzufügen Prefix.pch Datei.

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

Die Integration von GroundControl ist der einfachste Teil, da nur zwei Codezeilen erforderlich sind. In den Bewerbungsdelegierten applicationDidBecomeActive: Methode rufen wir eine Hilfsmethode auf, um GroundControl zu initialisieren.

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

Die Hilfsmethode könnte dank der Kategorie weiter nicht einfacher sein NSUserDefaults bereitgestellt von GroundControl. Wir erstellen die URL für die Eigenschaftsliste und übergeben sie als Argument in registerDefaultsWithURL:. Dadurch wird sichergestellt, dass die Eigenschaftsliste asynchron heruntergeladen wird. Einmal heruntergeladen, NSUserDefaults wird automatisch mit dem Inhalt der Eigenschaftsliste aktualisiert.

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

Eine andere Möglichkeit ist anzurufen registerDefaultsWithURL: Erfolg: Fehler: Wenn Sie lieber mit Erfolgs- und Fehlerrückrufen arbeiten möchten. Für noch mehr Kontrolle bietet GroundControl eine dritte Methode, registerDefaultsWithURLRequest: Erfolg: Fehler:. Diese Methode akzeptiert eine Instanz von NSURLAnfrage sowie eine Erfolgs- und Misserfolgsperre.

Es könnte Sie überraschen, aber die Integration von GroundControl war der schwierige Teil. Die letzten beiden Schritte sind (1) das Erstellen der Eigenschaftsliste und (2) das Hochladen in Amazon S3.


Schritt 5: Erstellen Sie eine Eigenschaftenliste

Erstellen Sie eine neue Datei in Xcode, indem Sie das auswählen Ressource Tab links und wählen Immobilienliste rechts (Abbildung 6). Benennen Sie die Datei Fernbedienung und speichern Sie es auf dem Desktop Ihres Computers. Es ist nicht notwendig, es Ihrem Xcode-Projekt hinzuzufügen. Die einfachste Möglichkeit zum Bearbeiten der Eigenschaftsliste ist Xcode. Schauen Sie sich den Screenshot unten an, um zu sehen, wie die Eigenschaftenliste aussieht und in Xcode bearbeitet werden kann (Abbildung 7). Beachten Sie, dass eine Eigenschaftsliste nur Booleans, Datumsangaben, Zahlen, Binärdaten, Zeichenfolgen, Arrays und Wörterbücher enthalten kann. Es empfiehlt sich, die Schlüssel mit einem Namespace zu versehen (z. B. mit dem Klassenpräfix des Projekts), um sicherzustellen, dass sie nicht mit anderen Einträgen in Konflikt stehen NSUserDefaults.

Schritt 6: Laden Sie die Immobilienliste hoch

Um die Web-Services von Amazon nutzen zu können, benötigen Sie ein Amazon-Konto. Die Kosten im Zusammenhang mit Amazons S3 sind extrem niedrig, und es besteht die Gefahr, dass Sie für einige Zeit nicht berechnet werden, da die Liste der Immobilien nur wenige Kilobyte groß ist.

Sie können die Eigenschaftsliste mit Amazon AWS Console oder mit einer Anwendung, die Amazon S3 unterstützt, wie z. B. Panic's Transmit, in Amazon S3 hochladen.

Nach dem Hochladen der Eigenschaftsliste gibt es drei Dinge, die noch erledigt werden müssen: (1) Kopieren der URL der Eigenschaftsliste, (2) Erteilen des öffentlichen Zugriffs auf die Eigenschaftsliste und (3) Einstellen des korrekten Inhaltstyps.

Kopieren Sie die URL

Wählen Sie in der AWS Console die Eigenschaftsliste aus und klicken Sie auf Eigenschaften Taste oben rechts. Wählen Sie die Registerkarte mit dem Namen Einzelheiten im Eigenschaftenfenster (Abbildung 8). Kopieren Sie den Link der Eigenschaftsliste und aktualisieren Sie die initializeGroundControl Methode im Anwendungsdelegierten mit der richtigen URL.

Gewähren Sie den öffentlichen Zugriff

Wählen Sie die Registerkarte mit dem Namen Berechtigungen Klicken Sie im Eigenschaftenbereich auf und fügen Sie der Eigenschaftsliste einen neuen Berechtigungssatz hinzu, indem Sie auf klicken Fügen Sie weitere Berechtigungen hinzu Taste. Stellen Sie den Stipendiat auf Jeder und beschränken Sie die Berechtigungen auf Öffnen / Herunterladen. Dadurch wird sichergestellt, dass Ihre Anwendung die Eigenschaftsliste herunterladen kann. Vergessen Sie nicht, auf die Schaltfläche Speichern zu klicken, um die Änderungen zu übernehmen.

Legen Sie den Inhaltstyp fest

Wählen Sie die Registerkarte mit dem Namen Metadaten Legen Sie im Eigenschaftenfenster den Wert des Schlüssels fest Inhaltstyp zu Anwendung / X-Plist. Vergessen Sie nicht, auf die Schaltfläche Speichern zu klicken, um die Änderungen zu übernehmen.


Schritt 7: Erstellen und ausführen

Ihre Anwendung kann jetzt remote aktualisiert werden. Wie Ihre Anwendung auf die Änderungen der Eigenschaftsliste reagiert, hängt von Ihrer Anwendung ab. In diesem Artikel wird nur beschrieben, wie einfach es ist, eine Anwendung aus der Ferne zu aktualisieren, ohne eine neue Version an den App Store übermitteln zu müssen.

Sie können testen, ob alles funktioniert, indem Sie die initializeGroundControl Methode. Anstatt zu rufen registerDefaultsWithURL:, wir gebrauchen registerDefaultsWithURL: Erfolg: Fehler: bereitgestellt von GroundControl. Wenn Sie GroundControl korrekt implementiert haben, sollte das Wörterbuch des Erfolgsblocks die Daten der Eigenschaftsliste enthalten. Ihre Bewerbung NSUserDefaults wird automatisch aktualisiert.

 - (void) initializeGroundControl NSURL * url = [NSURL-URLWithString: @ "https://s3.amazonaws.com/com.mobiletuts.bartjacobs/RemoteControl.plist"]; [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL: URL Erfolg: ^ (NSDictionary * Standardwerte) NSLog (@ "Defaults>% @", Standardwerte);  Fehler: ^ (NSError * Fehler) NSLog (@ "Fehler>% @ mit Benutzerinfo% @.", Fehler, [Fehler UserInfo]); ]; 

Dropbox

Der immense Erfolg und die schnelle Akzeptanzrate von Dropbox hat zur Entstehung zahlreicher cleverer und nützlicher Anwendungen geführt. Für Benutzer, die sich mit AWS und Xcode nicht auskennen, ist es möglicherweise einfacher, mit Dropbox zu arbeiten. Obwohl Dropbox eine großartige Lösung ist und die Möglichkeit bietet, eine Datei öffentlich zugänglich zu machen, indem sie im öffentlichen Dropbox-Ordner abgelegt wird, kann Dropbox nicht mit der aktuellen Version von GroundControl verwendet werden. Der Grund ist, dass der Inhaltstyp einer von Dropbox bereitgestellten Eigenschaftsliste automatisch auf festgelegt wird text / plain anstelle der erforderlichen Anwendung / X-Plist. AFNetworking gibt einen Fehler aus, weil der erforderliche Inhaltstyp nicht übereinstimmt Anwendung / X-Plist.

Es ist jedoch möglich, Dropbox zur Fernaktualisierung einer Anwendung zu verwenden. Der Nachteil ist, dass Sie einige der schweren Übungen selbst durchführen müssen, dh, die Eigenschaftsliste asynchron herunterladen und die Anwendung aktualisieren NSUserDefaults.

Trotz der Nützlichkeit des öffentlichen Dropbox-Ordners ist seine Zukunft unsicher. Es ist auch unklar, ob für die Dateien im öffentlichen Dropbox-Ordner ein Bandbreitenlimit besteht. Wenn Sie also Dropbox für die Fernaktualisierung einer iOS- oder OS X-Anwendung verwenden möchten, sollten Sie daran denken, dass diese zu einem bestimmten Zeitpunkt beschädigt werden kann oder dass Ihr Dropbox-Konto aufgrund von Einschränkungen eingeschränkt wird.


Fazit

Es ist nicht immer notwendig, ein benutzerdefiniertes Backend für eine iOS- oder OS X-Anwendung zu erstellen, wenn Sie nur eine Handvoll Einstellungen von Zeit zu Zeit aktualisieren müssen. Die in diesem Artikel beschriebenen Strategien zeigen, wie Sie eine Anwendung mit einer einfachen Eigenschaftsliste remote aktualisieren.

Natürlich gibt es mehrere andere Möglichkeiten, eine Anwendung aus der Ferne zu aktualisieren. Beispielsweise ist es möglich, einen Dienst wie Parse zu verwenden. Ich finde jedoch, dass Parse selbst "zu viel" ist, wenn Sie nur eine Handvoll Einstellungen aktualisieren möchten.