Testare un'applicazione è indispensabile se si prevede di fornire un prodotto robusto e affidabile ai propri clienti. Questo articolo darà un'occhiata più da vicino al beta test delle applicazioni iOS con TestFlight, un servizio Web gratuito che facilita la distribuzione di build Ad Hoc e il monitoraggio dell'utilizzo dei beta test.
Il software di test non si limita al beta test. Esistono diverse tecniche per testare software, come test di unità, test di integrazione, test di stress, ecc. Ciascuna di queste metodologie ha il suo vantaggio e posto nel ciclo di sviluppo. Il beta test è un processo in cui una versione preliminare o beta viene distribuita a un pubblico limitato che non fa parte del team di sviluppo.
Nei primi giorni dello sviluppo di iOS, non era banale distribuire build di test, raccogliere feedback e raccogliere rapporti sugli arresti anomali. Tuttavia, negli ultimi anni sono emersi una manciata di servizi che rendono il beta test non solo più facile, ma banale. In questo articolo, discuterò uno di questi servizi: TestFlight. TestFlight consente agli sviluppatori di distribuire i build di test over-the-air. Giocare con i file .ipa e i profili di provisioning è un ricordo del passato se si decide di collaborare con TestFlight.
La facilità della distribuzione Ad Hoc non è l'unico vantaggio di TestFlight. TestFlight offre anche un SDK che ti offre una serie di grandi funzionalità con un overhead sorprendentemente piccolo. Con l'SDK installato e configurato, i report sugli arresti anomali vengono inviati a TestFlight e automaticamente simbolizzati. Un'altra grande funzionalità di TestFlight SDK è il checkpoint. È possibile impostare i checkpoint in posizioni specifiche nella propria applicazione per verificare se una particolare caratteristica è effettivamente utilizzata. I checkpoint si legano perfettamente alle sessioni. Ogni volta che un utente apre l'applicazione, viene automaticamente avviata una sessione. La dashboard di TestFlight mostra per quanto tempo dura una sessione e quali checkpoint il tester ha superato durante una sessione. L'elenco delle funzionalità non si ferma qui. Alcune altre utili funzioni includono: feedback in-app, aggiornamenti in-app e registrazione remota.
Per seguire i passaggi di questo tutorial, avrai bisogno di un account TestFlight. Vai al sito Web TestFlight e registrati per un account gratuito. Dopo aver effettuato l'accesso al tuo account TestFlight per la prima volta, ti verrà chiesto di creare una squadra. Cosa sono le squadre? Una squadra è solo una categorizzazione per raggruppare build e tester. È probabile che tu lavori su diverse applicazioni per diversi clienti o progetti. Un team ti consente di raggruppare facilmente build e tester per ogni applicazione o client. In altre parole, è un modo conveniente per mantenere le build e i tester di diversi progetti separati e organizzati.
Il prossimo passo è caricare una build di test su TestFlight. Tuttavia, prima di farlo, dobbiamo creare un'applicazione correttamente configurata e configurata per TestFlight. Ciò include l'integrazione dell'SDK di TestFlight per sfruttare le funzionalità descritte in precedenza.
Ovviamente, TestFlight brilla davvero se hai un gruppo di tester impegnati (preferibilmente persone che non fanno parte del team di sviluppo). L'aggiunta di tester a TestFlight è semplice come inviare un invito. Con TestFlight, non è più complicato ottenere l'UDID di un dispositivo come vedrai un po 'più tardi. Spiego come invitare beta tester un po 'più avanti in questo tutorial.
L'applicazione che stiamo per costruire sarà semplice. L'obiettivo principale di questo tutorial è mostrarti come aumentare la velocità con TestFlight e non tanto costruire un'applicazione ricca di funzionalità. Le caratteristiche dell'applicazione sono semplici, (1) implementare i checkpoint TestFlight, (2) chiedere all'utente feedback durante l'utilizzo dell'applicazione e (3) bloccare l'applicazione e lasciare che TestFlight raccolga il rapporto di arresto anomalo.
Crea un nuovo progetto in Xcode selezionando il Applicazione vista singola modello dall'elenco di modelli (figura 3). Dai un nome alla tua domanda Decollare, 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 4).
Inizia scaricando l'ultima versione stabile di TestFlight SDK (1.1 al momento della scrittura). Estrai l'archivio e aggiungi libTestFlight.a e TestFlight.h, situato nel TestFlightx.x cartella, al tuo progetto. Assicurati di copiare entrambi i file nel progetto selezionando la casella di controllo Copia gli elementi nella cartella del gruppo di destinazione (se necessario) e non dimenticare di aggiungere entrambi i file al target Take-Off (figura 5). Per mantenere tutto organizzato, posto libTestFlight.a e TestFlight.h in un gruppo separato chiamato PROVA Scelta dei colori.
Sono necessari alcuni altri passaggi per finalizzare l'integrazione con TestFlight. Seleziona il tuo progetto nel Project Navigator e fare clic sulla destinazione Take-Off nell'elenco di bersagli. Seleziona il Costruisci fasi scheda nella parte superiore e aprire il Collega binario con le librerie cassetto. Se tutto è andato bene, libTestFlight.a dovrebbe essere presente nell'elenco delle biblioteche. Trascinare libTestFlight.a nella lista delle librerie collegate se non è presente nella lista (figura 6).
TestFlight fa anche uso di libz libreria per fare un po 'del suo lavoro quindi abbiamo bisogno di collegare il progetto anche a questa libreria. Fare clic sul pulsante più nella parte inferiore dell'elenco di librerie, cercare libz.dylib, e aggiungilo all'elenco delle librerie collegate.
Il passaggio successivo è facoltativo, ma consigliato se si prevede di utilizzare TestFlight in tutta l'applicazione. Invece di importare TestFlight.h in ogni file che fa uso di TestFlight SDK, è più comodo aggiungerlo a quello del progetto Prefix.pch file. Dai un'occhiata al completo Prefix.pch file sottostante per chiarimenti.
// // Intestazione prefisso per tutti i file di origine della destinazione "Take-Off" nel progetto "Take-Off" // #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 #import "TestFlight.h" #endif
TestFlight installa un gestore di eccezioni non rilevate per segnalare arresti anomali e raccogliere rapporti sugli arresti anomali. Se si desidera utilizzare questa funzione, si consiglia di modificare leggermente le impostazioni di costruzione del progetto. Seleziona il tuo progetto dal Project Navigator e scegli il Decollare bersaglio dalla lista di obiettivi. Seleziona il Costruisci le impostazioni scheda e scorrere fino a Distribuzione impostazioni (figura 8). È necessario impostare tre impostazioni di distribuzione su NO.
Le impostazioni in grassetto indicano che il valore predefinito è sovrascritto. Puoi annullare le modifiche apportate selezionando un'impostazione in grassetto e premendo backspace sulla tastiera. Assicurarsi che il valore effettivo dell'impostazione di generazione sia impostato su Combinato (figura 9).
TestFlight non fa ancora nulla nella tua applicazione. Per utilizzare le sue funzionalità, è necessario inizializzare TestFlight all'avvio dell'applicazione. Il luogo ideale per impostare TestFlight è nel delegato dell'applicazione applicazione: didFinishLaunchingWithOptions:
metodo. Configurare TestFlight è sorprendentemente facile. Tutto ciò che dobbiamo fare è chiamare decollare:
nella classe TestFlight e passa il token del team del team che abbiamo impostato in precedenza in questo tutorial.
Per trovare il token della tua squadra, vai su Dashboard di TestFlight, seleziona la squadra corretta dal menu a tendina in alto a destra e scegli Modifica informazioni da quello stesso menu. Copia il token del team e passalo come parametro nel file decollare:
metodo.
- (BOOL) application: (applicazione UIApplication *) didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Initialize View Controller self.viewController = [[MTViewController alloc] initWithNibName: @ "MTViewController" bundle: nil]; // Initialize Window self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bound]]; [self.window setRootViewController: self.viewController]; [self.window makeKeyAndVisible]; // Inizializza TestFlight [TestFlight takeOff: @ "TEAM_TOKEN_GOES_HERE"]; return YES;
TestFlight è ora configurato, ma dobbiamo ancora caricare una build su TestFlight. I seguenti passaggi non sono diversi da quelli che normalmente si eseguono per preparare un test o una build ad hoc per un'applicazione. Ho elencato i passaggi necessari qui sotto.
Questo potrebbe sembrare un sacco di lavoro, ma la maggior parte di questi passaggi deve essere eseguita una sola volta per una nuova applicazione. Inoltre, molto di questo può essere automatizzato. Oltre all'SDK di TestFlight, TestFlight ha anche un'API di caricamento che consente agli sviluppatori di caricare automaticamente i build su TestFlight. Non coprirò l'API di caricamento in questo tutorial poiché questo è un argomento più avanzato.
Dato che stai leggendo questo tutorial, supporrò che tu abbia già familiarità con il beta testing e le fasi necessarie per preparare una build di test per la distribuzione ad hoc. In questo articolo, mi limiterò ai passaggi che riguardano TestFlight.
Quando si distribuiscono build utilizzando TestFlight, è importante eseguire correttamente la versione delle build. In questo modo, tenere traccia delle diverse build di test diventerà molto più semplice.
Prima di caricare la tua applicazione, assicurati di impostare il numero di versione della tua applicazione su 0.1.0 per indicare che questa è una versione preliminare. Dai un'occhiata a questa domanda su Stack Overflow per maggiori informazioni sui numeri di versione.
Per caricare manualmente una build su TestFlight, fai clic sul secondo pulsante a destra nella parte superiore di TestFlight Dashboard.
Aggiungere una nuova build è facile come trascinare il file .ipa nel campo appropriato, aggiungendo una breve descrizione, nota anche come note di rilascio, e facendo clic sul Caricare pulsante. Le note di rilascio sono molto più utili di quanto la maggior parte della gente pensi. Le note di rilascio dovrebbero contenere informazioni sulle modifiche apportate alla build di test, ma dovrebbero anche contenere bug noti (se necessario) e potenziali soluzioni alternative.
Dopo aver caricato una build della tua applicazione, sei portato su permessi vista della tua nuova build di test. Le autorizzazioni di una build determinano chi ha accesso alla nuova build di test, ovvero chi può installare la build di test sui propri dispositivi. Ad esempio, se si desidera testare una build critica solo internamente e impedire ai tester esterni di accedere alla compilazione, è possibile limitare le autorizzazioni di tale build solo ai membri del proprio team di sviluppo.
Per rendere più facile la distribuzione delle build di test, TestFlight ha una funzione chiamata in modo appropriato liste di distribuzione. Una lista di distribuzione è una lista o un gruppo di persone all'interno di un gruppo TestFlight. Invece di selezionare manualmente i membri di un team TestFlight ogni volta che carichi una nuova build, dici a TestFlight quali liste di distribuzione hanno accesso alla nuova build.
Una delle migliori caratteristiche di TestFlight è la capacità di raccogliere e simbolizzare automaticamente i rapporti sugli arresti anomali. Implementare checkpoint e chiedere il feedback degli utenti è altrettanto semplice. Modifichiamo il progetto per vedere come funziona tutto questo.
Apri il tuo progetto Xcode e vai al file di implementazione del controller della vista (MTViewController.m). Nel viewDidLoad
metodo, creare tre pulsanti come mostrato di seguito. Il codice non dovrebbe essere difficile da capire.
- (void) viewDidLoad [super viewDidLoad]; // Crea pulsante di arresto UIButton * crashButton = [[allocazione UIButton] initWithFrame: CGRectMake (20.0, 20.0, 280.0, 44.0)]; [crashButton setTitle: @ "Crash" forState: UIControlStateNormal]; [crashButton setBackgroundColor: [UIColor blueColor]]; [crashButton addTarget: self action: @selector (crash :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: crashButton]; // Crea pulsante checkpoint UIButton * checkpointButton = [[allocazione UIButton] initWithFrame: CGRectMake (20.0, 72.0, 280.0, 44.0)]; [checkpointButton setTitle: @ "Checkpoint" forState: UIControlStateNormal]; [checkpointButton setBackgroundColor: [UIColor blueColor]]; [checkpointButton addTarget: self action: @selector (checkpoint :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: checkpointButton]; // Crea pulsante Feedback UIButton * feedbackButton = [[allocazione UIButton] initWithFrame: CGRectMake (20.0, 124.0, 280.0, 44.0)]; [feedbackButton setTitle: @ "Feedback" forState: UIControlStateNormal]; [feedbackButton setBackgroundColor: [UIColor blueColor]]; [feedbackButton addTarget: self action: @selector (feedback :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: feedbackButton];
L'idea è semplice. L'applicazione dovrebbe bloccarsi quando l'utente tocca il primo pulsante. Arrestare un'applicazione è facile. Destra? Dai un'occhiata all'implementazione di incidente:
metodo per vedere come è implementato. Creiamo una matrice con un elemento e poi chiediamo il secondo oggetto nella matrice. Questo getta un NSRangeException
poiché c'è solo un elemento nella matrice.
- (void) crash: (id) sender NSArray * array = @ [@ "one"]; NSLog (@ "% @", [array objectAtIndex: 1]);
L'implementazione del Checkpoint:
il metodo è sorprendentemente semplice grazie all'SDK di TestFlight. Come accennato in precedenza, i checkpoint sono un mezzo per monitorare se alcune funzionalità dell'applicazione sono utilizzate dai tester. In altre parole, i checkpoint ti dicono quando un utente ha fatto qualcosa che ti interessa. Come ho detto, i checkpoint ti dicono (tra le altre cose) quali funzioni vengono utilizzate e, cosa ancora più importante, quali caratteristiche non lo sono. Alcune funzionalità sono difficili da trovare anche se ciò potrebbe non essere ovvio per lo sviluppatore.
- (vuoto) checkpoint: (id) mittente [TestFlight passCheckpoint: @ "Utente ha fatto clic sul pulsante checkpoint."];
Ci sono vari modi per raccogliere feedback dai tuoi tester. Il modo più semplice per raccogliere feedback, tuttavia, è utilizzare l'integrazione del feedback di TestFlight. Dai un'occhiata all'implementazione di risposta:
metodo per vedere come funziona. Quando l'utente tocca il pulsante di feedback, appare una vista modale e consente all'utente di inserire il feedback (figura 13).
- (vuoto) feedback: (id) mittente [TestFlight openFeedbackView];
Dopo aver aggiunto queste modifiche alla tua applicazione, aggiorna il numero di versione della tua applicazione a 0.2.0 e archivia il progetto. È buona norma pulire sempre il progetto prima di preparare una build per la distribuzione, per l'App Store e per la distribuzione ad hoc. Carica il nuovo file .ipa su TestFlight, imposta le autorizzazioni appropriate e aggiorna l'installazione sul tuo dispositivo con la nuova build visitando la dashboard TestFlight sul tuo dispositivo. Se hai seguito i passaggi, dovresti vedere i tre pulsanti e toccare ciascun pulsante per attivare la funzionalità nell'applicazione.
TestFlight invia le informazioni ai server TestFlight ogni volta che è possibile, ovvero se è disponibile una connessione di rete e il sistema operativo non uccide l'applicazione prima di aver completato l'invio dei dati ai server TestFlight. Ciò significa che TestFlight è un ottimo strumento per raccogliere dati in tempo reale dai tuoi tester. Puoi provare tu stesso toccando i tre pulsanti nella tua applicazione e dando un'occhiata al dashboard TestFlight pochi minuti dopo.
TestFlight ti mostra quali tester hanno installato l'aggiornamento e su quale dispositivo. Mostra il numero di sessioni, i checkpoint che hanno superato e il numero di arresti anomali verificatisi. Come ho detto prima, i rapporti sugli arresti anomali vengono automaticamente simbolizzati, che è una delle caratteristiche che amo di più.
È anche possibile esplorare le singole sessioni facendo clic sulla scheda delle sessioni a sinistra (figura 14), selezionando un utente dall'elenco e facendo clic su una delle sessioni. Questo ti dà una descrizione dettagliata della sessione del rispettivo utente (figura 15).
Il beta test è utile solo se puoi fare affidamento su un gruppo di tester impegnati che desiderano veramente mettere alla prova la tua applicazione. L'aggiunta di tester a TestFlight può essere eseguita in due modi. (1) Aprire il dashboard TestFlight del team a cui si desidera aggiungere un nuovo tester. Fai clic sul pulsante con il piccolo segno più nell'angolo in alto a destra e compila il modulo. Si consiglia all'utente di fare clic sul collegamento di accettazione sul dispositivo di test. Anche se questo non è strettamente necessario, rende il processo molto più semplice, perché il dispositivo che l'utente sta usando verrà automaticamente aggiunto al proprio account come dispositivo di test.
(2) Una seconda opzione per aggiungere i tester consiste nell'utilizzare un URL di reclutamento. Questa è una forma che consente a chiunque di registrarsi come tester. Ciò rende più facile se hai un gruppo abbastanza grande di tester che desideri aggiungere a TestFlight.
Alcuni mesi fa, TestFlight è stato acquisito da Burstly e questo ha portato alla creazione di TestFlight Live. TestFlight Live è un'altra aggiunta alla piattaforma TestFlight e offre agli sviluppatori i mezzi per utilizzare TestFlight non solo per lo sviluppo e il test, ma anche quando l'applicazione è attiva nell'App Store. Puoi leggere ulteriori informazioni sul blog di TestFlight.
Anche se l'idea alla base di TestFlight è la semplice distribuzione over-the-air delle versioni beta, TestFlight ha molto altro da offrire. Dopo aver utilizzato TestFlight per alcune settimane, noterai che il team di TestFlight ha svolto un ottimo lavoro in termini di funzionalità da includere e di come tutti i diversi pezzi combaciano.
Ci sono molte altre funzionalità che non ho discusso in questo articolo, quindi ti invito a visitare il sito Web di TestFlight e a consultare la documentazione in sospeso. TestFlight sta ancora crescendo rapidamente e sono curioso di vedere come continua ad evolversi e migliorare.