Construirea următoarei generații de aplicații

Îmbunătățirile platformei și obiectivele pentru Juno

De ceva mai mult de 7 ani, elementarul și-a propus să aducă aplicații ucigașe pe desktopurile Open Source. Pe parcursul ciclului de dezvoltare Juno, am lucrat din greu pentru a ne oferi viziunea asupra aplicațiilor respective, dar nu toată munca pe care am depus-o este vizibilă pentru utilizatorii accidentali. În această postare, voi vorbi despre un pic de istorie în legătură cu modul în care punem lucrurile sub capotă și cum arată noul normal pentru aplicațiile elementare. Urmăriți-vă pe căștile dvs. dev și lăsați-vă să fiu geamăn.

Gen I

Am furnizat prima versiune de sistem de operare elementară cu cea mai bună soluție la dezvoltarea de aplicații convingătoare Open Source. Nu aveam o limbă standard. Aplicațiile au fost scrise în Python, C #, C, Vala, orice. Nu a existat un ghid de stil de cod. Codul nostru a fost foarte dezordonat și nu foarte consistent. Gtk2 a fost un lucru. Și, de asemenea, desenarea lucrurilor de mână în Cairo. Era epoca „bandă de conductă și sârmă de salvare” a dezvoltării elementare a aplicațiilor.

0.1 Jupiter, cel mai bine văzut cu acest scor însoțitor

În timpul călătoriei noastre la Summit-ul pentru dezvoltatori Ubuntu, în 2011, după ce am lansat câteva dintre noile noastre aplicații la echipa Ubuntu Desktop Team, ne-am așezat împreună cu dezvoltatorul Unity, Jason Smith, care ne-a transmis un adevăr greu: nu eram un magazin excelent de coduri și trebuia să schimbăm modul de lucru.

Gen II

Am făcut o mulțime de alegeri grele în timpul dezvoltării Luna și unele dintre ele ne-au costat contribuabili valoroși. Cele două mari schimbări au fost standardizarea la Vala și introducerea recenziilor de coduri.

Alegerea unui limbaj standard a fost cu adevărat poarta pentru ridicarea standardelor noastre. Acest lucru a făcut mult mai ușor pentru oricine lucrează la o aplicație să poată contribui cu ușurință la o altă aplicație și ne-a permis să creăm un singur ghid de stil de cod cu care toată lumea ar putea să se familiarizeze. Ulterior, ne-ar permite să scriem documente complete pentru dezvoltatori și să oferim părților terțe o cale clară către livrarea aplicațiilor lor către utilizatorii elementari de sisteme de operare. De asemenea, am ales un sistem standard de construire cu CMake din motive similare.

Introducerea recenziilor de coduri a fost o sarcină mult mai dificilă. Spre deosebire de instrumentele moderne precum GitHub, platforma noastră de găzduire a codurilor de altădată, Launchpad, nu avea niciun concept nativ de recenzii. Am început să folosim un bot numit Tarmac, ceea ce au început să folosească dezvoltatorii Canonical. A fost lent și dureros, iar unii dezvoltatori au considerat-o cu adevărat personal că am dorit ca codul lor să fie revizuit de la egal la egal înainte de a putea intra în portbagajul de dezvoltare.

Fișiere cu un Gtk + HeaderBar în Freya 0,3

Începând cu Luna, dar în toată Freya și chiar în Loki, ne-am străduit să găsim un desktop Gtk3 pur și sunt foarte mândru să spun că am terminat tranziția înainte de a începe chiar și multe alte proiecte ale lor. Am îmbrățișat și implementat HeaderBars peste tot, chiar și în locurile în care GNOME nu a fost încă. Gtk3 ne-a permis, de asemenea, să creăm stiluri personalizate mai complexe cu CSS și să introducem o tipografie mai bună în aplicațiile noastre cu un control mult mai fin asupra înălțimilor și greutăților fonturilor.

De asemenea, am introdus o nouă bibliotecă numită Granite pentru a partaja codul comun între proiecte și a extinde lucrurile pe care le-am obținut de la Gtk +. Multe dintre widget-urile pe care le-am construit în cele din urmă ar fi înlocuite cu implementări în Gtk + în sine, inclusiv HeaderBars, Popovers și multe altele. În timp ce Granite continuă să fie îmbunătățit și sunt adăugate funcții și widget-uri noi, suntem de asemenea foarte încântați când putem depăși clasele pe măsură ce Gtk + câștigă funcții.

Gen II a fost lung și bun și a adus multe progrese grozave în modul în care am construit aplicații. A fost o perioadă de schimbări treptate, fără prea multe supărări importante, de când am făcut acele alegeri grele în Luna. E timpul să scuturăm lucrurile.

Gen III

Cu cea mai nouă generație, am făcut mai multe schimbări mari, cu scopul de a facilita implicarea noilor contribuitori și pentru păstrarea bazelor de coduri pentru contribuabili vechi.

Una dintre cele mai mari este îmbrățișarea completă a notării de nume de domeniu invers (RDNN). Din cauza istoriei noastre lungi, noii colaboratori ar putea constata că atunci când, de exemplu, clonează elementare / fișiere, numele binar al proiectului este pantheon-files, .desktop se numește org.pantheon.files, iar setările sunt stocate la net. launchpad.marlin. Când toate denumirile sunt bazate pe RDNN, noii colaboratori pot prezice cu ușurință că numele binarelor, .desktops-urilor, căilor GSettings etc. vor fi întotdeauna, de exemplu, fișiere io.elementary.files. Acest lucru garantează, de asemenea, că nu avem conflicte de denumire a fișierelor cu pachete din upstreams-ul nostru, cum ar fi Debian sau Ubuntu. Puteți citi mai multe despre asta în articolul precedent al lui Cassidy, „Curățarea numelor de cod pentru aplicații”.

O reprezentare vizuală a modului în care se simte Gen III sub capotă

De asemenea, apăsăm să avem o structură de directoare de arbore sursă consistentă cu fișiere standard precum Application.vala în directorul src care conține clasa Application (imaginați asta!), O așteptare că puteți găsi .desktops și appdata.xml în date director, etc. Acest lucru face mai ușor pentru dezvoltatorii care lucrează la mai multe proiecte să găsească rapid fișiere comune între proiecte.

Aplicațiile Gen III folosesc, de asemenea, GResources pentru active personalizate, cum ar fi pictograme, imagini și CSS, în loc să instaleze fișiere în sistemul de fișiere. Acest lucru este important atât pentru asigurarea faptului că aceste active nu provoacă conflicte de ambalare dacă sunt instalate într-un director de sistem, precum directorul pictogramelor hicolor, cât și pentru reducerea erorilor IO și creșterea performanței.

Stânga: aplicația Lingo a Gen I | Corect: aplicația Palaura a Gen III

Veți observa, de asemenea, multe aplicații Gen III care utilizează mult mai cuprinzător Gtk.CSS pentru a oferi branding, inclusiv lucruri precum tipografii mai stilizate și anteturi colorate. Puteți citi mai multe despre unele instrumente disponibile pentru dezvoltatori aici, în cel mai recent articol al nostru Sfaturi pentru dezvoltatori.

Am discutat anul trecut despre îmbrățișarea noilor standarde de metadate sub formă de AppStream și înlocuirea dialogurilor „Despre”. Vom continua această cale și în prezent investigăm noi standarde precum OARS, care ar permite noi forme de control parental și să ne asigurăm că utilizatorii au mai mult control asupra tipului de conținut consumat pe dispozitivele lor.

De asemenea, am înregistrat progrese în construirea tuturor aplicațiilor noastre cu Meson și am contribuit cu pachete în amonte pentru o mai bună asistență Vala și instrumente de localizare. Puteți citi mai multe despre asta aici.

Nu în ultimul rând, dar nu în ultimul rând, am folosit mult mai cuprinzător testele automatizate sub forma Travis CI pe GitHub și Flightcheck, soluția noastră de testare pentru AppCenter Dashboard. Testarea continuă, pe lângă revizuirea codului, ne ajută să menținem calitatea codului și a metadatelor și să evităm introducerea de regresii. În acest moment, testăm o versiune continuă a Flightcheck pentru a face mai ușor pentru oricine să ruleze suita completă de teste menținute elementar cu Travis. Mai multe despre asta în curând.

Sperăm, de asemenea, să oferim mai multe instrumente și o documentare mai bună pe tot parcursul ciclului Juno, așa că rămâneți la curent aici pe blogul nostru pentru mai multe informații despre cum puteți și să livrați aplicații killer Open Source.

Mulțumesc din nou tuturor dezvoltatorilor care fac aplicații pentru AppCenter, tuturor celor care au cumpărat o aplicație pe AppCenter, susținătorilor noștri de Bountysource și Patreon, precum și celor care au achiziționat o copie a sistemului de operare elementar sau merch de la magazinul nostru. Fiecare contribuție ajută să facem toate acestea posibile și nu am fi aici fără tine! Dacă doriți să ajutați la îmbunătățirea sistemului de operare elementar, nu ezitați să implicați!