Att testa en ansökan är oumbärlig om du planerar att leverera en robust och pålitlig produkt till dina kunder. I den här artikeln kommer vi att titta närmare på beta-test iOS-program med TestFlight, en gratis webbtjänst som gör det enkelt att distribuera Ad Hoc-byggnader och övervaka betaltestning.
Testprogramvara är inte begränsad till beta-testning. Det finns flera tekniker för att testa programvara, såsom enhetstestning, integreringstestning, stresstestning, etc. Var och en av dessa metoder har sin fördel och ligger i utvecklingscykeln. Betatestning är en process där en pre-release eller beta-version distribueras till en begränsad publik som inte ingår i utvecklingslaget.
I de tidiga dagarna av iOS-utveckling var det inte trivialt att distribuera testbyggnader, samla in feedback och samla rapporter om krasch. Men under de senaste åren har en handfull tjänster uppstått som gör beta-test inte bara enklare, men trivial. I den här artikeln kommer jag att diskutera en sådan tjänst: TestFlight. TestFlight tillåter utvecklare att distribuera testbyggnader över luften. Fiddling med .ipa-filer och provisioning-profiler är en sak i det förflutna om du bestämmer dig för att klara dig med TestFlight.
Den lätta ad hoc-distributionen är inte den enda fördelen med TestFlight. TestFlight erbjuder också en SDK som ger dig ett antal bra funktioner med överraskande lite overhead. När SDK installeras och konfigureras skickas kraschrapporter till TestFlight och symboliseras automatiskt. En annan bra funktion i TestFlight SDK är kontrollpunkter. Du kan ställa in kontrollpunkter på specifika platser i din ansökan för att se om en viss funktion faktiskt används. Checkpoints knyts in ordentligt med sessioner. När en användare öppnar programmet startas en session automatiskt. TestFlight-instrumentpanelen visar hur länge en session varar och vilka kontrollpunkter som testaren passerade under en session. Listan över funktioner stannar inte där. Några andra användbara funktioner är: in app-återkoppling, uppdateringar i app och fjärrloggning.
För att följa stegen i den här handledningen behöver du ett TestFlight-konto. Gå vidare till TestFlight-webbplatsen och registrera dig för ett gratis konto. Efter att du loggat in på ditt TestFlight-konto för första gången blir du ombedd att skapa ett lag. Vad är lag? Ett lag är bara en kategorisering för gruppering av byggnader och testare. Chansen är att du arbetar med flera applikationer för olika kunder eller projekt. Med ett team kan du enkelt bygga byggarna och testarna för varje applikation eller klient. Med andra ord är det ett bekvämt sätt att hålla byggnader och testare av olika projekt separerade och organiserade.
Nästa steg är att ladda upp en testbyggnad till TestFlight. Men innan vi gör det måste vi skapa en applikation som är korrekt inställd och konfigurerad för TestFlight. Detta inkluderar att integrera TestFlight SDK för att dra nytta av de funktioner jag beskrivit tidigare.
Självklart skenar TestFlight verkligen om du har en grupp engagerade testare (helst människor som inte ingår i utvecklingslaget). Att lägga testare till TestFlight är lika enkelt som att skicka en inbjudan. Med TestFlight är det inte längre besvärligt att få en enhetens UDID som du kommer se lite senare. Jag förklarar hur man bjuder beta-testare lite senare i denna handledning.
Den ansökan som vi ska bygga kommer att vara enkel. Det primära målet med denna handledning är att visa dig hur du kan få fart med TestFlight och inte så mycket att bygga en funktionsrik applikation. Funktionerna i applikationen är enkla, (1) implementera TestFlight-kontrollpunkter, (2) be användaren om feedback när programmet används, och (3) krascha applikationen och låta TestFlight samla kraschrapporten.
Skapa ett nytt projekt i Xcode genom att välja Enkel visningsprogram mall från listan med mallar (figur 3). Namn på din ansökan Ta av, Ange en företagsidentifierare, inställd iPhone för enhetsfamiljen och kontrollera Använd automatisk referensräkning. Se till att avmarkera de övriga kryssrutorna för det här projektet. Berätta Xcode där du vill spara ditt projekt och klicka på Skapa knapp (figur 4).
Börja med att hämta den senaste stabila versionen av TestFlight SDK (1.1 vid skrivetid). Extrahera arkivet och lägg till libTestFlight.a och TestFlight.h, belägen i TestFlightx.x mapp till ditt projekt. Var noga med att kopiera båda filerna till ditt projekt genom att markera kryssrutan Kopiera objekt till destinationsgruppens mapp (om det behövs) och glöm inte att lägga till båda filerna till startmålet (figur 5). För att hålla allt organiserat, placera libTestFlight.a och TestFlight.h i en separat grupp som heter TestFlight.
Några steg är nödvändiga för att slutföra integrationen med TestFlight. Välj ditt projekt i Project Navigator och klicka på startmål i listan över mål. Välj Bygga faser fliken högst upp och öppna Länk binär med bibliotek låda. Om allt gick bra, libTestFlight.a bör finnas i listan över bibliotek. Drag libTestFlight.a i listan över länkade bibliotek om den inte finns i listan (figur 6).
TestFlight använder också libz bibliotek för att göra något av sitt arbete så vi måste länka projektet mot det här biblioteket också. Klicka på plusknappen längst ner i listan över bibliotek, sök efter libz.dylib, och lägg till den i listan över länkade bibliotek.
Nästa steg är valfritt, men rekommenderas om du planerar att använda TestFlight i hela applikationen. I stället för att importera TestFlight.h I varje fil som använder sig av TestFlight SDK, är det bekvämare att lägga till det i projektets Prefix.pch fil. Ta en titt på komplett Prefix.pch fil nedan för förtydligande.
// // Prefixrubrik för alla källfiler i "Take-off" -målet i "Take-off" -projektet // #import#ifndef __IPHONE_4_0 #warning "Det här projektet använder funktioner som endast är tillgängliga i iOS SDK 4.0 och senare." #endif #ifdef __OBJC__ #import #importera #import "TestFlight.h" #endif
TestFlight installerar en uncaught exception handler för att rapportera kraschar och samla kraschrapporter. Om du vill använda den här funktionen rekommenderas det att ändra byggnadsinställningarna för ditt projekt något. Välj ditt projekt från Project Navigator och välj Ta av målet från listan över mål. Välj Bygg inställningar fliken och bläddra till Spridning inställningar (figur 8). Tre installationsinställningar måste ställas in på NEJ.
Inställningar med fetstil indikerar att standardvärdet överstiger. Du kan återställa alla ändringar som du gjort genom att välja en djärv inställning och slå backspace på tangentbordet. Se till att det effektiva värdet för bygginställningen är inställt på Kombinerad (figur 9).
TestFlight gör inte någonting i din ansökan än. För att kunna utnyttja dess funktioner måste vi initiera TestFlight när programmet startas. Den ideala platsen för att konfigurera TestFlight finns i ansökningsdelegatets applikations: didFinishLaunchingWithOptions:
metod. Att installera TestFlight är överraskande enkelt. Allt vi behöver göra är att ringa ta av:
på TestFlight-klassen och skicka teamtoken till det team vi satt upp tidigare i denna handledning.
För att hitta ditt teamtoken, gå över till TestFlights Dashboard, välj det rätta laget från rullgardinsmenyn längst upp till höger och välj Redigera Info från samma meny. Kopiera teamtoken och skicka den som parameter i ta av:
metod.
- (BIA) ansökan: (UIApplication *) ansökan didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Initialisera View Controller self.viewController = [[MTViewController tilldela] initWithNibName: @ "MTViewController" bunt: nil]; // Initiera fönster self.window = [[UIWindow alloc] initWithFrame: gränser för [[UIScreen mainScreen]]; [self.window setRootViewController: self.viewController]; [self.window makeKeyAndVisible]; // Initiera TestFlight [TestFlight takeOff: @ "TEAM_TOKEN_GOES_HERE"]; returnera JA;
TestFlight är nu uppbyggd, men vi behöver fortfarande ladda upp en byggnad till TestFlight. Följande steg är inte annorlunda än de steg du normalt vill ta för att förbereda ett test eller ad hoc-bygg för en applikation. Jag har listat de nödvändiga stegen nedan.
Det kan tyckas som mycket arbete, men de flesta av dessa steg behöver bara göras en gång för en ny applikation. Dessutom kan mycket av detta automatiseras. Förutom TestFlights SDK har TestFlight också ett uppladdnings API som tillåter utvecklare att automatiskt ladda upp byggnader till TestFlight. Jag kommer inte att täcka uppladdnings API i den här handledningen eftersom det här är ett mer avancerat ämne.
Eftersom du läser denna handledning kommer jag att anta att du redan är bekant med beta-testning och de åtgärder som krävs för att förbereda en testbyggnad för ad hoc-distribution. I den här artikeln kommer jag att begränsa mig till de steg som involverar TestFlight.
När du distribuerar bygger med TestFlight, är det viktigt att du korrekt versionar dina byggnader. Genom att göra det blir det mycket enklare att hålla reda på olika testbyggnader.
Innan du laddar upp din ansökan, se till att du anger versionsnumret för din ansökan till 0.1.0 för att ange att detta är en pre-release-version. Ta en titt på denna fråga om Stack Overflow för mer information om versionsnummer.
För att manuellt ladda upp en byggnad till TestFlight, klicka på den andra knappen från höger högst upp i TestFlight Dashboard.
Att lägga till en ny byggnad är lika lätt som att dra .ipa-filen till lämpligt fält, lägger till en kort beskrivning, även känd som release notes, och klickar på Ladda upp knapp. Release notes är mycket mer användbara än de flesta tror. Utgåvor bör innehålla information om de ändringar som gjorts i testbygget, men de bör också innehålla kända buggar (om det behövs) och potentiella lösningar.
När du har laddat upp en byggnad av din ansökan, tas du till Behörigheter syn på din nya testbyggnad. Tillstånden för en bygga bestämmer vem som har tillgång till den nya testbyggnaden, det vill säga vem som kan installera testbyggnaden på deras enhet (er). Om du till exempel vill testa en kritisk byggning endast internt och hindra externa testare från att komma åt byggnaden kan du begränsa behörigheterna för den byggnaden för att bara innehålla medlemmar i ditt utvecklingsteam.
För att göra distributionen av testbyggnader enklare har TestFlight en funktion som namnges distributionslistor. En distributionslista är en lista eller en grupp personer inom ett TestFlight-team. I stället för att manuellt välja medlemmar i ett TestFlight-team varje gång du laddar upp en ny byggning berättar du TestFlight vilka distributionslistor som har tillgång till den nya byggnaden.
En av de bästa egenskaperna hos TestFlight är möjligheten att samla in och automatiskt symbolisera kraschrapporter. Genomförandet av kontrollpunkter och efterfrågan på användarens återkoppling är också enkelt. Låt oss ändra projektet för att se hur allt detta fungerar.
Öppna ditt Xcode-projekt och gå över till visningskontrollens implementeringsfil (MTViewController.m). I viewDidLoad
metod, skapa tre knappar som visas nedan. Koden ska inte vara svår att förstå.
- (void) viewDidLoad [super viewDidLoad]; // Skapa Crash Button UIButton * CrashButton = [[UIButton-anslag] initWithFrame: CGRectMake (20,0, 20,0, 280,0, 44,0)]; [crashButton setTitle: @ "Crash" forState: UIControlStateNormal]; [crashButton setBackgroundColor: [UIColor blueColor]]; [crashButton addTarget: självåtgärd: @selector (crash :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: crashButton]; // Skapa kontrollpunktsknapp UIButton * checkpointButton = [[UIButton-tilldelning] initWithFrame: CGRectMake (20,0, 72,0, 280,0, 44,0)]; [checkpointButton setTitle: @ "Checkpoint" forState: UIControlStateNormal]; [checkpointButton setBackgroundColor: [UIColor blueColor]]; [checkpointButton addTarget: självåtgärd: @selector (checkpoint :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: checkpointButton]; // Skapa Feedback Knapp UIButton * FeedbackButton = [[UIButton tilldela] initWithFrame: CGRectMake (20,0, 124,0, 280,0, 44,0)]; [FeedbackButton setTitle: @ "Feedback" forState: UIControlStateNormal]; [FeedbackButton setBackgroundColor: [UIColor blueColor]]; [FeedbackButton addTarget: självåtgärd: @selector (feedback :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: feedbackButton];
Tanken är enkel. Applikationen ska krascha när användaren tappar den första knappen. Att krascha en ansökan är lätt. Höger? Ta en titt på genomförandet av krascha:
metod för att se hur det implementeras. Vi skapar en array med ett element och frågar sedan för det andra objektet i matrisen. Detta kastar en NSRangeException
eftersom det bara finns ett element i matrisen.
- (tomrum) krasch: (id) avsändare NSArray * array = @ [@ "one"]; NSLog (@ "% @", [array objectAtIndex: 1]);
Genomförandet av kontrollstation:
Metoden är överraskande lätt tack vare TestFlight SDK. Som jag nämnde tidigare är kontrollpunkter ett sätt att spåra om vissa funktioner i din ansökan används av dina testare. Med andra ord, checkpoints berätta när en användare har gjort något som är av intresse för dig. Som jag sa säger kontrollpunkterna (bland annat) vilka funktioner som används och, ännu viktigare, vilka funktioner som inte är. Vissa funktioner är svåra att hitta trots att det kanske inte är uppenbart för utvecklaren.
- (void) checkpoint: (id) avsändare [TestFlight passCheckpoint: @ "Användaren klickade på checkpunktsknappen."];
Det finns olika sätt att samla in feedback från dina testare. Det enklaste sättet att samla in feedback är dock att använda TestFlights feedbackintegration. Ta en titt på genomförandet av återkoppling:
metod för att se hur det fungerar. När användaren knackar på återkopplingsknappen visas en modalvy och låter användaren skriva in feedback (figur 13).
- (void) feedback: (id) avsändare [TestFlight openFeedbackView];
När du har lagt till ändringarna i din ansökan uppdaterar du versionsnumret för din ansökan till 0.2.0 och arkiverar projektet. Det är bra att alltid rengöra ditt projekt innan du förbereder en byggnad för distribution, både för App Store och för ad hoc-distribution. Ladda upp den nya .ipa-filen till TestFlight, ställ in rätt behörigheter och uppdatera installationen på din enhet med den nya byggnaden genom att besöka TestFlight-instrumentpanelen på enheten. Om du följde stegen ska du se de tre knapparna och knacka på varje knapp kommer att utlösa funktionaliteten i programmet.
TestFlight skickar information till TestFlight-servrarna närhelst det kan, det vill säga om en nätverksanslutning är tillgänglig och operativsystemet inte dödar programmet innan det är färdigt att skicka data till TestFlight-servrarna. Det betyder att TestFlight är ett utmärkt verktyg för att samla in levande data från dina testare. Du kan prova detta själv genom att trycka på de tre knapparna i din ansökan och titta på TestFlight-instrumentpanelen några minuter senare.
TestFlight visar vilka testare som installerade uppdateringen och vilken enhet. Det visar hur många sessioner, vilka kontrollpunkter de passerade och hur många kraschar inträffade. Som jag nämnde tidigare symboliseras kraschrapporterna automatiskt, vilket är en av de funktioner jag älskar mest.
Det är också möjligt att utforska enskilda sessioner genom att klicka på fliken sessioner till vänster (figur 14), välja en användare från listan och klicka på en av sessionerna. Detta ger dig en detaljerad beskrivning av respektive användares session (figur 15).
Betatestning är bara användbart om du kan lita på en grupp engagerade testare som verkligen vill sätta din ansökan genom sina steg. Att lägga testare till TestFlight kan göras på två sätt. (1) Öppna TestFlight-instrumentpanelen för det team som du vill lägga till en ny testare. Klicka på knappen med det lilla plustecknet längst upp till höger och fyll i formuläret. Det rekommenderas att användaren klickar på länken Acceptera på testenheten. Även om detta inte är absolut nödvändigt, gör det processen enklare, eftersom den enhet som användaren använder automatiskt kommer att läggas till sitt konto som en testenhet.
(2) Ett andra alternativ för att lägga till testare är att använda en rekryteringsadress. Detta är ett formulär som gör det möjligt för någon att anmäla sig som tester. Det gör det enklare om du har en ganska stor grupp testare som du vill lägga till i TestFlight.
För några månader sedan förvärvades TestFlight av Burstly och detta har resulterat i skapandet av TestFlight Live. TestFlight Live är ett annat tillägg till TestFlight-plattformen och det ger utvecklare möjlighet att inte bara använda TestFlight för utveckling och testning, men också när applikationen är live i App Store. Du kan läsa mer om det på TestFlights blogg.
Även om tanken bakom TestFlight är enkel, överfördelning av betaversioner, har TestFlight mycket mer att erbjuda. Efter att ha använt TestFlight i några veckor kommer du märka att laget bakom TestFlight har gjort ett bra jobb när det gäller vilka funktioner som ska inkluderas och hur alla olika bitar passar ihop.
Det finns många fler funktioner som jag inte diskuterade i den här artikeln, så jag uppmuntrar dig att besöka TestFlights webbplats och bläddra i den enastående dokumentationen. TestFlight växer fortfarande snabbt och jag är nyfiken på hur den fortsätter att utvecklas och förbättras.