Testarea unei aplicații este indispensabilă dacă intenționați să furnizați clienților dvs. un produs robust și fiabil. Acest articol va examina mai îndeaproape aplicațiile beta de testare iOS cu TestFlight, un serviciu web gratuit ce permite distribuirea ușoară a materialelor Ad Hoc și monitorizarea utilizării testelor beta.
Software-ul de testare nu se limitează la testarea beta. Există mai multe tehnici de testare a software-ului, cum ar fi testarea unităților, testarea integrării, testul de stres etc. Fiecare dintre aceste metodologii are avantajul și locul în ciclul de dezvoltare. Testul beta este un proces în care o versiune pre-lansare sau versiune beta este distribuită unui public limitat care nu face parte din echipa de dezvoltare.
În primele zile ale dezvoltării iOS, nu a fost deloc banal să distribuiți teste, să colectați feedback și să colectați rapoarte de accidente. Cu toate acestea, în ultimii ani au apărut o serie de servicii care fac testarea beta nu doar mai ușoară, dar mai puțin folositoare. În acest articol, voi discuta un astfel de serviciu: TestFlight. TestFlight permite dezvoltatorilor să distribuie testul construit peste aer. Fiddling cu fișierele .ipa și profilurile de provizionare este un lucru din trecut, dacă vă decideți să vă alăturați echipei TestFlight.
Ușurința distribuției Ad Hoc nu este singurul avantaj al TestFlight. TestFlight oferă, de asemenea, un kit SDK care vă oferă o serie de caracteristici minunate cu surse puțin surprinzătoare. Cu kitul SDK instalat și configurat, rapoartele de eroare sunt trimise TestFlight și sunt simbolizate automat. O altă trăsătură extraordinară a testului SDK TestFlight este punctul de control. Puteți seta puncte de control la anumite locații din aplicația dvs. pentru a vedea dacă o anumită caracteristică este utilizată efectiv. Punctele de control se leagă perfect cu sesiunile. Ori de câte ori un utilizator deschide aplicația, o sesiune este pornită automat. Tabloul de bord TestFlight arată cât timp durează o sesiune și ce puncte de control testerul a trecut în timpul unei sesiuni. Lista de caracteristici nu se oprește aici. Alte caracteristici utile includ: feedback în aplicație, actualizări în aplicații și înregistrări la distanță.
Pentru a urma pașii din acest tutorial, veți avea nevoie de un cont TestFlight. Mergeți pe site-ul TestFlight și înscrieți-vă pentru un cont gratuit. După ce vă conectați pentru prima dată la contul dvs. TestFlight, vi se cere să creați o echipă. Ce sunt echipele? O echipă este doar o categorizare pentru gruparea constructorilor și testerilor. Este posibil să lucrați la mai multe aplicații pentru clienți sau proiecte diferite. O echipă vă permite să grupați constructorii și testerele pentru fiecare aplicație sau client cu ușurință. Cu alte cuvinte, este o modalitate convenabilă de a ține separat și organizat construcțiile și testerele diferitelor proiecte.
Următorul pas este să încărcați un test de testare pentru TestFlight. Cu toate acestea, înainte de a face acest lucru, trebuie să creați o aplicație care este configurată și configurată corespunzător pentru TestFlight. Aceasta include integrarea Kitului TestFlight SDK pentru a profita de caracteristicile pe care le-am descris mai devreme.
Desigur, TestFlight strălucește cu adevărat dacă aveți un grup de testeri responsabili (de preferință oameni care nu fac parte din echipa de dezvoltare). Adăugarea de testeri la TestFlight este la fel de simplă ca trimiterea unei invitații. Cu TestFlight, nu mai este greu să obțineți UDID-ul unui dispozitiv, așa cum veți vedea mai târziu. Vă explic cum să invitați testerele beta un pic mai târziu în acest tutorial.
Aplicația pe care urmează să o construim va fi simplă. Scopul principal al acestui tutorial este să vă arătăm cum să ajungeți la viteză cu TestFlight și să nu construiți atât de mult o aplicație bogată în funcții. Caracteristicile aplicației sunt simple, (1) să pună în aplicare punctele de control TestFlight, (2) să ceară feedback utilizatorului în timp ce utilizează aplicația și (3) să spargă aplicația și să lase TestFlight să colecteze raportul de avarie.
Creați un nou proiect în Xcode selectând Vizualizare individuală șablon din lista de șabloane (figura 3). Denumiți aplicația Decolare, 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 4).
Începeți prin descărcarea celei mai recente versiuni stabile a kitului TestFlight SDK (1.1 în momentul redactării). Extrageți arhiva și adăugați libTestFlight.a și TestFlight.h, localizat în TestFlightx.x dosar, la proiectul dvs. Asigurați-vă că ați copiat ambele fișiere în proiect, bifând caseta de selectare etichetat Copiați articolele în dosarul grupului de destinație (dacă este necesar) și nu uitați să adăugați ambele fișiere la ținta de decolare (figura 5). Pentru a păstra totul organizat, loc libTestFlight.a și TestFlight.h într-un grup separat numit TestFlight.
Sunt necesari câțiva pași pentru a finaliza integrarea cu TestFlight. Selectați proiectul în Project Navigator și faceți clic pe ținta Take-off din lista de obiective. Selectează Construiți faze în partea de sus și deschideți Link binar cu biblioteci sertar. Dacă totul a mers bine, libTestFlight.a ar trebui să fie prezent în lista bibliotecilor. Trage libTestFlight.a în lista de biblioteci legate dacă nu este prezentă în listă (figura 6).
TestFlight utilizează de asemenea libz biblioteca pentru a face o parte din munca sa, astfel încât trebuie să legăm proiectul și împotriva acestei biblioteci. Faceți clic pe butonul plus din partea de jos a listei de biblioteci, căutați libz.dylib, și adăugați-l în lista de biblioteci legate.
Următorul pas este opțional, dar este recomandat dacă intenționați să utilizați TestFlight în întreaga aplicație. În loc să importați TestFlight.h în fiecare fișier care utilizează TestFlight SDK, este mai convenabil să-l adăugați la proiect Prefix.pch fişier. Uită-te la completă Prefix.pch fișierul de mai jos pentru clarificare.
// // Antetul prefixului pentru toate fișierele sursă ale obiectivului "Take-Off" din proiectul "Take-Off" // #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 "TestFlight.h" #endif
TestFlight instalează un handler de excepție pentru a raporta accidentele și a colecta rapoarte de accidente. Dacă doriți să utilizați această caracteristică, se recomandă modificarea ușoară a setărilor de construire a proiectului. Selectați proiectul din Project Navigator și alegeți Decolare țintă din lista de obiective. Selectează Construiți setările filă și defilați la Implementare setările (figura 8). Trebuie setate trei setări de implementare NU.
Setările cu caractere aldine indică faptul că valoarea prestabilită este suprascrisă. Puteți reveni la toate modificările pe care le-ați efectuat selectând o setare îndrăzneață și apăsând tasta backspace pe tastatură. Asigurați-vă că valoarea efectivă a setării pentru construcție este setată la combinat (figura 9).
TestFlight nu face nimic în cererea dvs. încă. Pentru a utiliza funcțiile sale, trebuie să inițializăm TestFlight când se lansează aplicația. Locația ideală pentru instalarea TestFlight este în delegatul aplicației aplicare: didFinishLaunchingWithOptions:
metodă. Setarea TestFlight este surprinzător de ușoară. Tot ce trebuie să facem este să sunăm decolare:
pe clasa TestFlight și să treacă jetonul echipei echipei pe care am creat-o mai devreme în acest tutorial.
Pentru a găsi jetonul echipei, deplasați-vă la Tabloul de bord al TestFlight, selectați echipa potrivită din meniul derulant din partea dreaptă sus și alegeți Editați informațiile din același meniu. Copiați tokenul echipei și transmiteți-l ca parametru în decolare:
metodă.
- (BOOL): aplicație (UIApplication *) didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Inițializați vizualizarea controlerului self.viewController = [[MTViewController alloc] initWithNibName: @ "MTViewController" bundle: nil]; // Initialize fereastra self.window = [[UIWindow alocare] initWithFrame: [[UIScreen mainScreen] limite]]; [auto.window setRootViewController: self.viewController]; [auto.window makeKeyAndVisible]; // Initializeaza TestFlight [TestFlight takeOff: @ "TEAM_TOKEN_GOES_HERE"]; reveniți DA;
TestFlight este acum înființat, dar trebuie încă să încărăm o construcție pentru TestFlight. Următorii pași nu se deosebesc de pașii pe care i-ați lua în mod normal pentru a pregăti un test sau o construcție ad-hoc pentru o aplicație. Am enumerat pașii de mai jos.
Acest lucru ar putea părea o mulțime de muncă, dar majoritatea acestor pași trebuie să fie făcute o singură dată pentru o nouă cerere. În plus, o mare parte din acestea pot fi automatizate. În plus față de kitul TestFlight SDK, TestFlight are de asemenea un API pentru încărcare, care permite dezvoltatorilor să încarce în mod automat build-uri la TestFlight. Nu voi acoperi API-ul de încărcare în acest tutorial, deoarece acesta este un subiect mai avansat.
Din moment ce citiți acest tutorial, voi presupune că sunteți deja familiarizat cu testarea beta și pașii implicați în pregătirea unui test de testare pentru distribuția ad-hoc. În acest articol, mă voi limita la pașii care implică TestFlight.
Atunci când distribuiți build-uri folosind TestFlight, este important să aveți o versiune corectă a construirii. Procedând astfel, urmărirea testărilor diferite va deveni mult mai ușoară.
Înainte de a încărca aplicația, asigurați-vă că setați numărul versiunii aplicației dvs. la 0.1.0 pentru a indica faptul că aceasta este o versiune pre-lansată. Uitați-vă la această întrebare despre Stack Overflow pentru mai multe informații despre numerele de versiuni.
Pentru a încărca manual o construcție la TestFlight, faceți clic pe cel de-al doilea buton din partea dreaptă din partea de sus a tabloului de bord TestFlight.
Adăugarea unei construcții noi este la fel de ușor ca tragerea fișierului .ipa în câmpul corespunzător, adăugând o scurtă descriere, cunoscută și sub numele de note de lansare, și făcând clic pe Încărcați buton. Notele de lansare sunt mult mai utile decât majoritatea oamenilor cred. Notele de lansare ar trebui să conțină informații despre modificările aduse testului, dar ar trebui să conțină, de asemenea, erori cunoscute (dacă este necesar) și posibile soluții.
După ce încărcați o construcție a aplicației dvs., sunteți transferat la Permisiuni vizualizați noua construcție a testelor. Permisiunile unui constructor determină cine are acces la noile testări, adică cine poate instala testul pe dispozitivele lor. De exemplu, dacă doriți să testați o construcție critică numai pe plan intern și să împiedicați testarea externă să acceseze construirea, atunci puteți restricționa permisiunile acelei construcții să includă numai membrii echipei de dezvoltare.
Pentru a ușura distribuția testului, TestFlight are o funcție denumită corespunzător liste de distribuție. O listă de distribuție este o listă sau un grup de persoane din cadrul echipei TestFlight. În loc să selectați manual membrii unei echipe TestFlight de fiecare dată când încărcați o nouă construcție, îi spuneți echipei TestFlight care liste de distribuție au acces la noua construcție.
Una dintre cele mai bune caracteristici ale TestFlight este capacitatea de a colecta și simboliza automat rapoartele de impact. Punerea în aplicare a punctelor de control și solicitarea de feedback de la utilizatori este de asemenea ușor. Să modificăm proiectul pentru a vedea cum funcționează toate acestea.
Deschideți proiectul Xcode și treceți la fișierul de implementare al controlerului de vizualizare (MTViewController.m). În viewDidLoad
, creați trei butoane, după cum se arată mai jos. Codul nu trebuie să fie dificil de înțeles.
- (vid) viewDidLoad [super viewDidLoad]; // Crearea butonului Crash UIButton * crashButton = [[UIButton alin] initWithFrame: CGRectMake (20.0, 20.0, 280.0, 44.0)]; [crashButton setTitle: @ "Crash" pentruState: UIControlStateNormal]; [crashButton setBackgroundColor: [UICcolor blueColor]]; [crashButton addTarget: acțiune auto: @selector (crash :) forControlEvents: UIControlEventTouchUpInside]; [auto.view addSubview: crashButton]; // Crearea butonului de punct de control UIButton * checkpointButton = [[UIButton alocare] initWithFrame: CGRectMake (20.0, 72.0, 280.0, 44.0)]; [checkpointButton setTitle: @ "Punct de control" pentruState: UIControlStateNormal]; [checkpointButton setBackgroundColor: [UICcolor blueColor]]; [checkpointButton addTarget: acțiune auto: @selector (checkpoint :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: checkpointButton]; // Crearea butonului de feedback UIButton * feedbackButton = [[UIButton alin] initWithFrame: CGRectMake (20.0, 124.0, 280.0, 44.0)]; [feedbackButton setTitle: @ "Feedback" pentruState: UIControlStateNormal]; [feedbackButton setBackgroundColor: [UICcolor blueColor]]; [feedbackButton addTarget: acțiune auto: @selector (feedback :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: feedbackButton];
Ideea este simplă. Aplicația ar trebui să se prăbușească atunci când utilizatorul execută primul buton. Împrăștierea unei aplicații este ușoară. Dreapta? Aruncati o privire la punerea în aplicare a accident:
pentru a vedea cum este implementată. Creăm o matrice cu un element și apoi cerem al doilea obiect din matrice. Asta aruncă o NSRangeException
deoarece există doar un element în matrice.
- (vid): (id) expeditor NSArray * array = @ [@ "unul"]; NSLog (@ "% @", [array objectAtIndex: 1]);
Punerea în aplicare a directivei punct de control:
Metoda este surprinzător de ușoară, datorită testului SDK. După cum am menționat mai devreme, punctele de control reprezintă un mijloc de urmărire dacă anumite caracteristici ale aplicației dvs. sunt utilizate de testerii dvs. Cu alte cuvinte, punctele de control vă spun când un utilizator a făcut ceva care vă interesează. După cum am spus, punctele de control vă spun (printre altele) ce caracteristici sunt utilizate și, cu atât mai important, care caracteristici nu sunt. Unele caracteristici sunt greu de găsit, chiar dacă acest lucru ar putea să nu fie evident pentru dezvoltator.
- (void) punct de control: (id) expeditor [TestFlight passCheckpoint: @ "Utilizatorul a făcut clic pe butonul punct de control."];
Există mai multe modalități de a colecta feedback de la testeri. Cea mai ușoară modalitate de a colecta feedback este, totuși, de a utiliza integrarea feedback-ului TestFlight. Aruncati o privire la punerea în aplicare a parere:
pentru a vedea cum funcționează aceasta. Când utilizatorul apasă butonul feedback, se afișează o vizualizare modală și permite utilizatorului să introducă feedback (figura 13).
- (void) feedback: (id) expeditor [TestFlight openFeedbackView];
După adăugarea acestor modificări în aplicație, actualizați numărul versiunii aplicației dvs. la 0.2.0 și arhivați proiectul. Este o practică bună să vă curățați întotdeauna proiectul înainte de a pregăti o distribuție pentru distribuție, pentru App Store, precum și pentru distribuția ad-hoc. Încărcați noul fișier .ipa la TestFlight, stabiliți permisiunile corespunzătoare și actualizați instalarea pe dispozitivul dvs. cu noua versiune prin accesarea tabloului de bord TestFlight de pe dispozitiv. Dacă ați urmat pașii, ar trebui să vedeți cele trei butoane și atingerea fiecărui buton va declanșa funcționalitatea din aplicație.
TestFlight trimite informații serverelor TestFlight ori de câte ori poate, adică dacă este disponibilă o conexiune la rețea și sistemul de operare nu ucide aplicația înainte de terminarea trimiterii datelor către serverele TestFlight. Acest lucru înseamnă că TestFlight este un instrument excelent pentru colectarea de date live de la testeri. Puteți încerca singuri acest lucru prin atingerea celor trei butoane din aplicația dvs. și luând o privire la tabloul de bord TestFlight câteva minute mai târziu.
TestFlight vă arată care testere au instalat actualizarea și pe ce dispozitiv. Vă arată numărul de sesiuni, ce puncte de control au trecut și câte aglomerări au avut loc. După cum am menționat mai devreme, rapoartele privind accidentele sunt simbolizate automat, ceea ce reprezintă una dintre caracteristicile pe care le iubesc cel mai mult.
De asemenea, este posibil să explorați sesiuni individuale făcând clic pe fila sesiuni din stânga (figura 14), selectând un utilizator din listă și făcând clic pe una dintre sesiuni. Aceasta vă oferă o prezentare detaliată a sesiunii utilizatorului respectiv (figura 15).
Verificarea beta este utilă numai dacă vă puteți baza pe un grup de testeri responsabili care doresc cu adevărat să vă pună aplicația prin pașii săi. Adăugarea testerilor la TestFlight se poate face în două moduri. (1) Deschideți tabloul de bord TestFlight al echipei la care doriți să adăugați un tester nou. Faceți clic pe butonul cu semnul plus mic în colțul din dreapta sus și completați formularul. Se recomandă ca utilizatorul să facă clic pe legătura de acceptare de pe dispozitivul de testare. Chiar dacă acest lucru nu este strict necesar, procesul face mult mai ușor, deoarece dispozitivul pe care îl folosește utilizatorul va fi adăugat automat în cont ca dispozitiv de testare.
(2) O a doua opțiune de adăugare a testerilor este utilizarea unei adrese URL de recrutare. Aceasta este o formă care permite oricui să se înscrie ca tester. Acest lucru face mai ușor dacă aveți un grup destul de mare de testeri pe care doriți să îl adăugați la TestFlight.
Acum câteva luni, TestFlight a fost achiziționat de Burstly și acest lucru a dus la crearea TestFlight Live. TestFlight Live este un alt adițional la platforma TestFlight și oferă dezvoltatorilor mijloacele de a nu utiliza numai TestFlight pentru dezvoltare și testare, dar și atunci când aplicația este live în App Store. Puteți citi mai multe despre acesta pe blogul TestFlight.
Chiar dacă ideea din spatele testului este simplu, distribuția în aer a versiunilor beta, TestFlight are multe de oferit. După ce ați folosit TestFlight pentru câteva săptămâni, veți observa că echipa din spatele TestFlight a făcut o treabă excelentă în ceea ce privește caracteristicile care trebuie incluse și cum se potrivesc toate piesele diferite.
Există multe alte caracteristici pe care nu le-am discutat în acest articol, așa că vă încurajez să vizitați site-ul TestFlight și să căutați documentația extraordinară. TestFlight continuă să crească rapid și sunt curios să văd cum continuă să evolueze și să se îmbunătățească.