Het testen van een applicatie is onmisbaar als u van plan bent om een robuust en betrouwbaar product aan uw klanten te leveren. Dit artikel gaat dieper in op beta-testen van iOS-applicaties met TestFlight, een gratis webservice die het gemakkelijk maakt om Ad Hoc-builds te distribueren en het gebruik van bètatests te monitoren.
Testsoftware is niet beperkt tot bètatests. Er zijn verschillende technieken om software te testen, zoals unit-testen, integratietesten, stresstests, enz. Elk van deze methodologieën heeft zijn voordeel en plaats in de ontwikkelingscyclus. Beta-testen is een proces waarbij een pre-release of bètaversie wordt verspreid onder een beperkt publiek dat geen deel uitmaakt van het ontwikkelingsteam.
In de begintijd van iOS-ontwikkeling was het niet triviaal om testversies te verspreiden, feedback te verzamelen en crashrapporten te verzamelen. De afgelopen jaren zijn er echter een handvol services verschenen die het testen van bèta niet alleen eenvoudiger, maar ook triviaal maken. In dit artikel zal ik een dergelijke service bespreken: TestFlight. TestFlight stelt ontwikkelaars in staat testexemplaren over-the-air te verspreiden. Rommelen met .ipa-bestanden en inrichtingsprofielen is verleden tijd als je besluit om samen te werken met TestFlight.
Het gemak van Ad Hoc-distributie is niet het enige voordeel van TestFlight. TestFlight biedt ook een SDK die u een aantal geweldige functies biedt met verrassend weinig overhead. Met de SDK geïnstalleerd en geconfigureerd, worden crashrapporten verzonden naar TestFlight en automatisch gesymboliseerd. Een andere leuke functie van de TestFlight-SDK zijn ijkpunten. U kunt controlepunten instellen op specifieke locaties in uw toepassing om te zien of een bepaalde functie daadwerkelijk wordt gebruikt. Checkpoints sluiten netjes aan bij sessies. Wanneer een gebruiker de toepassing opent, wordt automatisch een sessie gestart. Het TestFlight-dashboard toont hoe lang een sessie duurt en welke checkpoints de tester tijdens een sessie heeft gehaald. De lijst met functies stopt hier niet. Een paar andere handige functies zijn onder meer feedback via de app, updates in de app en loggen op afstand.
Om de stappen in deze tutorial te volgen, hebt u een TestFlight-account nodig. Ga naar de TestFlight-website en meld je aan voor een gratis account. Nadat je je voor de eerste keer hebt aangemeld bij je TestFlight-account, wordt je gevraagd om een team te maken. Wat zijn teams? Een team is slechts een categorisatie voor het groeperen van builds en testers. De kans is groot dat je in verschillende applicaties voor verschillende klanten of projecten werkt. Met een team kunt u de builds en testers voor elke toepassing of client gemakkelijk groeperen. Met andere woorden, het is een handige manier om de builds en testers van verschillende projecten gescheiden en georganiseerd te houden.
De volgende stap is het uploaden van een test-build naar TestFlight. Voordat we dat doen, moeten we echter een toepassing maken die correct is ingesteld en geconfigureerd voor TestFlight. Dit omvat het integreren van de TestFlight-SDK om te profiteren van de functies die ik eerder heb beschreven.
Testflight schijnt natuurlijk echt als je een groep toegewijde testers hebt (bij voorkeur mensen die geen deel uitmaken van het ontwikkelingsteam). Testers toevoegen aan TestFlight is net zo eenvoudig als het sturen van een uitnodiging. Met TestFlight is het niet langer omslachtig om de UDID van een apparaat te verkrijgen, zoals u later zult zien. Ik leg uit hoe je bètatesters iets later in deze tutorial uitnodigt.
De applicatie die we gaan bouwen zal eenvoudig zijn. Het primaire doel van deze zelfstudie is om u te laten zien hoe u met TestFlight op de hoogte bent en niet zozeer om een veelzijdige toepassing te bouwen. De functies van de applicatie zijn eenvoudig, (1) TestFlight-checkpoints implementeren, (2) de gebruiker vragen om feedback tijdens het gebruik van de applicatie, en (3) het crashen van de applicatie en TestFlight het crashrapport laten verzamelen.
Maak een nieuw project in Xcode door de. Te selecteren Toepassing enkele weergave sjabloon uit de lijst met sjablonen (figuur 3). Geef je sollicitatie een naam Opstijgen, voer een bedrijfsidentificatie in, stel in iPhone voor de apparaatfamilie en vink aan Gebruik automatische referentietelling. Zorg ervoor dat u de resterende selectievakjes voor dit project uitschakelt. Vertel Xcode waar je je project wilt opslaan en klik op creëren knop (figuur 4).
Begin met het downloaden van de laatste stabiele release van de TestFlight SDK (1.1 op het moment van schrijven). Pak het archief uit en voeg toe libTestFlight.a en TestFlight.h, gelegen in de TestFlightx.x map, naar uw project. Zorg ervoor dat u beide bestanden naar uw project kopieert door het vakje met het label aan te vinken Kopieer items naar de map van de bestemmingsgroep (indien nodig) en vergeet niet om beide bestanden aan het Take-Off-doel toe te voegen (figuur 5). Om alles georganiseerd te houden, plaats libTestFlight.a en TestFlight.h in een aparte groep genaamd Test vlucht.
Nog een paar stappen zijn nodig om de integratie met TestFlight te voltooien. Selecteer uw project in de Project Navigator en klik op het startdoel in de lijst met doelen. Selecteer de Bouw fases tab aan de bovenkant en open de Binaire koppeling met bibliotheken lade. Als alles goed is gegaan, libTestFlight.a moet aanwezig zijn in de lijst met bibliotheken. Slepen libTestFlight.a in de lijst met gekoppelde bibliotheken als deze niet in de lijst voorkomt (figuur 6).
TestFlight maakt ook gebruik van de libz bibliotheek om een deel van zijn werk te doen, dus we moeten het project ook aan deze bibliotheek koppelen. Klik op de plusknop onderaan de lijst met bibliotheken, zoek naar libz.dylib, en voeg het toe aan de lijst met gekoppelde bibliotheken.
De volgende stap is optioneel, maar wordt aanbevolen als u TestFlight tijdens uw toepassing wilt gebruiken. In plaats van importeren TestFlight.h in elk bestand dat gebruikmaakt van de TestFlight-SDK, is het handiger om dit aan de projecten toe te voegen Prefix.pch het dossier. Bekijk het complete Prefix.pch bestand hieronder voor verduidelijking.
// // Prefix-header voor alle bronbestanden van het 'Take-Off'-doel in het' Take-off'-project // #import#ifndef __IPHONE_4_0 #waarschuwing "Dit project maakt gebruik van functies die alleen beschikbaar zijn in iOS SDK 4.0 en hoger." #endif # ifdef __OBJC__ #import #importeren #import "TestFlight.h" #endif
TestFlight installeert een niet-afgevangen uitzonderingshandler om crashes te rapporteren en crashrapporten te verzamelen. Als u van deze functie gebruik wilt maken, is het aan te raden om de bouwinstellingen van uw project enigszins aan te passen. Selecteer uw project van de Project Navigator en kies de Opstijgen doelwit uit de lijst met doelen. Selecteer de Bouw instellingen tab en ga naar de Deployment instellingen (figuur 8). Er moeten drie implementatie-instellingen worden ingesteld NEE.
Vetgedrukte instellingen geven aan dat de standaardwaarde is overschreven. Je kunt alle aangebrachte wijzigingen ongedaan maken door een vetgedrukte instelling te selecteren en backspace op je toetsenbord te gebruiken. Zorg ervoor dat de effectieve waarde van de build-instelling is ingesteld op gecombineerde (figuur 9).
TestFlight doet nog niets in uw toepassing. Om gebruik te kunnen maken van de functies, moeten we TestFlight initialiseren wanneer de toepassing wordt gestart. De ideale plek voor het instellen van TestFlight is in de gedelegeerde van de toepassing toepassing: didFinishLaunchingWithOptions:
methode. Het opzetten van TestFlight is verrassend eenvoudig. We hoeven alleen maar te bellen opstijgen:
in de TestFlight-klasse en geef het teamfiche door van het team dat we eerder in deze zelfstudie hebben ingesteld.
Als u uw teamtoken wilt vinden, gaat u naar het Dashboard van TestFlight, selecteert u het juiste team in het vervolgkeuzemenu in de rechterbovenhoek en kiest u Bewerk informatie van datzelfde menu. Kopieer de teamtoken en geef deze door als de parameter in de opstijgen:
methode.
- (BOOL) applicatie: (UIApplication *) applicatie didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Initialize View Controller self.viewController = [[MTViewController alloc] initWithNibName: @ "MTViewController" bundle: nil]; // Initialize Window self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; [self.window setRootViewController: self.viewController]; [self.window makeKeyAndVisible]; // Initialiseer TestFlight [TestFlight takeOff: @ "TEAM_TOKEN_GOES_HERE"]; terugkeer JA;
TestFlight is nu ingesteld, maar we moeten nog steeds een build naar TestFlight uploaden. De volgende stappen zijn niet anders dan de stappen die u gewoonlijk zou nemen om een test of ad hoc-build voor een toepassing voor te bereiden. Ik heb de benodigde stappen hieronder weergegeven.
Dit lijkt misschien veel werk, maar de meeste van deze stappen hoeven maar één keer te worden uitgevoerd voor een nieuwe applicatie. Bovendien kan veel hiervan worden geautomatiseerd. Naast TestFlight's SDK heeft TestFlight ook een upload-API waarmee ontwikkelaars automatisch builds kunnen uploaden naar TestFlight. Ik zal de upload API niet behandelen in deze tutorial omdat dit een meer geavanceerd onderwerp is.
Aangezien u deze zelfstudie aan het lezen bent, ga ik ervan uit dat u al bekend bent met bètatesten en de stappen die nodig zijn om een testversie voor ad hoc-distributie voor te bereiden. In dit artikel beperk ik me tot de stappen waarbij TestFlight is betrokken.
Bij het distribueren van builds met TestFlight is het belangrijk om uw builds correct te verslaan. Door dit te doen, zal het bijhouden van verschillende test-builds veel eenvoudiger worden.
Voordat u uw toepassing uploadt, moet u het versienummer van uw toepassing instellen op 0.1.0 om aan te geven dat dit een pre-releaseversie is. Bekijk deze vraag over Stack Overflow voor meer informatie over versienummers.
Om een build handmatig te uploaden naar TestFlight, klikt u op de tweede knop aan de rechterkant bovenaan het TestFlight-dashboard.
Een nieuwe build toevoegen is net zo eenvoudig als het .ipa-bestand naar het juiste veld slepen, een korte beschrijving toevoegen, ook bekend als release-opmerkingen, en klikken op de Uploaden knop. Release-opmerkingen zijn veel nuttiger dan de meeste mensen denken. Releaseopmerkingen moeten informatie bevatten over de wijzigingen die in de test-build zijn aangebracht, maar ze moeten ook bekende bugs (indien nodig) en mogelijke oplossingen bevatten.
Nadat u een build van uw applicatie hebt geüpload, wordt u naar de machtigingen weergave van uw nieuwe testversie. De machtigingen van een build bepalen wie toegang heeft tot de nieuwe test-build, dat wil zeggen, wie de test-build op hun apparaat (en) kan installeren. Als u bijvoorbeeld een kritieke build alleen intern wilt testen en wilt voorkomen dat externe testers toegang krijgen tot de build, kunt u de machtigingen van die build beperken tot alleen leden van uw ontwikkelteam.
Om de distributie van testversies gemakkelijker te maken, heeft TestFlight een functie die op de juiste manier wordt genoemd distributielijsten. Een distributielijst is een lijst of een groep mensen binnen een TestFlight-team. In plaats van handmatig leden van een TestFlight-team te selecteren telkens wanneer u een nieuwe build uploadt, vertelt u TestFlight welke distributielijsten toegang hebben tot de nieuwe build.
Een van de beste functies van TestFlight is de mogelijkheid om crashrapporten te verzamelen en automatisch te symboliseren. Het implementeren van ijkpunten en het vragen om feedback van gebruikers is ook eenvoudig. Laten we het project aanpassen om te zien hoe dit werkt.
Open uw Xcode-project en ga naar het implementatiebestand van de view-controller (MTViewController.m). In de viewDidLoad
methode, maak drie knoppen zoals hieronder weergegeven. De code moet niet moeilijk te begrijpen zijn.
- (void) viewDidLoad [super viewDidLoad]; // Crash-knop maken UIButton * crashButton = [[UIButton-toewijzing] 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]; // Maak Checkpoint Button UIButton * checkpointButton = [[UIButton alloc] 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]; // Maak feedbackknop UIButton * feedbackButton = [[UIButton alloc] 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];
Het idee is eenvoudig. De toepassing moet crashen wanneer de gebruiker op de eerste knop tikt. Een applicatie crashen is eenvoudig. Rechts? Bekijk de implementatie van de crash:
methode om te zien hoe het geïmplementeerd is. We maken een array met één element en vragen vervolgens naar het tweede object in de array. Dit gooit een NSRangeException
omdat er slechts één element in de array is.
- (ongeldig) crash: (id) afzender NSArray * array = @ [@ "one"]; NSLog (@ "% @", [array-objectAtIndex: 1]);
De implementatie van de checkpoint:
methode is verrassend eenvoudig dankzij de TestFlight SDK. Zoals ik eerder al zei, zijn controlepunten een middel om bij te houden of bepaalde functies van uw toepassing door uw testers worden gebruikt. Met andere woorden, checkpoints vertellen u wanneer een gebruiker iets heeft gedaan dat voor u van belang is. Zoals ik al zei, vertellen controlepunten u (onder andere) welke functies worden gebruikt en, nog belangrijker, welke functies dat niet zijn. Sommige functies zijn moeilijk te vinden, hoewel dit misschien niet voor de hand ligt voor de ontwikkelaar.
- (void) ijkpunt: (id) afzender [TestFlight passCheckpoint: @ "Gebruiker heeft op controleknop geklikt."];
Er zijn verschillende manieren om feedback van uw testers te verzamelen. De eenvoudigste manier om feedback te verzamelen, is echter om TestFlight's feedback-integratie te gebruiken. Bekijk de implementatie van de feedback:
methode om te zien hoe dit werkt. Wanneer de gebruiker op de feedbackknop tikt, verschijnt een modale weergave en kan de gebruiker feedback invoeren (figuur 13).
- (ongeldige) feedback: (id) afzender [TestFlight openFeedbackView];
Nadat u deze wijzigingen aan uw toepassing hebt toegevoegd, werkt u het versienummer van uw toepassing bij naar 0.2.0 en archiveert u het project. Het is een goede gewoonte om uw project altijd schoon te maken voordat u een build voor distributie klaarmaakt, voor de App Store en voor ad hoc distributie. Upload het nieuwe .ipa-bestand naar TestFlight, stel de juiste machtigingen in en werk de installatie op uw apparaat bij met de nieuwe build door naar het TestFlight-dashboard op uw apparaat te gaan. Als u de stappen hebt gevolgd, ziet u de drie knoppen en tikt u op elke knop om de functionaliteit in de toepassing te activeren.
TestFlight verzendt informatie naar de TestFlight-servers wanneer dit kan, dat wil zeggen, als een netwerkverbinding beschikbaar is en het besturingssysteem de toepassing niet doodt voordat deze klaar is met het verzenden van de gegevens naar de TestFlight-servers. Dit betekent dat TestFlight een geweldig hulpmiddel is om live gegevens van uw testers te verzamelen. U kunt dit zelf proberen door op de drie knoppen in uw applicatie te tikken en een paar minuten later een blik te werpen op het TestFlight-dashboard.
TestFlight laat zien welke testers de update hebben geïnstalleerd en op welk apparaat. Hier ziet u het aantal sessies, welke controlepunten ze hebben doorstaan en hoeveel crashes zich hebben voorgedaan. Zoals ik eerder al zei, worden de crashrapporten automatisch gesymboliseerd, wat een van de functies is waar ik het meest van hou.
Het is ook mogelijk om individuele sessies te verkennen door op het tabblad sessies aan de linkerkant te klikken (figuur 14), een gebruiker in de lijst te selecteren en op een van de sessies te klikken. Dit geeft u een gedetailleerd overzicht van de sessie van de betreffende gebruiker (figuur 15).
Bètatesten is alleen nuttig als u kunt vertrouwen op een groep toegewijde testers die uw toepassing echt willen uitproberen. Testers kunnen worden toegevoegd aan TestFlight op twee manieren. (1) Open het TestFlight-dashboard van het team waaraan u een nieuwe tester wilt toevoegen. Klik op de knop met het kleine plusteken in de rechterbovenhoek en vul het formulier in. Het wordt aanbevolen dat de gebruiker op de accept-koppeling op het testapparaat klikt. Hoewel dit niet strikt noodzakelijk is, wordt het proces veel eenvoudiger omdat het apparaat dat de gebruiker gebruikt automatisch als testapparaat aan zijn account wordt toegevoegd.
(2) Een tweede optie om testers toe te voegen, is om een wervings-URL te gebruiken. Dit is een formulier waarmee iedereen zich kan aanmelden als tester. Dit maakt het eenvoudiger als u een vrij grote groep testers hebt die u aan TestFlight wilt toevoegen.
Een paar maanden geleden werd TestFlight overgenomen door Burstly en dit heeft geresulteerd in de oprichting van TestFlight Live. TestFlight Live is een andere toevoeging aan het TestFlight-platform en het geeft ontwikkelaars de middelen om TestFlight niet alleen te gebruiken voor ontwikkeling en testen, maar ook wanneer de toepassing live is in de App Store. Je kunt er meer over lezen op de blog van TestFlight.
Hoewel het idee achter TestFlight eenvoudig is, via de ether distributie van bètaversies, heeft TestFlight veel meer te bieden. Nadat u TestFlight een paar weken hebt gebruikt, zult u merken dat het team achter TestFlight uitstekend werk heeft verricht met betrekking tot welke functies moeten worden opgenomen en hoe alle verschillende onderdelen bij elkaar passen.
Er zijn veel meer functies die ik in dit artikel niet heb besproken, dus ik moedig je aan om de website van TestFlight te bezoeken en door de openstaande documentatie te bladeren. TestFlight groeit nog steeds snel en ik ben benieuwd hoe het blijft evolueren en verbeteren.