Cum se automatizează ecranele Cu fastlane

În comunitatea de dezvoltatori iOS, fastlane este un instrument foarte popular în zilele noastre. Este nevoie de o sarcină foarte obositoare, care interacționează cu iTunes Connect și o face aproape fără durere prin automatizarea majorității. Ne uităm la conceptul general de fastlane și învățăm cum să luăm capturi de ecran pentru toate dispozitivele în toate limbile cu o singură comandă.

De ce urăsc

"Munca manuală, repetitivă nu merită timpul meu". Fiecare programator a gândit acest lucru cel puțin o dată în cariera sa. Cei mai mulți dintre noi, totuși, nu vor să ia timp pentru a învăța cum să automatizeze corect. Poate pentru că facem aceste sarcini rare sau poate pentru că nu credem că avem suficient timp să ne ocupăm de ea acum.

Mai ales dacă sarcina este aceeași de fiecare dată, dar nu vine atât de mult, cum ar fi lansarea unei noi versiuni sau distribuirea unui test beta pentru testare. Cu toate acestea, cu siguranță este o idee bună să automatizați astfel de sarcini. S-ar putea să uitați un pas și trebuie să începeți sau, atunci când vă ocupați de versiunile beta, ar putea fi foarte dificil să adăugați noi dispozitive la Portalul pentru dezvoltatori și să actualizați profilurile de provizionare înainte de a distribui o nouă construcție.

Aici intră rapidlane. Acesta automatizează conductele dvs. de distribuție și minimizează interacțiunea cu Portalul pentru dezvoltatori și iTunes Connect, din confortul liniei de comandă sau complet automatizată pe serverul de integrare continuă.

Suite de instrumente

fastlane nu este doar o singură unealtă. Este o colecție de, la momentul scrierii, douăsprezece instrumente care urmează filozofia Unix "Face un lucru și face bine". Desigur, ei depind și interacționează unul cu altul.

fastlane în sine este un wrapper în jurul acestor instrumente, care să permită dezvoltatorilor să definească fluxurile de lucru, de asemenea, cunoscut sub numele de benzi. Fiecare flux de lucru necesită difuzarea unor instrumente diferite. De exemplu, dacă doriți să distribuiți testerilor dvs. o versiune pre-lansare, nu va trebui să creați capturi de ecran pentru App Store.

Instalare

Înainte de a putea începe să utilizați un fastlane, trebuie să vă asigurați că aveți codul Xcode Instrumente pentru linia de comandă instalat. Din linia de comandă, executați xcode-select - install pentru a le instala. Dacă este deja instalat, veți vedea o eroare.

fastlane în sine este o bijuterie Ruby. În funcție de sistemul dvs., trebuie fie să fugi gem instala rapidlane sau sudo gem instala rapidlane. Aceasta din urmă este necesară atunci când utilizați versiunea Ruby furnizată de OS X.

Setarea proiectului

După instalarea condițiilor prealabile, trebuie să inițializați proiectul pentru a utiliza rapidlane. În dosarul proiectului, executați fastlane init din linia de comandă pentru a porni un expert de configurare interactivă. Vrăjitorul te întreabă adresa de email și probabil dvs. parola dacă nu este deja în breloc. De asemenea, expertul detectează atributele aplicației, cum ar fi Nume și identificator, și verifică Portalul pentru dezvoltatori și iTunes Connect dacă este deja prezent acolo. Dacă nu este, atunci vă oferă să o creați pentru dvs. nedureros.

De asemenea, puteți configura livra în același pas. Acest instrument vă permite să încărcați metadatele, capturile de ecran și binarul la iTunes Connect pentru dvs. Vom analiza acest lucru într-un alt tutorial.

În timpul procesului de instalare, un nou dosar, pistă rapidă, este creat în directorul proiectului dumneavoastră. Acesta conține date de configurare, cel mai important fiind un fișier numit Fastfile. Fișierul descrie căile pe care le are fastlane. Aici este setarea implicită magazin de aplicații bandă.

desc Aplicați o nouă versiune în App Store: aptore do match (tip: "appstore") snapshot sala de sport livra (forță: adevărată)

Acest flux de lucru sau o bandă face următoarele:

  • prelua toate certificatele de semnare și profilurile de provizionare (Meci)
  • creați capturi de ecran pentru aplicația dvs. (instantaneu)
  • construiți aplicația pentru magazinul de aplicații (sala)
  • încărcați capturi de ecran, metadate și arhiva în iTunes Connect (livra)
  • creați imagini de marketing cu cadre de dispozitiv din capturile de ecran (frameit)

În acest tutorial special, analizăm în detaliu etapa a doua, instantaneu.

Automatizarea imaginilor cu instantanee

De ce ar trebui să automatizați capturile de ecran? Sunt ușor de făcut într-un simulator. Acest lucru ar putea fi adevărat atunci când aveți un singur dispozitiv sau o singură limbă. Să facem matematica. Dacă aplicația dvs. este disponibilă pe iPhone și iPad, atunci aveți şase dimensiuni ecran (4.7 ", 5.5", 4 ", 3.5", iPad și iPad Pro). Să presupunem, de asemenea, că aplicația dvs. este disponibilă în douăzeci limbile pe care le luați cinci capturi de ecran.

6 (dispozitive) × 20 (limbi) x 5 (capturi de ecran) = 600 capturi de ecran

Acum imaginați-vă că trebuie să le luați pe acestea manual. Asta e nebun. Din fericire, există instantaneu. Acesta automatizează capturarea imaginilor de ecran utilizând Instrumente de automatizare furnizate de Apple. Chiar mai bine, din moment ce Xcode 7, nu mai trebuie să folosim JavaScript pentru a automatiza acest lucru. Putem folosi testele Swift și UI pentru această sarcină.

Când instalezi rapidlane, instantaneu este instalat, de asemenea. Cu toate acestea, nu se va inițializa automat instantaneu cu acesta la crearea unui nou proiect. Trebuie să fugi snapshot init în dosarul proiectului.

Aceasta creează două fișiere în pistă rapidă pliant, Snapfile și SnapshotHelper.swift. Trebuie să adăugați fișierul Swift în țintă de testare a proiectului UI.

Asigurați-vă că adăugați fișierul în testele UI.

După adăugarea acestui fișier, trebuie să utilizați și fragmentul de cod instantaneu oferă salvarea capturilor de ecran. Puteți utiliza fișierul de test UI generat de Xcode sau creați unul separat doar pentru capturi de ecran.

În înființat() funcția, înlocuiți XCUIApplication (). Lansare () cu următorul cod:

permiteți app = XCUIApplication () setupSnapshot (app) app.launch ()

Pentru claritate, puteți redenumi, de asemenea testExample (), dar asigurați-vă că nu eliminați Test prefixul numelui funcției.

Acum este timpul să înregistrați pașii pe care îi faceți pentru a genera fiecare dintre capturile de ecran. De asemenea, puteți controla aplicația programabil, dar este mult mai ușor să utilizați funcția de înregistrare a Xcode și să o editați mai târziu pentru a se potrivi nevoilor dvs..

Utilizați butonul roșu de înregistrare din partea de jos pentru a începe înregistrarea.

Când înregistrați o interacțiune simplă, veți ajunge la un cod care arată cumva cum urmează:

func testScreenshots () let app = XCUIApplication () permite masterNavigationBar = app.navigationBars ["Master"] lasa addButton = masterNavigationBar.buttons ["Add"] addButton.tap .staticTexts ["2016-04-12 08:43:40 +0000"] atingeți () app.navigationBars.matchingIdentifier ("Detaliu") butoane ["Master"]. ] .tap () tablesQuery.buttons ["Șterge 2016-04-12 08:43:39 +0000"] atinge () tabeleQuery.buttons ["Delete"] atingeți () masterNavigationBar.buttons ["Done"]. Atingeți() 

Exemplul vine de la implicit Aplicație Master-Detail șablon Xcode prevede. Imediat, puteți vedea problema cu acest cod. Utilizează identificatori specifici pentru a interacționa cu aplicația. Dacă vom rula din nou testul UI, ar eșua, deoarece timbrele sunt diferite.

Într-o primă etapă, putem folosi o funcție oferită de cadrul de testare UI, elementBoundByIndex (_ :). Acest lucru ne permite să accesăm elementele, cum ar fi butoanele și celulele de vizualizare a tabelului, utilizând un index. Acest lucru duce la următorul cod:

func testScreenshots () let app = XCUIApplication () permite masterNavigationBar = app.navigationBars ["Master"] lasa addButton = masterNavigationBar.buttons ["Add"] addButton.tap .cell.elementBoundByIndex (0) .tap () app.navigationBars.matchingIdentifier ("Detaliu") butoane ["Master"] atingeți () masterNavigationBar.buttons ["Edit"]. 0) .buttons.elementBoundByIndex (0) .tap () tabeleQuery.buttons ["Delete"] atingeți () masterNavigationBar.buttons ["Done"].

Avem o altă problemă atunci când încercăm să executăm codul în mai multe limbi. Eșuează de atunci Maestru, Adăuga, etc sunt numite în mod diferit în fiecare limbă. Putem remedia această problemă și prin utilizarea funcției elementBoundByIndex (_ :) metodă. Rețineți că butonul din partea dreaptă a barei de navigare are de fapt un indice de 2, ceea ce înseamnă că este al treilea element, deoarece bara de navigare are întotdeauna un buton ascuns înapoi.

func testScreenshots () let app = XCUIApplication () permite masterNavigationBar = app.navigationBars.elementBoundByIndex (0) permite addButton = masterNavigationBar.buttons.elementBoundByIndex (2) addButton.tap () addButton.tap () let tablesQuery = app.tables tablesQuery (0) .tap () alegeBoundByIndex (0) .tap () lasa celule = tabeleQuery.cells.elementBoundByIndex (0) .tab () (0) cell.buttons.elementBoundByIndex (0) .tap () cell.buttons.elementBoundIndex (1) .tap () masterNavigationBar.buttons.elementBoundByIndex (0) .tap ()

Există o altă comandă rapidă care face mult mai ușoară accesarea elementelor personalizate prin teste UI. Este o proprietate, accessibilityIdentifier, definite de către UIAccessibilityIdentification protocol. Îl puteți folosi pentru a căuta elemente cu acest identificator, de exemplu, Element app.buttons.matchingIdentifier ( "awesomeButton").. Identificatorul de accesibilitate nu este vizibil pentru utilizator, chiar dacă are accesibilitate activată și nu este localizat.

După ce ați configurat interfața de utilizator pentru a lucra cu limbile acceptate de proiect, este timpul să configurați instantaneu pentru a face câteva screenshot-uri. Acest lucru se face cu instantaneu(_:) funcția în testul dvs. UI. De asemenea, trebuie să specificați un nume de fișier. Eu personal folosesc un prefix numerotat, cum ar fi instantaneu ( "1MasterView") sau instantaneu ( "2DetailView") pentru a facilita numărarea numărului de capturi de ecran pe care le-am luat deja și pentru a le sorta automat. Dacă aveți nevoie de timp suplimentar înainte de a face o captură de ecran, utilizați dormi(_:) funcţie.

În cele din urmă, trebuie să-i spui instantaneu ce dispozitive și limbi ar trebui să le utilizeze. Acest lucru este specificat în Snapfile.

dispozitive (["iPhone 6", "iPhone 6 Plus", "iPhone 4s"]]) ["en-US", "DE-DE"])

În acest exemplu, folosesc iPhone 6, iPhone 6 Plus și iPad ca dispozitive și limbile engleză și germană.

Pentru a rula instrumentul, executați instantaneu din linia de comandă. În funcție de dimensiunea proiectului dvs. și de numărul de dispozitive și de limbi, poate dura ceva timp pentru a realiza capturile de ecran. Între timp, vă puteți întinde picioarele, puteți savura o ceașcă de cafea sau pur și simplu urmăriți cum funcționează magia.

Implicit, capturile de ecran sunt stocate în Fastlane / capturi de ecran, fiecare limbă având propriul subfolder și nume de fișier prefixate cu numele dispozitivului. După instantaneu este terminat, generează, de asemenea, un fișier HTML pentru a previzualiza cu ușurință capturile de ecran generate.

După terminarea instantaneului, acesta generează, de asemenea, un fișier HTML pentru a previzualiza cu ușurință capturile de ecran generate.

Concluzie

Prin utilizarea instantaneu, puteți reduce timpul și efortul necesar pentru a crea capturi de ecran pentru aplicația dvs. cu o fracțiune din ceea ce este necesar dacă efectuați această sarcină manual. Desigur, instrumentul este mult mai personalizabil, pentru că am zgâriat numai suprafața a ceea ce instantaneu pot face. Pentru mai multe informații, consultați documentația despre GitHub. Puteți, de asemenea, verifica cursul meu video despre fastlane dacă doriți să aflați mai multe despre acest instrument uimitor.

Cod