Das Testen einer Anwendung ist unverzichtbar, wenn Sie Ihren Kunden ein robustes und zuverlässiges Produkt liefern möchten. In diesem Artikel wird der Betatest von iOS-Anwendungen mit TestFlight, einem kostenlosen Webservice, der die Verteilung von Ad-hoc-Builds und die Überwachung der Betatestnutzung vereinfacht, näher beleuchtet.
Das Testen von Software ist nicht auf Beta-Tests beschränkt. Es gibt verschiedene Techniken zum Testen von Software, wie z. B. Komponententests, Integrationstests, Stresstests usw. Jede dieser Methoden hat ihren Vorteil und ihren Platz im Entwicklungszyklus. Betatest ist ein Prozess, bei dem eine Vorabversion oder Betaversion an eine begrenzte Zielgruppe verteilt wird, die nicht Teil des Entwicklungsteams ist.
In den Anfängen der iOS-Entwicklung war es nicht einfach, Test-Builds zu verteilen, Feedback zu sammeln und Absturzberichte zu sammeln. In den letzten Jahren hat sich jedoch eine Handvoll Dienste herausgebildet, die Betatests nicht nur einfacher, sondern auch trivialer machen. In diesem Artikel werde ich einen solchen Dienst besprechen: TestFlight. Mit TestFlight können Entwickler Test-Builds drahtlos verteilen. Das Fummeln mit .ipa-Dateien und Bereitstellungsprofilen gehört der Vergangenheit an, wenn Sie sich dazu entschließen, mit TestFlight zusammenzuarbeiten.
Die einfache Ad-hoc-Verteilung ist nicht der einzige Vorteil von TestFlight. TestFlight bietet auch ein SDK an, das Ihnen eine Reihe großartiger Funktionen mit überraschend geringem Aufwand bietet. Wenn das SDK installiert und konfiguriert ist, werden Absturzberichte an TestFlight gesendet und automatisch symbolisiert. Ein weiteres großartiges Feature des TestFlight SDK sind Checkpoints. Sie können Prüfpunkte an bestimmten Stellen in Ihrer Anwendung festlegen, um festzustellen, ob eine bestimmte Funktion tatsächlich verwendet wird. Checkpoints fügen sich nahtlos in die Sitzungen ein. Immer wenn ein Benutzer die Anwendung öffnet, wird automatisch eine Sitzung gestartet. Das TestFlight-Dashboard zeigt an, wie lange eine Sitzung dauert und welche Prüfpunkte der Tester während einer Sitzung bestanden hat. Die Liste der Funktionen hört dort nicht auf. Weitere nützliche Funktionen sind: In-App-Feedback, In-App-Updates und Remote-Protokollierung.
Um die Schritte in diesem Lernprogramm ausführen zu können, benötigen Sie ein TestFlight-Konto. Gehen Sie zur TestFlight-Website und melden Sie sich für ein kostenloses Konto an. Nachdem Sie sich zum ersten Mal bei Ihrem TestFlight-Konto angemeldet haben, werden Sie aufgefordert, ein Team zu erstellen. Was sind Teams? Ein Team ist nur eine Kategorisierung für das Gruppieren von Builds und Testern. Die Chancen stehen gut, dass Sie an verschiedenen Anwendungen für verschiedene Kunden oder Projekte arbeiten. Mit einem Team können Sie die Builds und Tester für jede Anwendung oder jeden Client einfach gruppieren. Mit anderen Worten, es ist eine bequeme Möglichkeit, die Builds und Tester verschiedener Projekte getrennt und organisiert zu halten.
Im nächsten Schritt laden Sie einen Test-Build in TestFlight hoch. Bevor wir dies tun, müssen wir jedoch eine Anwendung erstellen, die für TestFlight ordnungsgemäß eingerichtet und konfiguriert ist. Dazu gehört die Integration des TestFlight SDK, um die zuvor beschriebenen Funktionen zu nutzen.
Natürlich ist TestFlight wirklich gut, wenn Sie eine Gruppe engagierter Tester haben (vorzugsweise Personen, die nicht Teil des Entwicklungsteams sind). Das Hinzufügen von Testern zu TestFlight ist so einfach wie das Senden einer Einladung. Mit TestFlight ist es nicht mehr langwierig, die UDID eines Geräts zu erhalten, wie Sie später sehen werden. Ich erkläre, wie man Betatester später in diesem Tutorial einlädt.
Die Anwendung, die wir bauen werden, wird einfach sein. Das Hauptziel dieses Lernprogramms ist es, Ihnen zu zeigen, wie Sie mit TestFlight auf den neuesten Stand kommen und nicht so sehr eine funktionsreiche Anwendung erstellen. Die Funktionen der Anwendung sind einfach: (1) TestFlight-Prüfpunkte implementieren, (2) den Benutzer während der Verwendung der Anwendung um Feedback bitten und (3) die Anwendung zum Absturz bringen und TestFlight den Absturzbericht sammeln lassen.
Erstellen Sie ein neues Projekt in Xcode, indem Sie das auswählen Einzelansicht-Anwendung Vorlage aus der Liste der Vorlagen (Abbildung 3). Benennen Sie Ihre Bewerbung Ausziehen, starten, abheben, losfahren, 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 4).
Laden Sie zunächst die neueste stabile Version des TestFlight SDK (1.1 zum Zeitpunkt des Schreibens) herunter. Entpacke das Archiv und füge hinzu libTestFlight.a und TestFlight.h, liegt in den TestFlightx.x Ordner zu Ihrem Projekt. Stellen Sie sicher, dass Sie beide Dateien in Ihr Projekt kopieren, indem Sie das Kontrollkästchen aktivieren Elemente in den Ordner der Zielgruppe kopieren (falls erforderlich) und vergessen Sie nicht, beide Dateien zum Startziel hinzuzufügen (Abbildung 5). Platzieren Sie alles, um alles zu organisieren libTestFlight.a und TestFlight.h in einer separaten Gruppe namens Testflug.
Es sind noch einige Schritte erforderlich, um die Integration mit TestFlight abzuschließen. Wählen Sie Ihr Projekt in der Projektnavigator und klicken Sie in der Liste der Ziele auf das Startziel. Wähle aus Baue Phasen Tab oben und öffnen Sie die Binäres mit Bibliotheken verknüpfen Schublade. Wenn alles gut ging, libTestFlight.a sollte in der Liste der Bibliotheken vorhanden sein. Ziehen libTestFlight.a in die Liste der verknüpften Bibliotheken, falls diese nicht in der Liste vorhanden ist (Abbildung 6).
TestFlight verwendet auch die libz Bibliothek, um etwas von ihrer Arbeit zu tun, also müssen wir das Projekt auch mit dieser Bibliothek verknüpfen. Klicken Sie unten in der Liste der Bibliotheken auf das Pluszeichen, und suchen Sie nach libz.dylib, und fügen Sie es der Liste der verknüpften Bibliotheken hinzu.
Der nächste Schritt ist optional, wird jedoch empfohlen, wenn Sie TestFlight in Ihrer gesamten Anwendung verwenden möchten. Anstatt zu importieren TestFlight.h In jeder Datei, die das TestFlight SDK verwendet, ist es bequemer, es dem Projekt hinzuzufügen Prefix.pch Datei. Schauen Sie sich das komplette an Prefix.pch Datei zur Verdeutlichung.
// // Präfix-Header für alle Quelldateien des Ziels "Take-Off" im Projekt "Take-Off" // 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 #import "TestFlight.h" #endif
TestFlight installiert einen nicht erfassten Ausnahmebehandler, um Abstürze zu melden und Absturzberichte zu erfassen. Wenn Sie diese Funktion verwenden möchten, wird empfohlen, die Erstellungseinstellungen Ihres Projekts geringfügig zu ändern. Wählen Sie Ihr Projekt aus Projektnavigator und wähle das Ausziehen, starten, abheben, losfahren Ziel aus der Liste der Ziele. Wähle aus Einstellungen erstellen Tab und blättern Sie zu Einsatz Einstellungen (Abbildung 8). Drei Bereitstellungseinstellungen müssen auf festgelegt werden NEIN.
Fettgedruckte Einstellungen zeigen an, dass der Standardwert überschrieben wird. Sie können alle vorgenommenen Änderungen rückgängig machen, indem Sie eine fette Einstellung auswählen und die Rücktaste auf Ihrer Tastatur drücken. Stellen Sie sicher, dass der effektive Wert der Build-Einstellung auf festgelegt ist Kombiniert (Abbildung 9).
TestFlight macht noch nichts in Ihrer Anwendung. Um seine Funktionen nutzen zu können, müssen wir TestFlight beim Start der Anwendung initialisieren. Der ideale Ort zum Einrichten von TestFlight ist der Anwendungsdelegierte Anwendung: didFinishLaunchingWithOptions:
Methode. Das Einrichten von TestFlight ist überraschend einfach. Wir müssen nur anrufen ausziehen, starten, abheben, losfahren:
in der TestFlight-Klasse und übergeben Sie das Team-Token des Teams, das wir zuvor in diesem Lernprogramm eingerichtet haben.
Um Ihr Team-Token zu finden, gehen Sie zum TestFlight-Dashboard, wählen Sie das richtige Team aus dem Dropdown-Menü oben rechts aus und wählen Sie Bearbeitungs Information aus dem gleichen Menü. Kopieren Sie das Team-Token und übergeben Sie es als Parameter in der ausziehen, starten, abheben, losfahren:
Methode.
- (BOOL) -Anwendung: (UIApplication *) -Anwendung didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Initialisieren Sie View Controller self.viewController = [[MTViewController-Zuordnung] initWithNibName: @ "MTViewController" -Bündel: nil]; // Fenster initialisieren self.window = [[UIWindow-Zuordnung] initWithFrame: [[UIScreen-MainScreen] -Begrenzungen]]; [self.window setRootViewController: self.viewController]; [self.window makeKeyAndVisible]; // TestFlight initialisieren [TestFlight takeOff: @ "TEAM_TOKEN_GOES_HERE"]; JA zurückgeben;
TestFlight ist jetzt eingerichtet, aber wir müssen immer noch einen Build in TestFlight hochladen. Die folgenden Schritte unterscheiden sich nicht von den Schritten, die Sie normalerweise zum Vorbereiten eines Test- oder Ad-hoc-Builds für eine Anwendung durchführen würden. Ich habe die notwendigen Schritte unten aufgelistet.
Das mag viel Arbeit sein, aber die meisten dieser Schritte müssen für eine neue Anwendung nur einmal ausgeführt werden. Darüber hinaus kann vieles davon automatisiert werden. Neben dem SDK von TestFlight verfügt TestFlight auch über eine Upload-API, mit der Entwickler Builds automatisch in TestFlight hochladen können. Ich werde die Upload-API in diesem Tutorial nicht behandeln, da dies ein fortgeschritteneres Thema ist.
Da Sie dieses Tutorial lesen, gehe ich davon aus, dass Sie bereits mit den Beta-Tests und den Schritten zur Vorbereitung eines Test-Builds für die Ad-hoc-Verteilung vertraut sind. In diesem Artikel beschränke ich mich auf die Schritte, die TestFlight beinhalten.
Wenn Sie Builds mit TestFlight verteilen, ist es wichtig, Ihre Builds ordnungsgemäß zu versionieren. Dadurch wird es einfacher, verschiedene Test-Builds zu verfolgen.
Stellen Sie vor dem Hochladen Ihrer Anwendung sicher, dass die Versionsnummer Ihrer Anwendung auf 0.1.0 eingestellt ist, um anzuzeigen, dass es sich um eine Vorabversion handelt. Weitere Informationen zu Versionsnummern finden Sie in dieser Frage zum Stack Overflow.
Um ein Build manuell zu TestFlight hochzuladen, klicken Sie auf die zweite Schaltfläche oben rechts im TestFlight-Dashboard.
Das Hinzufügen eines neuen Builds ist so einfach wie das Ziehen der .ipa-Datei in das entsprechende Feld, das Hinzufügen einer kurzen Beschreibung (auch Versionshinweise genannt) und das Klicken auf Hochladen Taste. Versionshinweise sind viel nützlicher als die meisten Leute denken. Die Versionshinweise sollten Informationen zu den am Testbuild vorgenommenen Änderungen enthalten, sie sollten jedoch auch bekannte Fehler (falls erforderlich) und mögliche Problemumgehungen enthalten.
Nach dem Hochladen eines Builds Ihrer Anwendung gelangen Sie zum Berechtigungen Ansicht Ihres neuen Test-Builds. Die Berechtigungen eines Builds bestimmen, wer Zugriff auf den neuen Testbuild hat, dh wer kann den Testbuild auf seinen Geräten installieren. Wenn Sie beispielsweise ein kritisches Build nur intern testen möchten und verhindern möchten, dass externe Tester auf das Build zugreifen, können Sie die Berechtigungen dieses Builds so einschränken, dass nur Mitglieder Ihres Entwicklungsteams einbezogen werden.
Um die Verteilung von Test-Builds zu vereinfachen, verfügt TestFlight über eine entsprechend benannte Funktion Verteilerliste. Eine Verteilerliste ist eine Liste oder Gruppe von Personen innerhalb eines TestFlight-Teams. Anstatt jedes Mal, wenn Sie einen neuen Build hochladen, manuell Mitglieder eines TestFlight-Teams auszuwählen, teilen Sie TestFlight mit, welche Verteilerlisten Zugriff auf den neuen Build haben.
Eine der besten Funktionen von TestFlight ist die Möglichkeit, Absturzberichte zu erfassen und automatisch zu symbolisieren. Das Implementieren von Checkpoints und das Abfragen von Benutzerfeedbacks ist ebenfalls einfach. Lassen Sie uns das Projekt ändern, um zu sehen, wie das alles funktioniert.
Öffnen Sie Ihr Xcode-Projekt und navigieren Sie zur Implementierungsdatei des View-Controllers (MTViewController.m). In dem viewDidLoad
erstellen Sie drei Schaltflächen wie unten gezeigt. Der Code sollte nicht schwer zu verstehen sein.
- (void) viewDidLoad [super viewDidLoad]; // Create Crash Button UIButton * crashButton = [[Zuweisung von UIButton] initWithFrame: CGRectMake (20.0, 20.0, 280.0, 44.0)]; [crashButton setTitle: @ "Crash" forState: UIControlStateNormal]; [crashButton setBackgroundColor: [UIColor blueColor]]; [crashButton addTarget: Eigenaktion: @selector (crash :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: crashButton]; // Checkpoint-Schaltfläche erstellen UIButton * checkpointButton = [[UIButton-Zuordnung] initWithFrame: CGRectMake (20.0, 72.0, 280.0, 44.0)]; [checkpointButton setTitle: @ "Checkpoint" fürState: UIControlStateNormal]; [checkpointButton setBackgroundColor: [UIColor blueColor]]; [checkpointButton addTarget: Eigenaktion: @selector (Prüfpunkt :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: checkpointButton]; // Feedback-Schaltfläche erstellen UIButton * feedbackButton = [[UIButton-Zuordnung] initWithFrame: CGRectMake (20.0, 124.0, 280.0, 44.0)]; [feedbackButton setTitle: @ "Feedback" fürState: UIControlStateNormal]; [feedbackButton setBackgroundColor: [UIColor blueColor]]; [feedbackButton addTarget: Selbstaktion: @selector (feedback :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: feedbackButton];
Die Idee ist einfach. Die Anwendung sollte abstürzen, wenn der Benutzer auf die erste Schaltfläche tippt. Ein Programmabsturz ist einfach. Recht? Schauen Sie sich die Implementierung des Absturz:
Methode, um zu sehen, wie es implementiert wird. Wir erstellen ein Array mit einem Element und fragen dann nach dem zweiten Objekt im Array. Das wirft ein NSRangeException
da es nur ein Element im Array gibt.
- (void) crash: (id) sender NSArray * array = @ [@ "one"]; NSLog (@ "% @", [Array objectAtIndex: 1]);
Die Umsetzung der Kontrollpunkt:
Diese Methode ist dank des TestFlight SDK überraschend einfach. Wie ich bereits erwähnt habe, sind Checkpoints ein Mittel, um zu verfolgen, ob bestimmte Funktionen Ihrer Anwendung von Ihren Testern verwendet werden. Mit anderen Worten, Checkpoints sagen Ihnen, wann ein Benutzer etwas getan hat, das Sie interessiert. Wie gesagt, Kontrollpunkte sagen Ihnen unter anderem, welche Funktionen verwendet werden und was noch wichtiger ist, welche Funktionen nicht. Einige Funktionen sind schwer zu finden, auch wenn dies für den Entwickler nicht offensichtlich ist.
- (void) checkpoint: (id) sender [TestFlight passCheckpoint: @ "Der Benutzer hat auf die Checkpoint-Schaltfläche geklickt."];
Es gibt verschiedene Möglichkeiten, Feedback von Ihren Testern einzuholen. Die einfachste Möglichkeit, Feedback zu sammeln, ist jedoch die Verwendung der Feedback-Integration von TestFlight. Schauen Sie sich die Implementierung des Feedback:
Methode, um zu sehen, wie das funktioniert. Wenn der Benutzer auf die Feedback-Schaltfläche tippt, wird eine modale Ansicht eingeblendet, in der der Benutzer Feedback eingeben kann (Abbildung 13)..
- (ungültig) feedback: (id) sender [TestFlight openFeedbackView];
Aktualisieren Sie nach dem Hinzufügen dieser Änderungen zu Ihrer Anwendung die Versionsnummer Ihrer Anwendung auf 0.2.0, und archivieren Sie das Projekt. Es empfiehlt sich, Ihr Projekt immer zu bereinigen, bevor Sie einen Build für die Verteilung, für den App Store sowie für die Ad-hoc-Verteilung vorbereiten. Laden Sie die neue .ipa-Datei in TestFlight hoch, legen Sie die entsprechenden Berechtigungen fest und aktualisieren Sie die Installation auf Ihrem Gerät mit dem neuen Build, indem Sie das TestFlight-Dashboard auf Ihrem Gerät aufrufen. Wenn Sie die Schritte befolgt haben, sollten Sie die drei Schaltflächen sehen. Wenn Sie auf jede Schaltfläche tippen, wird die Funktionalität in der Anwendung ausgelöst.
TestFlight sendet Informationen an die TestFlight-Server, wann immer dies möglich ist, das heißt, wenn eine Netzwerkverbindung verfügbar ist und das Betriebssystem die Anwendung nicht abbricht, bevor das Senden der Daten an die TestFlight-Server abgeschlossen ist. Dies bedeutet, dass TestFlight ein großartiges Werkzeug ist, um Live-Daten von Ihren Testern zu sammeln. Sie können dies selbst ausprobieren, indem Sie auf die drei Schaltflächen Ihrer Anwendung tippen und einige Minuten später einen Blick auf das TestFlight-Dashboard werfen.
TestFlight zeigt Ihnen, welche Tester das Update installiert haben und auf welchem Gerät. Es zeigt Ihnen die Anzahl der Sitzungen, welche Prüfpunkte sie bestanden haben und wie viele Abstürze aufgetreten sind. Wie bereits erwähnt, werden die Absturzberichte automatisch symbolisiert. Dies ist eine der Funktionen, die ich am meisten liebe.
Sie können einzelne Sitzungen auch untersuchen, indem Sie links auf die Registerkarte Sitzungen klicken (Abbildung 14), einen Benutzer aus der Liste auswählen und auf eine der Sitzungen klicken. Dies gibt Ihnen einen detaillierten Überblick über die Sitzung des jeweiligen Benutzers (Abbildung 15)..
Beta-Tests sind nur nützlich, wenn Sie sich auf eine Gruppe engagierter Tester verlassen können, die Ihre Anwendung wirklich auf Herz und Nieren prüfen möchten. Das Hinzufügen von Testern zu TestFlight kann auf zwei Arten erfolgen. (1) Öffnen Sie das TestFlight-Dashboard des Teams, zu dem Sie einen neuen Tester hinzufügen möchten. Klicken Sie auf die Schaltfläche mit dem kleinen Pluszeichen in der oberen rechten Ecke und füllen Sie das Formular aus. Es wird empfohlen, dass der Benutzer auf den Akzeptierlink auf dem Testgerät klickt. Auch wenn dies nicht unbedingt erforderlich ist, vereinfacht dies den Prozess erheblich, da das vom Benutzer verwendete Gerät automatisch als Testgerät zu seinem Konto hinzugefügt wird.
(2) Eine zweite Möglichkeit, Tester hinzuzufügen, ist die Verwendung einer Rekrutierungs-URL. Dies ist ein Formular, mit dem sich jeder als Tester anmelden kann. Dies macht es einfacher, wenn Sie eine relativ große Gruppe von Testern zu TestFlight hinzufügen möchten.
Vor einigen Monaten wurde TestFlight von Burstly übernommen, was zur Erstellung von TestFlight Live geführt hat. TestFlight Live ist eine weitere Erweiterung der TestFlight-Plattform und bietet Entwicklern die Möglichkeit, TestFlight nicht nur für die Entwicklung und das Testen zu verwenden, sondern auch, wenn sich die Anwendung im App Store befindet. Sie können mehr darüber im TestFlight-Blog lesen.
Obwohl die Idee von TestFlight eine einfache, flächendeckende Verteilung von Betaversionen ist, hat TestFlight noch viel mehr zu bieten. Nachdem Sie TestFlight für ein paar Wochen verwendet haben, werden Sie feststellen, dass das Team hinter TestFlight hervorragende Arbeit geleistet hat, was die Features angeht und wie die verschiedenen Teile zusammenpassen.
Es gibt viele weitere Funktionen, auf die ich in diesem Artikel nicht eingegangen bin. Ich empfehle Ihnen, die Website von TestFlight zu besuchen und die hervorragende Dokumentation zu durchsuchen. TestFlight wächst immer noch schnell und ich bin gespannt, wie es sich weiterentwickelt und verbessert.